He tenido un poco de tiempo libre así que he vuelto a jugar con este cacharrillo. Mi idea es conectarle un disco USB con Samba.
Al conectarle el cable serie en el arranque sale esto:
------------------------------------
-->Config USB server...
VBUS off(0)-GPIO60(LOW)
suspend: usb power down
------------------------------------
Asi que es el SW del operador el que tira abajo el USB

La idea sería dejar:
CLI operativo
Paginas web de configuración operativas (o casi)
Cable inoperativo (o no

)
Usuarios por defecto eliminados o con la password cambiada
USB operativo (mass storage, SMB y -si se puede- servidor de impresora) Ambos vienen en el firmware
Hacemos un backup de las particiones (Generic Backup OpenWrt Wiki)
Las juntamos (cat mtd0.backup... > todo.backup ) y binwalk nos confirma que el FS está repetido
0x0000000 0x0040000 bootloader
0x0040000 0x0146000 Boot Script File
0x00413FC Multi Image File
0x0041448 0x0145FFF Kernel
0x0146000 0x0837239 sqsh
0x0FF0000 0x162ABA1 Boot Script File
0x0FF13FC Multi Image File
0x0FF1448 0x10F5FFF kernel
0x10F6000 0x162ABA1 sqsh
0x1FB0000
0x1FB0050 Zlib compressed data
0x1FB00AC 0x1FC20CB JFFS2 filesystem
No me interesa ni UBIFS ni tener todo duplicado así que me hago mi propio esquema de particiones y lo cargo a partir del resultado de binwalk.
Ahí va:
Montamos un tftp server en el PC con IP 192.168.100.2
Kernel
Extraemos el kernel del backup: 0x0041448 a 0x0145FFF -> kernel.bin
Creamos la imagen del kernel
mkimage -A ARM -O linux -T Kernel -C none -a 0x80A00000 -e 0x80A00000 -n 'Kernel Julio' -d kernel.bin kernel.img
Tenemos:
uboot en 00000 a 20000 (0x20000, 128k)
env1 en 20000 a 30000 (0x10000, 64k)
env2 en 30000 a 40000 (0x10000, 64k)
Cargamos el kernel en 40000:
tftpboot 0x80000100 kernel.img
protect off 0x48040000 +${filesize}
erase 0x48040000 +${filesize}
cp.b ${fileaddr} 0x48040000 ${filesize}
protect on 0x48040000 +${filesize}
Ahora ya se podria arrancar el kernel con bootm 0x48040000
Extraemos el FileSystem: 0x0146000 0x0837239 -> squashfsRootFileSystem.backup
Cargamos el squashfs original en 150000
tftpboot 0x80000100 squashfsRootFileSystem.backup
protect off 0x48150000 +${filesize}
erase 0x48150000 +${filesize}
cp.b ${fileaddr} 0x48150000 ${filesize}
protect on 0x48150000 +$filesize
Para poder meterle mano creamos un filesystem de lectura/escritura que será con el que arrancaremos al final
Creamos un en el PC fs de 10M vacio (Vale, seguro que hay una forma más elegante)
mkdir dir_vacio
mkfs.jffs2 --pad=10000000 --big-endian --squash -v -e 64KiB -o vacio.jffs2 -d dir_vacio
Lo cargamos
tftpboot 0x80000100 vacio.jffs2
protect off 0x48E90000 +$filesize
erase 0x48E90000 +$filesize
cp.b ${fileaddr} 0x48E90000 ${filesize}
protect on 0x48E90000 +$filesize
Cargamos del backup la partición que tiene la nvram en E40000 a E90000 (0x50000 320k)
tftpboot 0x80000100 nvram.backup
protect off 0x48E40000 +$filesize
erase 0x48E40000 +$filesize
cp.b ${fileaddr} 0x48E40000 ${filesize}
protect on 0x48E40000 +$filesize
Arrancamos desde el squashfs original
setenv bootargs "root=/dev/mtdblock4 mtdparts=sf0:0x20000(U-Boot)ro,0x10000(env1),0x10000(env2),0x110000(Kernel),0xCF0000(RootFileSystem)ro,0x50000@0xE40000(nvram),0xE90000(vacio) console=ttyS0,115200n8,n ethaddr0=00:05:CA:00:00:00"
bootm 0x48040000
Queda al arrancar:
...
...
7 cmdlinepart partitions found on MTD device sf0
partitions[0] = {.name = U-Boot, .offset = 0x00000000,.size = 0x00020000 (128K) }
partitions[1] = {.name = env1, .offset = 0x00020000,.size = 0x00010000 (64K) }
partitions[2] = {.name = env2, .offset = 0x00030000,.size = 0x00010000 (64K) }
partitions[3] = {.name = Kernel, .offset = 0x00040000,.size = 0x00110000 (1088K) }
partitions[4] = {.name = RootFileSystem, .offset = 0x00150000,.size = 0x00cf0000 (13248K) }
partitions[5] = {.name = nvram, .offset = 0x00e40000,.size = 0x00050000 (320K) }
partitions[6] = {.name = vacio, .offset = 0x00e90000,.size = 0x01170000 (17856K) }
Creating 7 MTD partitions on "sf0":
0x00000000-0x00020000 : "U-Boot"
0x00020000-0x00030000 : "env1"
0x00030000-0x00040000 : "env2"
0x00040000-0x00150000 : "Kernel"
0x00150000-0x00e40000 : "RootFileSystem"
0x00e40000-0x00e90000 : "nvram"
0x00e90000-0x02000000 : "vacio"
Creating 1 MTD partitions on "sf0":
0x00000000-0x01000000 : "sf0"
Creating 1 MTD partitions on "sf1":
0x00000000-0x01000000 : "sf1"
...
...
~ # cat /proc/mtd
dev: size erasesize name
mtd0: 00020000 00010000 "U-Boot"
mtd1: 00010000 00010000 "env1"
mtd2: 00010000 00010000 "env2"
mtd3: 00110000 00010000 "Kernel"
mtd4: 00cf0000 00010000 "RootFileSystem"
mtd5: 00050000 00010000 "nvram"
mtd6: 01170000 00010000 "vacio"
mtd7: 01000000 00010000 "sf0"
mtd8: 01000000 00010000 "sf1"
Montamos para copiar squash mtd4 a jffs mtd6
mkdir /var/vacio
mount -t jffs2 /dev/mtdblock6 /var/vacio
mkdir /var/mountemp
mount /dev/mtdblock4 /var/mountemp
cd /var/mountemp
Copiamos todo a /var/vacio usando cp -a para preservar los enlaces simbolicos
Una vez terminado:
sync
reboot
Paramos con @
Ajustamos Uboot para que el filesystem raíz sea nuestro jffs2
setenv bootargs "root=/dev/mtdblock6 rootfstype=jffs2 mtdparts=sf0:0x20000(U-Boot)ro,0x10000(env1),0x10000(env2),0x110000(Kernel),0xCF0000(SqshfsRootFS)ro,0x50000@0xE40000(nvram),0xE90000(jffs2RootFS) console=ttyS0,115200n8,n ethaddr0=00:05:CA:00:00:00"
setenv bootcmd "bootm 0x48040000"
saveenv
reset
Ya lo tengo todo en un filesystem de lectura/escritura.
Me queda ver cuando tenga un ratillo como dejar operativo el USB