Pulsamos "U" para cargar el uboot
[VR9 Boot]:U
UPLOAD Flash
---------------------------------------
Area Address Length
---------------------------------------
[0] Boot 0xB0000000 512K
[1] Image 0 0xB1280000 6144K
[2] Image 1 0xB1880000 6144K
[3] Configuration 0xB1E80000 1024K
[4] Boot Parameters 0xB1F80000 256K
[5] Flash Image 0xB0000000 32768K
[6] Linux Image 0xB0080000 24576K
[7] Emergency Value 0xB1FC0000 2883584K
---------------------------------------
Enter area to UPLOAD: 0
Upload area 0. Are you sure? (Y/n)
Pulsamos "Y" y mandamos por X-modem la imagen de uboot
2.-Instalación de OpenWrt desde u-boot modificado
Muy sencillo; definimos dos nuevas macros y las hacemos permanentes en u-boot con:
setenv write-openwrt 'tftpboot openwrt-lantiq-xrx200-ARV7519RWV1X-squashfs.image && protect off 0xB0080000 +$filesize && erase 0xB0080000 +$filesize && cp.b $fileaddr 0xB0080000 $filesize'
setenv kernel_addr 0xB0080000
saveenv
(cambiamos la X por la versión de nuestro router).
Ejecutamos la macro: run write-openwrt,
arv7519rw # run write-openwrt
Sigo pensando que la tabla indicada en el [VR9 Boot]: es "
falsa", o al menos no concuerda totalmente con la realidad.
Con los datos mtd se tendrian que hacer las siguientes correcciones para que se pareciese mas a la realidad:
[[0] Boot 0xB0000000 512K
[1] Image 0 0xB1280000 6144K ¿?
[2] Image 1 0xB1880000 6144K
[3] Configuration 0xB1E80000 1024K
[4] Boot Parameters 0xB1F80000 256K
[5] Flash Image 0xB0000000 32768K
[6] Linux Imageuboot_cfg 0xB0080000 128K
[6] Linux Image 0xB00A0000 24448K
[7] Emergency Value 0xB1FC0000 256K
Los datos obtenidos de la lectura de bloques mtd de la flash y su estructura interna lo confirman.
https://foro.seguridadwireless.net/openwrt/(desarrollo)-openwrt-en-astoria-arv7519rw22-livebox-2-1/msg307557/#msg307557TAMAÑO DE BLOQUE EN EL BORRADO:Erasesize: 0x00020000 (128K)
Para toda la flash de 32MBTAMAÑOS:mtd0.bin "uboot" 262.144 (256K) 0x00040000
mtd1.bin "uboot_bin" 262.144 (256K) 0x00040000
mtd2.bin "uboot_cfg" 131.072 (128K) 0x00020000
mtd3.bin "kernel" 2.097.152(2048K) 0x00200000
mtd4.bin "rootfs" 10.485.760(10240K) 0x00A00000
mtd5.bin "rootfs2" 11.534.336(11264K) 0x00B00000
mtd6.bin "sys_config" 917.504(896K) 0x000E0000
mtd7.bin "supertask_img" 6.291.456(6144K) 0x00600000
mtd8.bin "supertask_cfg" 1.048.576(1024K) 0x00100000
mtd9.bin "supertask_bootcfg" 524.288(512K) 0x00080000
POSICIONES DE MEMORIA FLASH (BASE=0xB0000000):mtd0.bin 0xB0000000 .. 0xB003FFFF
mtd1.bin 0xB0040000 .. 0xB007FFFF
mtd2.bin 0xB0080000 .. 0xB009FFFF
mtd3.bin 0xB00A0000 .. 0xB029FFFF
mtd4.bin 0xB02A0000 .. 0xB0C9FFFF
mtd5.bin 0xB0CA0000 .. 0xB179FFFF
mtd6.bin 0xB17A0000 .. 0xB187FFFF
mtd7.bin 0xB1880000 .. 0xB1E7FFFF
mtd8.bin 0xB1E80000 .. 0xB1F7FFFF
mtd9.bin 0xB1F80000 .. 0xB1FFFFFF
Al escribir la imagen Openwrt a partir de la posicion
0xB0080000 se eliminan los datos del mtd2.bin ("
uboot_cfg").
Tamaño:
mtd2.bin "uboot_cfg" 131.072 (128K) 0x00020000
Posicion:
mtd2.bin 0xB0080000 .. 0xB009FFFF
Si quereis ver lo que contiene este archivo mtd2.bin, lo pongo aqui de forma integra (en modo texto):
”Ýb<bootcmd=run flash_flash bootdelay=3 baudrate=115200 preboot=echo;echo Type \"run flash_nfs\" to mount root filesystem over NFS;
echo bootfile="uImage" mem=126M phym=128M ethaddr=00:99:88:00:99:88 netdev=eth0 console=ttyS0 baudrate=115200 tftppath= loadaddr=0x80800000
rootpath=/mnt/full_fs rootfsmtd=/dev/mtdblock4 addip=setenv bootargs $(bootargs) ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname):
$(netdev):on addmisc=setenv bootargs $(bootargs) console=$(console),$(baudrate) ethaddr=$(ethaddr) phym=$(phym) mem=$(mem) panic=1
mtdparts=$(mtdparts) init=/etc/preinit vpe1_load_addr=0x87e00000 vpe1_mem=2M u-boot=u-boot.lq rootfs=rootfs.img fullimage=fullimage.img
jffs2image=root.jffs2-128k.nor totalimage=totalimage.img flashargs=setenv bootargs root=$(rootfsmtd) rw rootfstype=squashfs,jffs2 bridge mptest
calibrate flash_flash=run flashargs addip addmisc; bootm $(kernel_addr) update_uboot=tftpboot $(loadaddr) $(tftppath)$(u-boot);
erase b0000000 +20000; cp.b $(loadaddr) b0000000 $(filesize); reset update_kernel=tftpboot $(loadaddr) $(tftppath)$(bootfile);
upgrade $(loadaddr) $(filesize) update_rootfs=tftpboot $(loadaddr) $(tftppath)$(rootfs); upgrade $(loadaddr) $(filesize)
update_fullimage=tftpboot $(loadaddr) $(tftppath)$(fullimage); erase $(f_rootfs_addr) +0xc20000; cp.b $(loadaddr) $(part1_begin) $(filesize)
mtdparts=ifx_nor0:256k(uboot),256k(uboot_bin),128k(uboot_cfg),2m(kernel),10m(rootfs),11m(rootfs2),896k(sys_config),6m(supertask_img),
1m(supertask_cfg),512k(supertask_bootcfg) reset_uboot_config=prot off 0xB0080000 0xB0FBFBFF; erase 0xB0080000 0xB0FBFBFF
part0_begin=0xB0000000 part1_begin=0xB0040000 part2_begin=0xB0080000 part3_begin=0xB00A0000 part4_begin=0xB02A0000 part5_begin=0xB0CA0000
part6_begin=0xB11A0000 part7_begin=0xB1280000 part8_begin=0xB1E80000 part9_begin=0xB1F80000 total_part=10 flash_end=0xB1FFFFFF data_block0=uboot
data_block1=uboot_bin data_block2=ubootconfig data_block3=kernel data_block4=rootfs data_block5=rootfs2 data_block6=sysconfig
data_block7=supertask_img data_block8=supertask_cfg data_block9=supertask_bootcfg total_db=10 f_uboot_addr=0xB0000000 f_uboot_size=0x00040000
f_uboot_bin_addr=0xB0040000 f_uboot_bin_size=0x00040000 f_ubootconfig_addr=0xB0080000 f_ubootconfig_size=0x00020000 f_ubootconfig_end=0xB0FBFBFF
f_kernel_end=IFX_CFG_FLASH_KERNEL_IMAGE_END_ADDR f_rootfs2_addr=0xB0CA0000 f_rootfs2_size=0x00500000 f_sysconfig_addr=0xB11A0000
f_sysconfig_size=0x000E0000 f_ddrconfig_addr=0xB003FFE8 f_ddrconfig_size=24 f_supertask_img_addr=0xB1280000 f_supertask_img_size=0x00c00000
f_supertask_cfg_addr=0xB1E80000 f_supertask_cfg_size=0x00100000 f_supertask_bootcfg_addr=0xB1F80000 f_supertask_bootcfg_size=0x00080000
update_jffs2image=tftpboot $(loadaddr) $(tftppath)$(jffs2image); erase $(f_rootfs_addr) +0xa00000; upgrade $(loadaddr) $(filesize)
update_flash=tftp $(loadaddr) flash2.img; protect off b0800000 +800000; erase b0800000 +800000; cp.b $(loadaddr) b0800000 800000;
tftp $(loadaddr) flash1.img; protect off b0000000 +800000; erase b0000000 +800000; cp.b $(loadaddr) b0000000 800000 sw_version=01-01-101t0
hw_version=VR9 serial=00000000 ethact=vr9 Switch f_rootfs_size=0x008c0000 f_rootfs_addr=0xb02a0000 f_rootfs_end=0xb0b60000 f_rootfs_crc=AFEFC669
stdin=serial stdout=serial stderr=serial bootargs=root=/dev/mtdblock4 rw rootfstype=squashfs,jffs2 bridge mptest calibrate
ip=192.168.2.1:192.168.2.100::::eth0:on console=ttyS0,115200 ethaddr=00:99:88:00:99:88 phym=128M mem=126M panic=1
mtdparts=ifx_nor0:256k(uboot),256k(uboot_bin),128k(uboot_cfg),2m(kernel),10m(rootfs),11m(rootfs2),896k(sys_config),6m(supertask_img),
1m(supertask_cfg),512k(supertask_bootcfg) init=/etc/preinit vpe1_load_addr=0x87e00000 vpe1_mem=2M filesize=132570 fileaddr=80800000
ipaddr=192.168.2.1 serverip=192.168.2.100 f_kernel_size=0x00132570 f_kernel_addr=0xb016da90 kernel_addr=0xb016da90 f_kernel_crc=AAD77A32
Estos datos nos generan una tabla que contiene unas posiciones y tamaños que difieren en algunos puntos de la obtenida en los archivos mtdX.bin, pero que servira para ayudar a definir una tabla con la estructura definitiva de la flash (analizando el contenido interno de los archivos mtdX.bin y las diferentes posiciones de memoria):
part0_begin=0xB0000000
part1_begin=0xB0040000
part2_begin=0xB0080000
part3_begin=0xB00A0000
part4_begin=0xB02A0000
part5_begin=0xB0CA0000
part6_begin=0xB11A0000 <-- diferente posicion en mtd6.bin (0xB17A0000), aqui adelantado 0x00600000 = 6144K = 6M
part7_begin=0xB1280000 <-- diferente posicion en mtd7.bin (0xB1880000), aqui adelantado 0x00600000 = 6144K = 6M
part8_begin=0xB1E80000
part9_begin=0xB1F80000
total_part=10
flash_end=0xB1FFFFFF
data_block0=uboot
data_block1=uboot_bin
data_block2=ubootconfig
data_block3=kernel
data_block4=rootfs
data_block5=rootfs2
data_block6=sysconfig
data_block7=supertask_img
data_block8=supertask_cfg
data_block9=supertask_bootcfg
total_db=10
f_uboot_addr=0xB0000000
f_uboot_size=0x00040000
f_uboot_bin_addr=0xB0040000
f_uboot_bin_size=0x00040000
f_ubootconfig_addr=0xB0080000
f_ubootconfig_size=0x00020000
f_ubootconfig_end=0xB0FBFBFF
f_kernel_end=IFX_CFG_FLASH_KERNEL_IMAGE_END_ADDR
f_rootfs2_addr=0xB0CA0000
f_rootfs2_size=0x00500000
f_sysconfig_addr=0xB11A0000
f_sysconfig_size=0x000E0000
f_ddrconfig_addr=0xB003FFE8
f_ddrconfig_size=24
f_supertask_img_addr=0xB1280000
f_supertask_img_size=0x00c00000
f_supertask_cfg_addr=0xB1E80000
f_supertask_cfg_size=0x00100000
f_supertask_bootcfg_addr=0xB1F80000
f_supertask_bootcfg_size=0x00080000
Es posible que no le deis importancia, pero le estais quitando los parametros de configuracion del uboot original, incluidos los de configuracion de la consola serie, los distintos modos de arranque, el de panico, etc.
Pienso que este uboot se ha puesto aqui como parche, siendo de otro dispositivo, y que las zonas de grabado de imagenes no son las correctas.
No tiene sentido que al grabar una imagen se borren zonas de configuracion de uboot, ¿o si?.
Noltari, no se si tu problema de no poder acceder actualmente al modo UART tras pruebas con distintos firmwares y flasheos puede ser debido a esto o no.
Pienso que
ddrconfig puede llegar a ser un parametro "delicado", que puede
"brickear" el router en ciertos casos.
0x0003FFE8:
56 40 FF FA A2 23 00 00
10 00 00 0E 02 00 18 21
00 60 80 21 00 40 18 21
Yo creo que seria mejor grabar a partir de la posicion del inicio del bloque mtd3.bin, en la direccion
0xB00A0000:
mtd3.bin 0xB00A0000
Se conservaria el uboot original completo y se tendria espacio suficiente para grabar la imagen OpenWrt que se quisiese, ya que habria disponible unos 23MB de memoria flash (entre el kernel, el rootfs y el rootfs2).
mtd3.bin "kernel" 2.097.152(2048K) 0x00200000
mtd4.bin "rootfs" 10.485.760(10240K) 0x00A00000
mtd5.bin "rootfs2" 11.534.336(11264K) 0x00B00000
¿Podeis hacer esta prueba?:
setenv write-openwrt 'tftpboot openwrt-lantiq-xrx200-ARV7519RWV1X-squashfs.image && protect off 0xB00A0000 +$filesize && erase 0xB00A0000 +$filesize && cp.b $fileaddr 0xB00A0000 $filesize'
setenv kernel_addr 0xB00A0000
saveenv
X es 1 o 2, dependiendo de la version del hardware.VERIFICACION DE IMAGENES:Tanto las imagenes de linux originales como las de OpenWrt generadas empiezan con:
27 05 19 56 ...
Podeis comprobarlo con los archivos:
openwrt-lantiq-xrx200-ARV7519RWV11-squashfs.image ("openwrt" --> MIPS OpenWrt Linux-3.10.36)
mtd3.bin ("kernel" --> MIPS LTQCPE Linux-2.6.32.32)
Resulta que el mtd2.bin "uboot_cfg" me indica lo siguiente:
f_kernel_addr=0xb016da90 kernel_addr=0xb016da90
Quitando los offset de la posicion del archivo mtd3.bin saldria la posicion 0x000CDA90.
En la posicion 0x000CDA90 del archivo mtd3.bin hay lo siguiente:
27 05 19 56 ... MIPS IFXCPE Linux-2.6.20.19
¡Anda! una imagen de linux.
Analizando el archivo mtd3.bin he localizado las siguientes imagenes con la cabecera 27 05 19 56 ...:
0x00000000 --> MIPS LTQCPE Linux-2.6.32.32
0x000A0000 --> MIPS LTQCPE Linux-2.6.32.32
0x000CDA90 --> MIPS IFXCPE Linux-2.6.20.19
Que referenciandolo a las posiciones globales:
0xB00A0000 --> MIPS LTQCPE Linux-2.6.32.32
0xB0140000 --> MIPS LTQCPE Linux-2.6.32.32
0xB016DA90 --> MIPS IFXCPE Linux-2.6.20.19
Le voy viendo el sentido a las distintas imagenes, los distintos modos y configuraciones de arranque de imagenes .
Lo importante para OpenWrt:
GRABAR en 0xB00A0000, no en 0xB0080000, al menos si se conserva el uboot original.
Saludos
espeltron