Ya sabemos como trabaja U-boot por encima, tenemos un backup de nuestros ficheros mtd y acceso por consola al router.
El U-boot, al arranque, nos indica que introduzcamos un password, y nos da 3 segundos para ello, si no, arranca el router de forma normal.
Hay que tener en cuenta, que trabajar con u-boot, es extremadamente peligroso si no sabes que estás haciendo, puedes dejar el router inservible, (a menos que entres bajo JTAG y restaures el U-boot), así que cuidado con lo que tocas.
El password en cuestión es: FUZXPIBTDLT, extraído con un editor hexadecimal del fichero mtd0_boot_1.0.4.bin.
Abres un hiperterminal, 115.200 baudios, copias el password en el porta papeles, y cuando solicite el password, lo pegas:
U-Boot 1.1.6 (Mar 4 2011 - 10:29:05) Teldat 1.0.3 DRAM: 256 MB Comcerto Flash Subsystem Initialization Flash: 4 MB NAND: board_nand_init nand->IO_ADDR_R =30000000 256 MiB In: serial Out: serial Err: serial Reserve MSP memory Net: comcerto_gemac0, comcerto_gemac1 ethaddr=00:A0:26:7D:59:D4 sernum1=745/0xxxxx sernum2=745/0xxxxx Enter password - autoboot in 3 sec... Comcerto-100 >
Ya estamos dentro de U-boot, el set de comandos, se muestra con help:
Comcerto-100 >help ? - alias for 'help' base - print or set address offset bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol chkmac - forces nor boot if default ethernet address chnvdata- change non-volatile data chnvfsn - change non-volatile first serial number chpart - change active partition cmp - memory compare cp - memory copy crc32 - checksum calculation erase - erase FLASH memory flinfo - print FLASH memory information fsinfo - print information about filesystems fsload - load binary file from a filesystem image go - start application at address 'addr' help - print online help icrc32 - checksum calculation iloop - infinite loop on address range imd - i2c memory display imm - i2c memory modify (auto-incrementing) imw - memory write (fill) inm - memory modify (constant address) iprobe - probe to discover valid I2C chip addresses loadb - load binary file over serial line (kermit mode) loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range ls - list files in a directory (default /) md - memory display mii - MII utility commands mm - memory modify (auto-incrementing) mtdparts- define flash/nand partitions mtest - simple RAM test mw - memory write (fill) nand - NAND sub-system nboot - boot from NAND device nfs - boot image via network using NFS protocol nm - memory modify (constant address) ping - send ICMP ECHO_REQUEST to network host printenv- print environment variables protect - enable or disable FLASH write protection rarpboot- boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage setenv - set environment variables tftpboot- boot image via network using TFTP protocol uload - load kernel file from a filesystem image version - print monitor version
Y ampliamos la ayuda sobre un comando con:
Comcerto-100 >elcomando help
Para ver las variables de entorno de arranque de U-boot:
Comcerto-100 > printenv ethaddr=00:A0:26:7D:59:D4 sernum1=745/0xxxxx sernum2=745/0xxxxx tstamp=1310051641781 bootdelay=15 baudrate=115200 preboot=run preboot2 gatewayip=192.168.0.1 netmask=255.255.255.0 hostname=prg netdev=eth0 ethact=comcerto_gemac0 nfsargs=setenv bootargs init= root /dev/nfs rw nfsroot : init_process=/etc/preinit addip=setenv bootargs ip=::192.168.0.1:255.255.255.0:prg:eth0:on addeth=setenv bootargs hwaddress eth2,00:A0:26:7D:59:D4 addtty=setenv bootargs console=ttyS0,115200 addmtd=setenv bootargs boot_nfs=nfs 80600000 /boot/ boot=run bootm 80600000 rootpath=/devel/fs-teldat kernelfile=uImage bootfile=u-boot.bin mtdids=nor0=comcertoflash.0,nand0=comcertonand mtdparts=mtdparts=comcertoflash.0:256k(boot)ro,128k(env),128k(tldt)ro,1280k(kr)r o,-(fs)ro;comcertonand:2M(kr1),100M(fs1),2M(kr2),100M(fs2),-(cfg) fsfile=roatefs tftp 81000000 updatefs=cp.b 81000000 201c0000 updateboot=cp.b 81000000 20000000 updatekernel=cp.b 81000000 20080000 biosfile=bios.bin savemac=cp.b 20060000 81400000 20000 restoremac=cp.b 81400000 20060000 20000 erasenor=erase nor0,0 updatebios=run restoremac irouterfile=irouter.bin updateirouter=nand write.raw 81000000 0 bootnor=bootm bootnand=bootm bootnand1=run bootnand bootnand2=run bootnand trybootnand1=run bootnand1 trybootnand2=run bootnand2 modelname=iRouter preboot2=chkmac biosversion=1.0.3 prodclass=iRouter1104-W hwversion=TS-745/4 versionnand1=1.0.3 datenand1=1299856314 bootcmd=run bootnand1 eanpersistent=1299856314 stdin=serial stdout=serial stderr=serial partition=nor0,3 mtddevnum=3 mtddevname=kr
Mostrándonos los parámetros y scripts de u-boot, un ejemplo de parámetro, esperar 3 segundos antes de arrancar.
bootdelay=3
Ejemplo de script, añadir a bootarg una consola en ttyS0 a 115200 bauds.
addtty=setenv bootargs console=ttyS0,115200
Otro ejemplo, crear un comando a partir de un script:
restoremac=cp.b 81400000 20060000 20000
Si ejecutáramos restoremac, nos restauraría la mac del router, a partir de la posición en memoria donde reside.
Si quisiéramos por ejemplo, cambiar la variable bootdelay=3, que espere 3 segundo antes de cargar y cambiarla a 15 segundos de espera:
Comcerto-100 >setenv bootdelay=15
Y con el comando saveenv lo grabamos en la memoria flash:
Comcerto-100 > saveenv
En nuestro próximo arranque, esperará 15 segundos antes de arrancar.
Hay otros comandos nada peligrosos, como:
Comcerto-100 > version ----------------------------- U-Boot 1.1.6 (Mar 4 2011 - 10:29:05) Teldat 1.0.3 ARM Clock: 450000000 Hz AHB Clock: 165000000 Hz DDR Size : 256 MByte -----------------------------
Podemos cambiar tamaño de las particiones, renombrarlas, montarlas por ejemplo como rw, y jugar con ellas, NO LO HAGAS, es tan peligroso como suena, y no vamos a tocar el tema JTAG por el momento.
Vamos a darle un poco de utilidad al tema del U-boot en el próximos post.