Archivo

Archivo para la categoría ‘Raspberry Pi’

Compilar Kernel para Raspberry Pi

domingo, 19 de mayo de 2013 4 comentarios

Hace unos días tuve que compilar el kernel para el Raspberry Pi ya que necesitaba agregar un módulo del kernel para una impresora térmica (usblp.ko), ya que no viene incluido en raspbian.

Para que necesitas compilar el kernel?

  • Soporte dispositivos o tecnologías no incluidas en raspbian (mi caso)
  • Actualizar a nueva versión
  • Personalizar el kernel removiendo módulos o características que no son necesarias para el uso que le das al equipo.

Requerimientos

  • SD con Raspbian instalado y ejecutándose (aquí sólo compilamos el kernel, igual necesitarás el resto de la distribución).
  • Una distribución linux para compilar, aquí usé Ubuntu Server (que era la que tenía a mano xD).
  • Lector de tarjetas para modificar los archivos (reitero la necesidad de linux, ya que debes acceder a la partición ext3).
  • Un buen procesador, mientras mejor sea la compilación será más rápida.
  • 2 GB de espacio mínimo aprox (mi carpeta pesa 1819 MB, en 71418 archivos)

Proceso

  • Primero debes descargar el código fuente de Linux, aquí usaré la versión 3.6 que corresponde a la rama estable. Puedes clonar el repositorio git, pero como son muchos archivos conviene más descargar el archivo comprimido.

mkdir rpi
cd rpi
wget https://github.com/raspberrypi/linux/archive/rpi-3.6.y.tar.gz
tar xfv rpi-3.6.y.tar.gz

  • Luego debes descargar el cross-compiler, ya que estarás compilando para ARM desde x86/x64, al igual que Linux también puedes clonar el repositorio o descargar el archivo comprimido

wget https://github.com/raspberrypi/tools/archive/master.tar.gz
tar xfv master.tar.gz
apt-get install gcc-arm-linux-gnueabi make ncurses-dev

  • Ejecuta este comando para limpiar la carpeta del kernel

cd rpi-3.6.y
make rproper

  • Luego debes copiar la configuración de kernel, para eso necesitas obtener el archivo .config de un raspbian en ejecución

scp root@raspberryip:/proc/config.gz config.gz
zcat config.gz > .config

  • Debes exportar esta variable que define el path del compilador y el prefijo de los comandos.

export CCPREFIX=/home/usuario/rpi/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin/arm-bcm2708-linux-gnueabi-

  • Actualizar la configuración

make ARCH=arm CROSS_COMPILE=${CCPREFIX} oldconfig

  • Si deseas agregar o quitar características y módulos al kernel debes entrar al menú de configuración

make ARCH=arm CROSS_COMPILE=${CCPREFIX} menuconfig

  • Compilar el kernel!, esto tardará varios minutos e incluso horas

make ARCH=arm CROSS_COMPILE=${CCPREFIX}
make ARCH=arm CROSS_COMPILE=${CCPREFIX} modules

  • Ahora debes pasar el kernel a la tarjeta SD, si está en ejecución apaga el rPi e inserta la tarjeta en el lector de tu computador (aqui supondré que la SD está en /mnt/sdsys la partición ext3 del sistema y /mnt/sdboot la fat32 de booteo)

mv /mnt/sdboot/kernel.img /mnt/sdboot/kernel-original.img
cp arch/arm/boot/Image /mnt/sdboot/kernel.img

  • Ahora debes copiar los módulos, primero se pondrán todos juntos en una carpeta y luego se copiarán

mkdir /home/usuario/rpi/modules
export MODULES_TEMP=/home/usuario/rpi/modules
make ARCH=arm CROSS_COMPILE=${CCPREFIX} \
INSTALL_MOD_PATH=${MODULES_TEMP} modules_install

mv /mnt/sdsys/lib/modules /mnt/sdsys/lib/modules.old
mv /mnt/sdsys/lib/firmware /mnt/sdsys/lib/firmware.old
cp –rv /home/usuario/rpi/modules/lib/* /mnt/sdsys/lib/

  • Luego se debe actualizar el firmware, se debe descargar y copiar a la SD

cd ..   (para volver a /home/usuario/rpi)
wget https://github.com/raspberrypi/firmware/archive/next.tar.gz
tar xfv next.tar.gz
cd firmware-next
mv /mnt/sdsys/opt/vc /mnt/sdsys/opt/vc.original
cp –rv /opt/vc /mnt/sdsys/opt/
mv /mnt/sdboot/bootcode.bin /mnt/sdboot/bootcode.bin.original
mv /mnt/sdboot/fixup.dat /mnt/sdboot/fixup.dat.original
mv /mnt/sdboot/start.elf /mnt/sdboot/start.elf.original
cp boot/bootcode.bin /mnt/sdboot/
cp boot/fixup.date /mnt/sdboot/
cp boot/startr.elf /mnt/sdboot/

  • Llegó el momento de probar el nuevo kernel. Extrae la SD e insértala en el Raspberry Pi y enciéndelo. Si inicia el SO y llegas al login el kernel se compiló exitosamente.
  • Opcionalmente puedes eliminar todos los archivos que se renombraron para liberar espacio una vez que compruebes que el kernel funcionó correctamente.

Fuente: http://elinux.org/RPi_Kernel_Compilation

Primeros pasos con una Raspberry Pi

jueves, 14 de febrero de 2013 2 comentarios

Mi última adquisición fue un Raspberry Pi modelo B (Rpi), que es un computador de tamaño similar a una tarjeta de crédito, este equipo cuenta con las siguientes características:

  • SoC (System on Chip) que incluye un procesador ARMv6 a 700mhz (overclockeable hasta 1ghz sin anular garantía vía opciones en el firmware), 512 MB de RAM
  • 2 puertos USB
  • 1 puerto Ethernet 10/100M
  • Lector SD (la SD es el almacenamiento principal, ahí debe ir el SO)
  • 1 conector de video compuesto
  • 1 conector HDMI
  • 1 conector de audio
  • 1 conector microUSB para darle energía a la RPi (no se usa para datos)

rpi

Cuando compras el equipo sólo recibes la placa mostrada en la imagen anterior, para hacerla funcionar necesitas tener más cosas, las que tuve que comprar algunas:

  • Tarjeta SD para el SO, mínimo 2 GB clase 4
  • Teclado USB
  • Mouse USB (si vas a usar la X)
  • Hub USB (si los 2 puertos USB no son suficientes)
  • Cable HDMI o HDMI a DVI o cable de video compuesto para conectarlo a la TV. Si vas a usar el Rpi para videos se recomienda usar el puerto HDMI, ya que el de video compuesto es de inferior calidad (en un monitor LCD se nota y mucho xD, incluso la terminal)
  • Un transformador con puerto microUSB que entregue 5v a 700mA mínimo. Este requisito lo cumple un cargador de celular Android como el mio que entrega 5,1v a 700mA. No sirve el puerto USB de un computador ni hub USB (5v 500mA)
  • Cable Ethernet para conectarlo a la red.

Preparación

  • Conecta todos los cables excepto el cable de poder y la tarjeta SD.
  • La tarjeta SD hay que cargarla con el Sistema Operativo, lo que debes hacer en un computador normal con lector de tarjetas, para eso debes descargar la imagen del mismo desde http://www.raspberrypi.org/downloads
  • Hay varias versiones, descarga la versión recomendada Raspbian wheezy, que es un Debian optimizado para la Rpi.
  • Una vez descargada debes descomprimirla.
  • El archivo es una imagen de la tarjeta SD, debes pasarlo a la SD con un programa especial

Copia del SO a la SD (linux)

Si estás usando mac o windows el procedimiento está aqui: http://elinux.org/RPi_Easy_SD_Card_Setup

  • Conecta la SD al computador
  • Verifica que nombre se le asigno con fdisk –l o dmesg (supondré que se le asignó /dev/sdb)
  • Si el SO montó automáticamente la tarjeta debes desmontarla con umount /dev/sdb1 (si hay varias particiones debes desmontarlas todas)
  • Copia la imagen a la sd: dd if=raspbian.img of=/dev/sdb bs=4M (como root). Reemplaza raspbian.img por el nombre de la imagen y verifica que el nombre del dispositivo sea el correcto ya que de lo contrario será sobreescrito perdiendo lo que esté guardado anteriormente.
  • Ahora tienes que esperar que se copie, dd no mostrará ninguna información de progreso, sólo verás el led del lector parpadeando. Cuando termine volverás al prompt.
  • Ejecuta sync como root para vaciar la cache de escritura y así poder remover la SD.
  • Quita la tarjeta SD e introducela en la Rpi.

Primer inicio

  • Conecta el cable de poder al puerto microUSB, la Rpi comenzará a iniciar.
  • Debería encenderse el LED rojo que indica que está conectado el cable de poder, posteriormente se encenderán los demás LED indicando conexión del cable de red (link, act, 10/100M) y actividad de la SD.
  • Luego de un momento llegarás al login, como usuario pone pi y password rasperry. Se ejecutará un menú con las opciones iniciales

image

  • info

image

  • expand_rootfs: La imagen base del sistema es de 2GB, pero si la tarjeta SD es de más tamaño la diferencia no está particionada por lo que no se está aprovechando. Para expandir el sistema de archivos para usar toda la SD se debe usar esta opción y luego reiniciar.
  • configure_keyboard: Por defecto la distribución del teclado está establecida en Inglés (USA), para cambiarla debes usar esta opción
  • change_pass: Cambiar password usuario "pi"
  • configure_locale: Idiomas disponibles e idioma por defecto
  • change_timezone: Zona horaria
  • memory_split: Permite cambiar la memoria asignada a video, por defecto 64MB. Valores disponibles: 16/32/64/128/256.
  • overclock: Permite hacer overclocking, aunque se deben seguir las precauciones

image image

  • ssh: Permite activar/desactivar el servidor SSH
  • boot_behaviour: Activa o desactiva el inicio de la X al bootear el sistema.
  • update: Busca actualizaciones de esta utilidad.

En el futuro para acceder a este menú se debe usar como root el comando raspi-config.

Instalar programas

Éste es un Debian, puedes usar el gestor de paquetes para instalar/desinstalar/actualizar

Usar la X

Ejecuta startx como usuario normal. Como gestor se usa LXDE.

USB

La Rpi no soporta dispositivos USB que demanden más de 140mA ya que el dispositivo no cuenta con más energía. Los teclados y mouse no presentan este problema ya que su consumo es bajo. Para conectar dispositivos que demanden más energía se debe usar un hub energizado externamente.

Si se conecta un dispositivo que consuma mucha energía no será reconocido y se reiniciará la Rpi si se conectó en caliente.