Wiki Content

Descargar todo el material necesario para trabajar con la tarjeta stamp mini
el cual se encuentra disponible en: 

https://bitbucket.org/raurregog/embedded-systems/downloads#download-283272

Descomprimir todo en una misma carpeta

===Instalar las librerias con el comando sudo apt-get install lib : ===

-xml2-dev -libusb-1.0-0-dev -readline-dev

Esto se hace con el comando:

sudo apt-get install 

=== Modificar el makefile===

entrar a la carpeta material_curso/Factory_Test/basic

Dentro de la carpeta basic entrar al archivo build y comentar los últimos dos párrafos de tal forma que el archivo quede como se muestra a continuación:

bold=`tput bold` normal=`tput sgr0` warning="\033[41m" blink="\033[5m"

cd ./hwstub/ echo "${bold}Compiling sbloader ...${normal}" cd imxtools/sbtools/ make -j3 sudo cp sbloader /usr/local/bin


 * 1) echo "${bold}Compiling regtools..${normal}"
 * 2) cd ../../regtools/lib/
 * 3) make -j3
 * 4) cd ..
 * 5) make -j3


 * 1) echo "${bold}Compiling hwstub tools.${normal}"
 * 2) cd ../hwstub/lib/
 * 3) make -j3
 * 4) cd ../tools/
 * 5) make -j3
 * 6) sudo cp hwstub_shell /usr/local/bin/
 * 7) cd ../../../

Instalar las herramientas de compilación
Dentro de la misma carpeta ejecutar el comando ./build (en el terminal)

%%%%% Solucionar los errores de librerias adicionales que se puedan necesitar siguiendo las instrucciones del inciso 1. %%%%

Ejecutar el comando. load_blink

Si todo está bien en la trajeta debería aparecer el led D3 parpadeando, esto significa que todas las herramientas necesarias se encuentran instaladas y listas para usarse. Todos los pasos anteriores se realizan solo 1 vez.

Crear las particiones, formatear la memoria SD y grabar el bootloader y el sistema de archivos
Se necesitan dos particiones en la SD, la primera almacenará el boot-loader y la imágen del kernel; la segunda almacenará el sistema de archivos. Para los siguientes comandos se asume que la tarjeta es detectada como /dev/sdb (para conocer el dispositivo asignado a la tarjeta por Linux se debe insertar la tarjeta y ejecutar el comando  sudo fdisk -l)

Desmontar la partición y ejecutar fdisk:
sudo umount /dev/sdb* %%% Desmontar tarjeta %% sudo fdisk /dev/sdb  %%% Abrir el gestor de particiones %%%

Borrar las particiones existentes:
Dentro de fdisk se debe escribir "d" (delete a partition)

Command (m for help): d Partition number (1-4):

En el campo "Partition number" se debe escribir el número de la partición a ser eliminada, el proceso se debe repetir hasta borrar todas las particiones existentes. ====Crear una partición de 200MB ====

Dentro de fdisk se debe escribir "n" (add a new partition) Seleccionar partición primaria: Escribir "p"

Command (m for help): n Partition type: p   primary (0 primary, 0 extended, 4 free) e   extended Select (default p): p Partition number (1-4, default 1): 1

Fijar el comienzo de la partición. Al mensaje:

First sector (2048-7626751, default 2048):

se debe oprimir la tecla enter para asignar el valor por defecto. A lo que la aplicación resonde:

Using default value 2048

Fijar el final de la partición. Al mensaje: Last sector, +sectors or +size{K,M,G} (2048-7626751, default 7626751):

Ingresar +200M  A lo que el sistema responde:

Partition 1 of type Linux and of size 200 MiB is set ===

Crear la segunda partición en el espacio sobrante en la SD===

Dentro de fdisk se debe escribir "n" (add a new partition) Seleccionar partición primaria: Escribir "p" Asignar el número de la partición a "2"

Command (m for help): n Partition type: p   primary (1 primary, 0 extended, 3 free) e   extended Select (default p): p Partition number (1-4, default 2): 2

Fijar el commienzo de la partición: Dejar el valor por defecto Fijar el final de la partición: Dejar el valor por defecto

First sector (411648-7626751, default 411648): Using default value 411648 Last sector, +sectors or +size{K,M,G} (411648-7626751, default 7626751): Using default value 7626751 Partition 2 of type Linux and of size 3.5 GiB is set

Cambiar el tipo de la partición 1 a OnTrack DM6 (53)
Dentro de fdisk escribir "t" (change a partition's system id) Escribir "53"

Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): 53 Changed system type of partition 1 to 53 (OnTrack DM6 Aux3)

Cambiar el tipo de la partición 1 a Linux (83)
Dentro de fdisk escribir "t" (change a partition's system id) Escribir "83"

Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 83

Al finalizar se debe tener la siguiente tabla de particiones, la cual se obtiene al ejecutar el comando "p" (print the partition table), los datos que se ven a continuación son para una memoria sd de 4GB;

Device Boot      Start         End      Blocks   Id  System /dev/sdb1            2048      411647      204800   53  OnTrack DM6 Aux3 /dev/sdb2          411648     7626751     3607552   83  Linux

Guardar los cambios realizados
Una vez finalizada la creación de las particiones se deben guardar los cambios en la tabla de particiones de la SD para esto debe ejecutar el comando "w" (write table to disk and exit)

Command (m for help): w The partition table has been altered!

Calling ioctl to re-read partition table. Syncing disks. ====Formatear la segunda partición como ext3: ====  sudo mkfs.ext3 /dev/sdb2

Una vez terminados todos los pasos anteriormente listados, la memoria sd está lista para almacenar el sistema de archivos del usuario y la imagen del kernel.

CREAR EL SISTEMA DE ARCHIVOS Y LA IMAGEN DEL KERNEL DE LINUX
La carpeta suministrada por el profesor (dl) se remplaza por la contenida en la carpeta buildroot-2013.08.1

Nos ubicamos dentro de la carpeta buildroot-2013.08.1 y ejecutamos el siguiente comando:
make menuconfig Este comando  abre una interfáz en donde podemos seleccionar los paquetes de software que queremos incluir dentro de nuestro sistema de archivos, en la parte superior están las instrucciones de navegación en la interfaz. Una vez se terminen de escoger los paquetes que se desean se selecciona  "exit" hasta volver a la ventana del terminal en donde ejecutamos el comando make.

2.1.1 Solución de posibles errores.

En el proceso de compilación se pueden presentar dos problemas, uno de ellos es el siguiente:

You must install 'svn' on your build machine svn is usually part of the subversion package in your distribution make: *** [core-dependencies] Error 1

El cual se soluciona sencillamente ejecutando el siguiente comando en la terminal:

sudo apt-get install svn-buildpackage

Otro error que se puede presentar es el siguiente:

ERROR:'jtag_status' may be used uninitialized in this function [-Werror=maybe-uninitialized]

La solución para este problema es ir a la carpeta buildroot-2013.08.1/output/build/openocd7.0-0/src/target y el el makefile modificar las siguientes líneas de código de tal forma que queden como se muetra a continuación:

CFLAGS = -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64  -pipe -Os  -Wall -Wstrict-prototypes -Wformat-security -Wshadow -Wextra -Wno-unused-parameter -Wbad-function-cast -Wcast-align -Wredundant-decls

CFLAGS_FOR_BUILD = -g -O2 -Wall -Wstrict-prototypes -Wformat-security -Wshadow -Wextra -Wno-unused-parameter -Wbad-function-cast -Wcast-align -Wredundant-decls

Una vez terminado este proceso se vuelve a ejecutar el comando make en el terminal y se espera que termine la compilación (puede tardar incluso varias horas dependiendo del computador y el soporte del sistema de archivos).

Revisión del sistema de archivos que se acaba de crear
En la carpeta buildroot-2013.08.1/output/images debe aparecer un archivo comprimido con el nombre "rootfs.tar", se revisa la fecha de creación y se confirma que si sea el archivo generado.

Agregar la ruta de compilación a la terminal
Esto se debe hacer cada vez que se realice el proceso o cambiar el path por defecto el el archivo bashsc una única vez.

Para agregar el path desde la terminal se debe usar el siguiente comando:

export PATH=$PATH:/home/ricardo/Documentos/buildroot-2013.08.1/output/host/usr/bin

Para agregar el path al bashsc se escribe el siguiente comando en la terminal y se agrega la misma línea al final del archivo

gedit ~/.bashrc

Esto se hace con el fin de que los archivos ejecutables para el compilador estén disponibles en el path del sistema.

Una forma rápida de confirmar que el path sea el correcto es teclear "arm-linux-" y presionar la tecla de tabular 2 veces, con esto debe aparecer una lista en donde los elementos tienen la forma "arm-linux- ".

Definir la arquitectura del procesador y las herramientas del compilador
para esto se usa este comando una vez definido el path estando ubicados en la capeta linux-2.6.35.3

make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig

"ARCH=arm" hace referencia a que tome la arquitectura arm del procesador y no la que se tienen por defecto en linux que es la de los procesadores con arquitectura mx86.

"CROSS_COMPILE=arm-linux-" se utiliza para que se compilen todas los archivos de nombre arm-linux- que se vieron en el listado de comprobación del paso anterior.

"menuconfig" es para definir todas la preferencias de la imagen del kernel a crear, una vez terminado salimos de nuevo al terminal y usamos el comando "make ARCH=arm CROSS_COMPILE=arm-linux-" para iniciar la compilación.

Se pueden presentar errores que tienen que ver con la falta de un archivo, el archivo si existe pero al parecer no tiene un link asociado que lo relacione con el compilador, para solucionar esto se siguen los siguietes pasos:

Ubicarse en la carpeta buildroot-2013.08.1/output/host/usr/bin y crear el link faltante usando el siguiente comando:

ln -s arm-buildroot-linux-uclibcgnueabi-ld.real arm-linux-ld.real

Comprobar que la imagen del kernel haya sido creada
dentro de la carpeta linux-2.6.35.3 ejecutamos el siguiente comando :

ls -l arch/arm/boot

Esto nos muestra una lista de los archivos presentes en la ruta, dentro de los cuales debe haber uno llamado "zimage" y la fecha y hora de creación, con lo cual se puede confirmar que es la imagen que se acaba de generar.

Descomprimir el sistema de archivos
ubicarse en la carpeta /buildroot-2013.08.1/output/Images y  ejecutar el comando

  sudo tar -xvf rootfs.tar -C /media/user(el nombre de su computador)/disk (es el nombre largo)/

Modificar el archivo de inicio del sistema
Ejecutar sudo nautilus y abrir la memoria sd

en la carpeta /etc de la memoria sd buscar el archivo inittab y modificar la línea donde se encuentra "ttyS0" por "ttyAM0"

GUARDAR LA IMAGEN DEL KERNEL DE LINUX DENTRO DE LA MEMORIA SD
Ubicarse en la carpeta Imx-bootlets-src-10.05.02

Con el comando sudo fdisk -l verificar el nombre asignado a la tarjeta sd por el sistema, en caso de que sea diferente a "sdb", ingresar al make file de la misma carpeta y modificar las siguientes líneas:

sudo dd if=sd_mmc_bootstream.raw of=/dev/ sudo umount /dev/ *

Montar la imagen del kernel sobre la sd
con el siguiente comando se graba la imagen del kernel en la sd:

make ARCH=mx23 CROSS_COMPILE=arm-linux-

el "mx23" se usa porque es la familia del procesador que se está usando.

5.1.1 Al descomprimir la imagen del kernel en la memoria sd se puede presentar un problema por la falta del ejecutable "elftosb2", esto se soluciona fácilmente dirigiendose a la carpeta Imx-bootlets-src-10.05.02 utilizando sudo nautilus y copiando el ejecutable antes mencionado para después pegarlo en la carpeta /usr/bin de su computador

Una vez se haya copiado el ejecutable se le dan permisos mediante el siguiente comando

sudo chmod +x /usr/bin/elftosb2

== PRUEBA DEL PUERTO SERIAL Y EL SISTEMA DE ARCHIVOS ==

Abrir el minicom con el comando sudo minicom -s (solo la primera vez)
Dentro del minicom seleccionar la opción configurar puerto serial y modificar los siguientes items:

6.1.1 Dispositivo serial : /dev/ttyUSB0 (Asegurarse de que el dispositivo si tenga asignado el nombre ttyUSB0 usando el comando dmesg, normalmente el dispositivo de interés aparece de último)

6.1.2. Bps/paridad/bits : 115200 8N1 (que es la velocidad de transmisión, los bits de paridad y el bit de stop respectivamente)

6.1.3. Control de flujo por hardware: NO

6.1.4. Control de flujo por software: NO

Después de realizar estos cambios se presiona la tecla "Esc" para regresar a la ventana de configuración donde se selecciona "Salvar configuración como dfl" después seleccionamos salir.

Conectamos la tarjeta con el conector usb a serial y la alimentación; si todo está bien deberia comenzar a correr una serie de instrucciones en la ventana del minicom que finalmente  pedirá un login para acceder al builroot, se teclea "root" para acceder al sistema.

Para desmontar el sistema tecleamos "halt" y esperamos que nos diga "system halted".