Documentos de Académico
Documentos de Profesional
Documentos de Cultura
i
plantilla 2010/4/6 11:56 page 1 #1
O
R
Universidad de Granada
BO
RR
Technical report n 3:
Autor:
Ricardo Cauelo Navarro
Tutor:
Jess Gonzlez Pealver
i
i
i
plantilla 2010/4/6 11:56 page 2 #2
i
i
i
plantilla 2010/4/6 11:56 page iii #3
III
Licencia
Copyright 2010 Ricardo Cauelo Navarro <ricardo.canuelo@gmail.com>.
Permission is granted to copy, distribute and/or modify this document under
the terms of the GNU Free Documentation License, Version 1.3 or any later
version published by the Free Software Foundation; with no Invariant Sections,
no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included
in the file named FDL.
i
i
i
plantilla 2010/4/6 11:56 page iv #4
i
i
i
plantilla 2010/4/6 11:56 page v #5
ndice general
1. Introduccin
2. Motivacin
3. Herramientas
3.1. Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4
5
4. Instalacin bsica
4.1. Instalacin del sistema . . . . . . . . . . . . . . . . . . . . . . .
4.1.1. Preparacin . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.2. Arranque del instalador y particionamiento . . . . . . .
4.1.3. Instalacin del sistema base . . . . . . . . . . . . . . . .
4.2. Cmo copiar los contenidos del disco duro virtual a la tarjeta?
4.3. Pasos finales . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
.
6
.
6
.
8
. 13
. 14
. 15
5. Instalacin avanzada
5.1. Construccin del kernel a medida . . . . .
5.1.1. Toolchain para desarrollo cruzado
5.1.2. El kernel Linux . . . . . . . . . . .
5.2. Sistema de archivos a medida . . . . . . .
5.3. Mquina virtual de Java . . . . . . . . . . .
.
.
.
.
.
Bibliografa
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
18
18
21
23
23
24
i
i
i
plantilla 2010/4/6 11:56 page vi #6
i
i
i
plantilla 2010/4/6 11:56 page 1 #7
Introduccin
i
i
i
plantilla 2010/4/6 11:56 page 2 #8
Motivacin
Trabajar con una placa de la potencia de la BeagleBoard nos permite alejarnos del tradicional procedimiento de programacin de sistemas empotrados
y trabajar de una forma ms parecida a como lo haramos en un PC normal.
Normalmente para montar un entorno de desarrollo para sistemas empotrados
necesitaramos constuir varias toolchains, cada una de las cuales probablemente contendra unas bibliotecas distintas que tendran que casar con versiones
determinadas del compilador, enlazador, etc. Esta tarea se acaba convirtiendo
muchas veces en un proceso de prueba y error tedioso y largo.
El mtodo que utilizaremos aqu para instalar Linux y las dems herramientas en la BeagleBoard se abstrae por encima del anterior gracias a la potencia de
la placa y a la disponibilidad de emuladores en los PCs actuales. Est basado en
el howto de Robert Nelson1 , el cual propone dos mtodos independientes:
El primero consiste en cargar en una tarjeta SD una imagen arrancable
del instalador del sistema operativo. As, una vez conectada la placa a un
monitor, un teclado y con un acceso a Internet, se arranca la placa con esa
tarjeta y se instala Linux igual que haramos en un PC.
El segundo realiza la instalacin en una mquina virtual en un PC. La
instalacin es similar a la que se hara en el PC de forma nativa, pero
en este caso se instalara el sistema en la tarjeta SD. Una vez hecha la
instalacin y configuracin ya podemos arrancar la placa con la tarjeta
introducida y acceder a ella desde el PC a travs del puerto serie.
1 El howto se encuentra en http://elinux.org/BeagleBoardDebian
i
i
i
plantilla 2010/4/6 11:56 page 3 #9
Motivacin
i
i
i
plantilla 2010/4/6 11:56 page 4 #10
Herramientas
3.1.
Software
Hay que tener en cuenta que trabajaremos con herramientas que son software
libre y que, aunque nos facilitan la vida en muchos aspectos, tienen el inconveniente de que siguen un desarrollo descentralizado, lo que suele ser una fuente
de problemas a la hora de encontrar la combinacin correcta de versiones entre
distintas herramientas que deben cooperar. Por lo tanto aqu se muestran las
versiones que se han utilizado porque se sabe que funcionan con seguridad. El
lector puede probar versiones ms recientes, pero en caso de incompatibilidad
entre las herramientas siempre puede recurrir a las que se listan aqu:
GNU/Linux Debian Lenny o derivada.
Net Installer de Debian para la arquitectura ARMEL y placa versatile:
Kernel Linux 2.6.26-2 para ARMEL y placa versatile:
ftp://ftp.us.debian.org/debian/dists/lenny/main/installer-armel/current/
images/versatile/netboot/vmlinuz-2.6.26-2-versatile
Qemu
uboot-mkimage
4
i
i
i
plantilla 2010/4/6 11:56 page 5 #11
Herramientas
3.2.
Hardware
i
i
i
plantilla 2010/4/6 11:56 page 6 #12
Instalacin bsica
4.1.
4.1.1.
Preparacin
i
i
i
plantilla 2010/4/6 11:56 page 7 #13
Instalacin bsica
i
i
i
plantilla 2010/4/6 11:56 page 8 #14
Instalacin bsica
4.1.2.
i
i
i
plantilla 2010/4/6 11:56 page 9 #15
Instalacin bsica
i
i
i
plantilla 2010/4/6 11:56 page 10 #16
10
Instalacin bsica
continuacin el instalador.
i
i
i
plantilla 2010/4/6 11:56 page 11 #17
Instalacin bsica
11
Con el espacio libre que queda creamos otra particin que contendr al
sistema de archivos raz. Seleccionamos para esta particin un tamao tal que al
final del disco quede suficiente para la particin swap, por ejemplo, podramos
coger de tamao 1960 MB si estamos utilizando un disco de 2 GB. La particin
ser de tipo primaria colocada al principio del espacio libre disponible. El
sistema de archivos ser sistema ext3 transaccional, el punto de montaje /
(la raz del sistema de archivos) y tenemos que activar la marca de arranque. En
el resto de opciones podemos dejar los valores por defecto.
i
i
i
plantilla 2010/4/6 11:56 page 12 #18
12
Instalacin bsica
i
i
i
plantilla 2010/4/6 11:56 page 13 #19
Instalacin bsica
13
4.1.3.
Durante esta fase el instalador se encarga de todo, as que podemos despegarnos un momento del ordenador.
Cuando termine la instalacin del sistema base, el programa de instalacin
realizar una instalacin inicial bsica. Para ello tenemos que proporcionar una
contrasea para el superusuario y crear un usuario normal.
i
i
i
plantilla 2010/4/6 11:56 page 14 #20
14
Instalacin bsica
4.2.
Si tenemos en cuenta que cada sector son 512 bytes y que la segunda particin (la particin raz) comienza en el sector 96390, podemos calcular que el
byte en que comienza es 96390 512 = 49351680. por lo tanto, la orden para
montar la particin en un directorio ser:
% mount -o loop , offset =49351680 hd0 . img directorio
i
i
i
plantilla 2010/4/6 11:56 page 15 #21
Instalacin bsica
15
Y a continuacin extraemos los contenidos con dpkg -x archivo.deb directorio y los copiamos a la tarjeta.
4.3.
Pasos finales
i
i
i
plantilla 2010/4/6 11:56 page 16 #22
16
Instalacin bsica
i
i
i
plantilla 2010/4/6 11:56 page 17 #23
Instalacin avanzada
En el anterior captulo se explic una forma bsica de instalar y configurar
el entorno de desarrollo para poder empezar a funcionar rpidamente. Sin
embargo hay muchas cosas que se podran mejorar. Por ejemplo:
El kernel que se utiliz es bastante grande, hecho para funcionar en un
gran nmero de dispositivos distintos. Si construimos un kernel hecho a
medida para nuestra placa podremos conseguir un mejor rendimiento y
un kernel ms pequeo.
El sistema de archivos raz tambin es muy grande y contiene muchas
aplicaciones que puede que no necesitemos. Podemos construirlo tambin
a medida, con las ventajas de tamao que ello conlleva.
Los binarios para la familia armel que provee debian estn compilados para la arquitectura ARMv4T, lo cual proporciona una gran compatibilidad
con distintos procesadores, pero a cambio perdemos las prestaciones que
ofrecen las nuevas arquitecturas, como la ARMv7-A. Si compilamos los
binarios para la arquitectura concreta que estamos utilizando ganaremos
en eficiencia.
La mquina virtual de Java que proporciona Debian es muy grande para
nuestras necesidades. Adems no realiza optimizaciones a cdigo nativo
(no utiliza tcnicas de compilacin JIT), por lo que ofrece menos rendimiento. Podemos intentar construir una mquina virtual ms apropiada
para la placa.
En esta parte del documento veremos cmo crear paso a paso: primero un
kernel a medida para nuestro sistema, despus un sistema de archivos adecuado
17
i
i
i
plantilla 2010/4/6 11:56 page 18 #24
18
Instalacin avanzada
a nuestras necesidades y por ltimo una mquina virtual de Java como PhoneME,
ms apropiada para sistemas empotrados.
5.1.
5.1.1.
i
i
i
plantilla 2010/4/6 11:56 page 19 #25
Instalacin avanzada
19
entorno PATH. Con esto dispondremos de las mismas herramientas de programacin que tenemos en el pc, como gcc, ld, as y el resto de las binutils, pero con
un prefijo que indica la arquitectura objetivo. Por ejemplo, arm-elf, que indica
que el cdigo generado es para la arquitectura arm y los archivos objeto sern
de tipo ELF.
Otra opcin es construir una toolchain a medida. Hasta hace unos aos esta
tarea requera grandes dosis de paciencia porque las herramientas de GNU
tienen el inconveniente de que siguen un desarrollo descentralizado, por lo
que a menudo la ltima versin del compilador gcc no sirve para compilar
otra parte de la cadena de herramientas, o una versin concreta de la glibc
necesita otra versin concreta del compilador, etc. El esfuerzo de esta tarea se
debe a encontrar la combinacin de versiones entre herramientas que permite
construir la toolchain correctamente.
Afortunadamente ahora contamos con herramientas como crosstool-ng, que
realiza todo el trabajo por nosotros de una forma sorprendentemente eficaz.
Esto tiene la ventaja de que podemos construir una toolchain adaptada de forma muy precisa a nuestras necesidades. Por ejemplo, podemos hacer una para
una arquitectura especfica, mientras que con las toolchains ya disponibles en
Internet tendramos que conformarnos con generar cdigo para una familia de
arquitecturas compatible con la nuestra, perdiendo en eficacia.
Para utilizar crosstool-ng necesitamos tener instaladas las siguientes herramientas:
gawk
autoconf
automake
libtool
libncurses-dev
bison
flex
patch
gettext
texinfo
curl
subversion
Estos paquetes los podemos instalar en nuestra mquina con la utilidad de
i
i
i
plantilla 2010/4/6 11:56 page 20 #26
20
Instalacin avanzada
instalacin de software que incluya nuestra distribucin, por ejemplo. Una vez
que dispongamos de ellas nos bajamos el cdigo fuente de crosstool-ng que se
encuentra en http://ymorin.is-a-geek.org/download/crosstool-ng/crosstool-ng-1.5.
3.tar.bz2.
Crosstool-ng nos permite hacer una instalacin global para todo el sistema o
una instalacin local. Elegiremos la segunda opcin. Para ello descomprimimos
el archivo que nos acabamos de bajar y dentro del directorio que ha creado
hacemos:
$ ./ configure -- local
$ make
$ make install
A nosotros la que ms nos conviene es la toolchain arm-cortex_a8-linuxgnueabi, que se corresponde exactamente con el ncleo que vamos a utilizar.
Para cargar la configuracin hacemos:
$ ./ ct - ng arm - cortex _ a8 - linux - gnueabi
i
i
i
plantilla 2010/4/6 11:56 page 21 #27
Instalacin avanzada
21
5.1.2.
El kernel Linux
Ahora que tenemos las herramientas necesarias para generar cdigo para
la arquitectura de nuestro sistema empotrado (en nuestro caso la BeagleBoard)
podemos compilar un kernel para la placa que se adapte a nuestras necesidades
y a las caractersticas del sistema.
Hasta hace poco tiempo era necesario bajarse los fuentes convencionales
del kernel (el vanilla kernel) y aplicarles varios parches proporcionados por
Open Embedded para adaptar el kernel a la arquitectura de la placa, pero
recientemente fue aadida la rama omap a los repositorios oficiales del kernel
de Linux que contiene todo el cdigo del kernel ya adaptado. De modo que para
empezar a construir el kernel lo primero que tenemos que hacer es bajarnos los
fuentes para omap:
$ git clone \
git :// git . kernel . org / pub / scm / linux / kernel / git / tmlind / linux - omap -2.6. git \
linux - omap -2.6
Esto nos dejar todo el rbol con los fuentes del kernel en el directorio
linux-omap-2.6.
Como vamos a hacer una compilacin cruzada con la toolchain que creamos
antes, conviene poner dichas herramientas en nuestro PATH para que sean
accesibles fcilmente. Una vez lo tengamos, editamos el Makefile que hay en la
raz del rbol del kernel y modificamos un par de variables para configurar la
compilacin cruzada:
ARCH
= arm
CROSS _ COMPILE = arm - ca8 - linux -
i
i
i
plantilla 2010/4/6 11:56 page 22 #28
22
Instalacin avanzada
Para ver las arquitecturas especficas dentro de la familia arm para las que
podemos compilar, hacemos:
$ make help
y entre ellas encontramos omap3_beagle_defconfig, que es la que necesitamos, as que primero configuramos el kernel con esa configuracin:
$ make omap3 _ beagle _ defconfig
o bien
$ make xconfig
y con esto tendremos la imagen en arch/arm/boot/uImage lista para copiarla a la primera particin de la tarjeta de memoria.
i
i
i
plantilla 2010/4/6 11:56 page 23 #29
Instalacin avanzada
23
Para disponer de los mdulos, lo que haremos ser instalarlos en nuestra mquina de desarrollo para posteriormente copiarlos en la tarjeta. Para instalarlos
en nuestro pc hacemos (como root)
% make modules _ install
5.2.
(Por hacer)
Una vez construidos el kernel y el sistema de archivos raz tenemos que
copiarlos a la tarjeta de memoria. Para ello primero vamos a preparar las particiones de la tarjeta de la misma forma como se hizo en el apartado de instalacin
bsica.
5.3.
(Por hacer)
i
i
i
plantilla 2010/4/6 11:56 page 24 #30
Bibliografa
[1] Embedded Linux training Lab book
Free Electrons
http://free-electrons.com
24
i
i