ARM mini2440: Configurando uBoot para arranque desde SD
Introducción
Después de haber compilado e instalado uBoot en nuestra tarjeta de desarrollo mini2440 y de haberle compilado una imágen Linux ahora nos proponemos configurar uBoot para el arranque de dicho kernel. uBoot permite mucha flexibilidad a la hora de instalar y arrancar imágenes desde la memoria. Aún así, aquí sólo explicaré el procedimiento que he utilizado yo para poder cargar y ejecutar Linux desde una tarjeta SD, ya que además de parecerme los mas fácil y cómodo a la hora de actualizar (tan solo hay que copiar la nueva imagen a la SD), mantendremos intacta la NAND interna de nuestra tarjeta, que sabemos que tiene vida limitada, y aunque muy larga, no deja de ser eso, limitada.Qué necesitamos
Pues como dije antes, se supone que debemos de haber leído, comprendido y ejecutado las dos recetas que se mencionan mas arriba. De la segunda receta obtenemos la imagen del núcleo que vamos a utilizar en nuestra tarjeta, uImage. A continuación, hay que preparar la tarjeta de memoria. Yo en mi caso tengo una partición ext3 de unos 128MB que utilizo para tal fin. Lo del tamaño no importa mucho (ejem), pero nunca por mucho trigo fue mal año (ejem, ejem), así que si nos sobra espacio, podremos utilizarlo para guardar ahí backups y cosas de esas (es lo que yo hago). También es aconsejable que dicha partición se la primera particion de la unidad (primaria, claro está), ésto no es muy crítico, pero mi configuración tiene ésto en cuenta, con lo cual si situas la partición en otro sitio, deberás especificarlo en la configuración. Evidentemente no me voy a poner a explicar cómo hacer dicha partición, ya somos todos muy grandecitos para hacerlo solitos, así que cuando termines, te espero mas abajo...Configurando uBoot
Una vez que tienes la partición hecha, copias la imagen uImage que compilaste en su día a dicha partición e insertas la tarjeta en el lector de tu mini2440. Conectas el puerto serie, abres minicom con la configuración que usaste para instalar uBoot y arrancas. Cuando salga el mensaje de que pulses una tecla para cancelar el arranque procedes:U-Boot 1.3.2-mini2440 (Oct 15 2009 - 19:42:55)
I2C: ready
DRAM: 64 MB
Flash: 2 MB
NAND: 128 MiB
Found Environment offset in OOB..
USB: S3C2410 USB Deviced
In: serial
Out: serial
Err: serial
MAC: 08:08:11:18:12:27
Hit any key to stop autoboot: 0
MINI2440 #
MINI2440 # mmcinit
trying to detect SD Card...
Manufacturer: 0x1b, OEM "SM"
Product name: "UD ", revision 1.0
Serial number: 2697000253
Manufacturing date: 12/2006
CRC: 0x78, b0 = 1
READ_BL_LEN=15, C_SIZE_MULT=7, C_SIZE=3453
size = 2329935872
MINI2440 #
MINI2440 # ext2load mmc 0:1 0x32000000 uImage
2148500 bytes read
MINI2440 #
MINI2440 # bootm
## Booting kernel from Legacy Image at 32000000 ...
Image Name: Angstrom/2.6.31+git/mini2440
Created: 2009-12-10 4:50:52 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2148436 Bytes = 2 MB
Load Address: 30008000
Entry Point: 30008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Starting kernel ...
<Lots and lots of logs....>
Failed to execute /sbin/init. Attempting defaults...
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
[<c002b4c8>] (unwind_backtrace+0x0/0xdc) from [<c0301dd0>] (panic+0x34/0x118)
[<c0301dd0>] (panic+0x34/0x118) from [<c0026544>] (init_post+0x134/0x16c)
[<c0026544>] (init_post+0x134/0x16c) from [<c00085c4>] (kernel_init+0xd8/0x10c)
[<c00085c4>] (kernel_init+0xd8/0x10c) from [<c00277d8>] (kernel_thread_exit+0x0/0x8)
MINI2440 # setenv bootcmd 'mmcinit; fat2load mmc 0:1 0x32000000 uImage; bootm'
MINI2440 # saveenv
Saving Environment to NAND...
Erasing Nand...Writing to Nand... done
MINI2440 # setenv bootargs 'boot=/dev/mmcblk0p2 rootwait=4 rw init=/sbin/init noinitrd console=ttySAC0,115200'
MINI2440 # saveenv
Saving Environment to NAND...
Erasing Nand...Writing to Nand... done
MINI2440 # printenv
bootdelay=3
baudrate=115200
ethaddr=08:08:11:18:12:27
ipaddr=10.0.0.111
serverip=10.0.0.4
netmask=255.255.255.0
usbtty=cdc_acm
mini2440=mini2440=0tb
bootargs_base=console=ttySAC0,115200 noinitrd
bootargs_init=init=/sbin/init
root_nand=root=/dev/mtdblock3 rootfstype=jffs2
root_mmc=root=/dev/mmcblk0p2 rootdelay=2
root_nfs=/mnt/nfs
set_root_nfs=setenv root_nfs root=/dev/nfs rw nfsroot=${serverip}:${root_nfs}
ifconfig_static=run setenv ifconfig ip=${ipaddr}:${serverip}::${netmask}:mini2440:eth0
ifconfig_dhcp=run setenv ifconfig ip=dhcp
ifconfig=ip=dhcp
set_bootargs_mmc=setenv bootargs ${bootargs_base} ${bootargs_init} ${mini2440} ${root_mmc}
set_bootargs_nand=setenv bootargs ${bootargs_base} ${bootargs_init} ${mini2440} ${root_nand}
set_bootargs_nfs=run set_root_nfs; setenv bootargs ${bootargs_base} ${bootargs_init} ${mini2440} ${root_nfs} ${ifconfig}
mtdids=nand0=mini2440-nand
mtdparts=mtdparts=mini2440-nand:256k(u-boot),128k(u-boot_env),5m(kernel),125568k(rootfs)
bootargs=root=/dev/mmcblk0p2 rootwait=4 rw init=/sbin/init noinitrd console=ttySAC0,115200
"ootcmd="mmcinit
filesize=20C8EC
partition=nand0,0
mtddevnum=0
mtddevname=u-boot
bootcmd=mmcinit; fat2load mmc 0:1 0x32000000 uImage; bootm
Environment size: 1209/131068 bytes
MINI2440 #
Referencias
[ show comments ]
blog comments powered by Disqus