El Booteo del EP9302

El microcontrolador ep9302 puede bootear desde la Flash externa, Ram externa, SPI y UART, de acuerdo a los estados de los pines que estan a tal fin. Cuando bootea por UART o SPI carga un codigo desde ahi de hasta 2kB a un buffer del modulo ethernet,luego ejecuta el codigo. La mayoria de los programas booteadores utilizan este metodo para grabar la flash externa, donde dicho codigo gestiona una comunicacion con una PC por medio de la UART y descarga los datos y/o programas a ser grabados en la memoria flash externa.

Escribiendo en la Flash

Para bajar un programa por primera ves a la flash de la SBC se debe usar un programa que cumpla con los requerimientos de booteo. Para nuestra placa utilizamos el programa Download que se conecta por medio de la UART del microcontrolador para hacer las descargas. Se le realizaron minimas modificaciones para que pueda ser usado con un adaptador USB-RS232.

$ download -b 115200 -p USB0 u-boot.bin

Los parámetros son el Baudrate (115200), la interfaz (USB), el archivo a grabar y también el offset a donde se grabará, que en nuestro caso es la dirección base 0x60000000(default).

Booteando

Para que se puede correr un sistema operativo es necesario un bootloader. Existen varios, uno de los mejores, por flexibilidad y facilidad de uso es el u-boot.

el "Das U-Boot"

Para que nuestro utilizamos el bootloader "Das U-Boot". El cual posee las capacidades de lanzar un kernel, descargar archivos a través de ethernet, crear particiones, etc.

Levantando el NFS

el kernel levanta el sistema de archivos de la distribución Debian por medio de NFS, también lo hace con un sistema de archivos minimalista creado con buildroot. Para ello es necesario configurar los parámetros de arranque del kernel. Estos se pueden pasar directamente con el U-Boot, pero no me funciona. Así que se tuvo que compilar el kernel con dichos comandos.

CONFIG_CMDLINE="console=ttyAM0,115200 root=/dev/nfs nfsroot=10.0.0.1:/tftpboot/nfsroot/ rw ip=10.0.0.2:10.0.0.1::255.255.255.0:placa:eth0:off"

donde se setea la consola a usar, que el sistema de archivo es nfs, la ip del server, la ruta del nfs y la ip de la placa.

ANDA EL DEBIAN

La placa esta corriendo con la distribución Debian 5.0.5 con un kernel de linux 2.6.35. Para instalar y obtener el sistema de archivos de Debian lo que se realizó fue lo siguiente:

1 Se creó una maquina virtual de arm con qemu

2 Se instaló Debian para arm en esa maquina

3 Se montó el disco donde se instaló el Debian y se copió el sistema de archivos.

Crear maquina con qemu

Para crear virtualizar un arm con qemu se realiza los siguientes comandos: se crea un disco a donde se va a instalar el Debian.

$ qemu-img create -f raw disco.img 2G

Se bajan el kernel y el initrd para que arranque el sistema.

$ wget http://people.debian.org/~aurel32/arm-versatile/vmlinuz-2.6.18-6-versatile$ wget http://people.debian.org/~aurel32/arm-versatile/initrd.img-2.6.18-6-versatile

Se baja el instalador de Debian.

$ wget http://ftp.de.debian.org/debian/dists/etch/main/installer-arm/current/images/rpc/netboot/initrd.gz

Se inicia la instalación del sistema en el disco creado

$ qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.18-6-versatile -initrd initrd.gz -hda disco.img -append "root=/dev/ram"

Luego de la instalación se puede corroborar si funciona cambiando el sistema raíz de ram a sda1 y el initrd

$ qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.18-6-versatile -initrd initrd.img-2.6.18-6-versatile -hda disco.img -append "root=/dev/sda1"

Obtener el Sistema de archivos para nuestra placa

Para ello lo que se hace es montar el disco donde se instalo el Debian con el siguiente comando.

$ mount -o loop,offset=32256 hda.img /path/punto_montaje

Luego se copia todo el contenido a la carpeta de donde se desee montar el sistema de archivo desde la placa.

Modificaciones mínimas

Para que el Sistema de archivos creado ande en nuestra placa es necesario realizarse unas modificaciones dependiendo de como se hará el montaje y donde estará alojado el mismo.

Para que vuelque por nuestra consola tty es necesario modificar el archivo /etc/inittab comentado todas las salidas que no sean las de tty1 (ya que se cuenta en este momento solo con un puerto serie para comunicarse con la placa) y modificando el baudrate a 115200 para que sea compatible con el kernel y el U-Boot. Se deja solo la siguiente linea

1:2345:respawn:/sbin/getty 115200 console

Otro archivo a modificar es el /etc/fstab dependiendo de donde este ubicado el sistema de archivo y como se lo montará.

Montar mediante NFS

Se agrega la siguiente linea

10.0.0.1:/srv/nfsroot / nfs exec,dev,suid 1 1

donde se le indica la ip del server y la ruta donde se encuentra, como así también la como se montará.

Montar desde Flash-USB

averiguar!!!! y probar. -- Main.DiegoGonzalez - 10 May 2010