如何在不写入整个固件的情况下将文件存储在路由器的 NAND 上

逆向工程 固件 linux
2021-06-29 03:28:33

我想通过在 /etc 中存储一些额外的文件来修改我的 ZyXEL P-2812HNU-F1 dsl 路由器。但是,/etc 挂载为 tmpfs,因此重新启动时更改会丢失。但可能有办法解决它;)

# cat /proc/mounts 
rootfs / rootfs rw 0 0
/dev/root / yaffs2 ro,relatime 0 0
tmpfs /etc tmpfs rw,relatime 0 0
[..snip..]
/dev/mtdblock4 /mnt/Config yaffs2 rw,relatime 0 0
/dev/mtdblock3 /mnt/firmware yaffs2 rw,relatime 0 0

# touch /am-i-really-mounted-rw
touch: /am-i-really-mounted-rw: Read-only file system

# cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 01e00000 00020000 "rootfs,kernel1"
mtd1: 01e00000 00020000 "rootfs,kernel2"
mtd2: 00ac0000 00020000 "reserve"
mtd3: 02cc0000 00020000 "firmware"
mtd4: 00aa0000 00020000 "config"
mtd5: 00040000 00020000 "mrd_cert1"
mtd6: 00040000 00020000 "mrd_cert2"

# cat /proc/cmdline 
root=/dev/mtdblock0 rootfstype=yaffs2 console=ttyS0,115200 phym=128M mem=126M panic=1 vpe1_load_addr=0x87e00000M vpe1_mem=2M vpe1_wired_tlb_entries=0 

# uname -a
Linux router 2.6.32.42 #25 Mon Oct 5 14:41:26 CST 2015 mips unknown

所以,

  1. 为什么 /mounted rw 但实际上是只读的?
  2. 为什么有两个 rootfs/kernel 分区?那么路由器可以在运行时自行闪烁,然后在启动时切换到另一个?
  3. 我可以使用 dd 安全地将正在运行的内核/rootfs 复制到另一个 mtdblock 吗?
  4. 我如何从另一个 mtblock 启动?我已经有了 USB FTDI 电缆。
  5. 或者,是否有另一种方法将持久文件写入 /etc 此处?
1个回答

好的,多亏了 Arkadiusz 的评论,我发现我所要做的就是快速mount /dev/root / -o remount,rw -t yaffs2,可写的根!