Raspberry Pi: Compilación de Software

Raspberry Pi es un proyecto de Hardware Libre diseñado por un grupo iniciado por Eben Upton, Rob Mullins, Jack Lang y Alan Mycroft en el Laboratorio de Cómputo de la Universidad de Cambridge cuyo objetivo es el tener una pequeña computadora simple y flexible, para fines didácticos. Tal ha aumentado la popularidad del proyecto; que hay varias distribuciones de Linux portadas a la computadora y se ha vendido en cantidades considerables.

Raspberry Pi es del tamaño de una tarjeta bancaria, que contiene los siguientes puertos de conexión:

  • Video RCA
  • Conexión de Audio
  • 2 puertos USB
  • Ethernet
  • HDMI
  • Ranura de tarjeta SD
  • Puerto micro-USB para energía
  • Pins para GPIO (General Purpose Input/Output)

Accesorios Extras

Ésta computadora se vende sin carcaza y no más. Los accesorios extras para hacerla funcionar son:

  1. RCA: Se necesita un cable de video RCA.
  2. Audio: Cable estándar TRS de 3.5mm.
  3. USB: Teclado y/o ratón USB 2.0.
  4. Ethernet: Funciona través de USB; por lo tanto soporta transferencia de 10100 Mbps.
  5. HDMI: Se necesita cable estándar HDMI tipo A; soporta audio.
  6. SD: La aconsejable sería una SDHC Clase 10, de al menos 8GB.
  7. micro USB: Un cargador de salida de 700mA / 5V es necesario.
  8. GPIO: De éste no tengo idea, no sé más.

La placa es una BCM2835, con procesador ARM1176JZFS con punto flotante, de 700MHz y 256MB de RAM.

Crear un toolchain

Para compilar o desarrollar Software, se necesita un Compilador cruzado. Los compiladores cruzados sirven para procesar el código fuente, obteniendo de salida un binario exclusivo para este procesador, pero instalado desde una PC. Existe una aplicación llamada Crosstool-NG que automatiza todo el trabajo de crear un compilador cruzado, usando GCC como referencia, y tener la opción de usar GlibC, eGlibC o uClibc como biblioteca C para el equipo.

Los datos técnicos que necesita Crosstool-NG acerca de Raspberry Pi son:

  • Arquitectura: arm
  • Subarquitectura: armv6zk
  • Procesador: arm1176jzf-s
  • Unidad de punto flotante: vfp
  • Ordenado de bits: little endian
  • Tipo de unidad de punto flotante: hard

Probar la compilación

Suponiendo que la construcción del toolchain fue sin problemas, deberíamos tenerlo instalado en $HOME/x-tools. Deberemos colocar en algún archivo aparte o dentro de nuestro bashrc las variables que indicarán que usaremos el compilador cruzado:

:::bash
unset CFLAGS
unset CXXFLAGS
LC_ALL=C
PATH=$HOME/x-tools/arm-unknown-linux-gnueabi/bin:/bin:/usr/bin
ABI=aapcs-linux
HOST=$MACHTYPE
TARGET=arm-unknown-linux-gnueabi
ARCH=arm
ENDIAN=little
ARM_ARCH=armv6zk
ARM_MODE=arm
FLOAT=hard
FPU=vfp
CC=$TARGET-gcc
CXX=$TARGET-g++
AR=$TARGET-ar
AS=$TARGET-as
LD=$TARGET-ld
RANLIB=$TARGET-ranlib
READELF=$TARGET-readelf
STRIP=$TARGET-strip

Si quieren probar la generación del binario, pueden crear un hola_mundo.c, y compilarlo usando:

:::bash
$CC -o hola hola_mundo.c
file hola
hola: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (
uses shared libs), for GNU/Linux 3.5.0, BuildID[sha1]=0x81336a7f984239acb02c
ea7c77b4b45d0ad7d25e, not stripped

Para usar la biblioteca de C dentro de Raspberry Pi, es necesario colocar en el Sistema de Archivos del Sistema los directorios dentro de x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/