ARM Installation Guide (Español)

From ParabolaWiki
Jump to: navigation, search
Este artículo o sección está obsoleto.
Por favor, ayude a mejorar la wiki, actualizando el artículo y corrigiendo los errores.
Advertencia: Las computadoras de placa simple (SBC) normalmente corren sistemas GNU/Linux, pero esto no significa que todo está bien para la libertad del software en estas placas. Por eso no soportamos hardware que no funcione sin ejecutar programas no libres como las placas Raspberry Pi 2, ODROID (modelos que usan el Samsung Exynos SoC), Arndale e Intel Edison; consulte el artículo de la FSF por más información
Advertencia: Nuestras imágenes del kernel usan nombres personalizados (por ejemplo. vmlinuz-linux-libre-grsec) para permitir 2 o más kernels en el mismo sistema una vez que agregamos compatibilidad GRUB y Extlinux.
Advertencia: No disponemos de paquetes ulmage en Parabola ya que estamos adaptando nuestros kernels para compatibilidad con GRUB y Extlinux. Sin embargo, si no quiere usar GRUB, sugerimos que use nuestro script para crear uno nuevo basado en el kernel que usted quiera. Si encuentra algún problema aplicándolo por favor repórtelo en nuestro Bug Tracker
Nota: Los paquetes uboot4grub están bajo desarrollo aún para U-Boot con soporte GRUB, por lo tanto las SBC no trabajan con soporte GRUB por ahora
Nota: Los paquetes uboot4extlinux están bajo desarrollo aún para U-Boot con soporte Extlinux, excepto uboot4extlinux-am335x_bone que está disponible en [libre] ya que funciona bien y estable en el Beaglebone Black de coadde. Para otros paquetes uboot4extlinux, necesitamos placas ARMv7 para portarlos y testearlos antes de moverlos a [libre].
Nota: Por defecto grub está construído para sistemas que tienen RAM en direcciones como 0x08000000. Sin embargo las placas SBC que tenemos en mente tienen RAM que comienzan a partir de diferentes valores (por ejemplo BeagleBone and BeagleBone Black en 0x82000000) entonces necesitamos ajustar GRUB_KERNEL_ARM_UBOOT_LINK_ADDR para asegurarnos que encuentre U-Boot load_addr. Por lo tanto , estamos creando paquetes grub con sufijos específicos para esto (por ejemplo grub-am335x_bone para BeagleBone y BeagleBone Black)

1 Creación de la imagen de instalación Parabola

Este paso es necesario hasta que los desarrolladores de Parabola lanzen un tarball oficial. Necesitará una instalación existente para hacer esto.

1.1 Archivos de configuración

Si quiere un archivo de sistemas raíz de armv7h en su sistema existente Parabola solo necesitará hacer una copia desde pacman.conf y editarla, por ejemplo:

$ mkdir -p parabola-arm-workdir/mnt && cd parabola-arm-workdir
$ cp /etc/pacman.conf .   # se aconseja usar el pacman.conf por defecto si va a liberarlo

Configure la arquitectura a armv7h (por defecto es auto) en la sección de "opciones generales" en /etc/pacman.conf. Luego, remueva el repositorio [multilib].

pacman.conf
[options]
Architecture = armv7h

1.2 Sistema de archivo raíz

Asegúrese de inicializar el anillo de claves de pacman

# pacman-key --init

Importe, instale y confíe en el anillo de claves de archlinuxarm. Cuando sea posible, Parabola aprovechará los paquetes libres que originalmente proceden de Arch ARM.

# pacman -U https://www.parabola.nu/packages/core/any/archlinuxarm-keyring/download/
# pacman-key --lsign-key builder@archlinuxarm.org
# pacman -U https://www.parabola.nu/packages/core/any/archlinuxarm-keyring/download/
Nota: Si no funciona, use algún otro mirror de paquetes disponible. Actualice a la versión más reciente de los paquetes, por ejemplo:
# pacman -U https://repo.parabola.nu/core/os/armv7h/archlinuxarm-keyring-20140119-1-any.pkg.tar.xz
# pacman-key --lsign-key builder@archlinuxarm.org
# pacman -U https://repo.parabola.nu/core/os/armv7h/archlinuxarm-keyring-20140119-1-any.pkg.tar.xz

Instale pacstrap si aún no lo ha hecho e instale los paquetes del grupo base

# pacman -S arch-install-scripts
# pacstrap -c -d -C ./pacman.conf ./mnt/ base
Nota: Los errores acerca de las llamadas exec() pueden ser inofensivos. Puede proceder a probar y posteriormente configurar este entorno chroot usando QEMU

Opcionalmente empaquete todo en un tarball:

# cd mnt && tar xJf ../parabola_arm_rootfs.tar.xz ./

Felicitaciones, ya posee un rootfs de Parabola ARMv7 dentro de parabola-arm-workdir/mnt/, cópielo al dispositivo de almacenamiento a partir del cual planea bootear Parabola. Ya que las computadoras ARM son muy diversas en su firmware, procesos de booteo y esquemas esperados de particionado que nosotros solamente podemos proveer instrucciones de instalación para una pequeña cantidad de dispositivos amigables con el software libre.

2 Prueba y personalización de imágenes de instalación

Nota: Esta sección es opcional. Dependiendo de las características de sus dispositivos quizás también le sea necesario instalar un paquete gestor de descargas/firmware uboot adecuadopara el dispositivo de almacenamiento desde el cual planea bootear el sistema, todo dentro de su nueva imagen de Parabola y sin recurrir a un S.O. existente en el dispositivo ARM

Es posible usar PRoot, una implementación de chroot en espacio de usuario, y el hipervisor QEMU para emular una máquina ARM con su sistema de archivos dentro del anfitrión x86.

2.1 Requerimientos

2.1.1 Instalación de PRoot

PRoot es una implementación en espacio de usuario de chroot, mount --bind, y binfmt_misc. Esto significa que los usuarios no necesitan ningún privilegio o configuración para hacer cosas como usar un directorio arbitrario como el nuevo sistema de archivos, haciendo accesibles a los archivos en algún otro lugar en la jerarquía del sistema de archivos, o ejecutar programas construidos para otra arquitectura cd CPU en forma transparente a través del modo de usuario de QEMU. También, los desarrolladores pueden usar PRoot como un motor de instrumentación de procesos GNU/Linux genérico gracias a su mecanismo de extensión, consulte CARE por un ejemplo. Técnicamente PRoot depende de ptrace, una llamada al sistema sin privilegiosa disponible en todos los kernel Linux.

Para instalarlo, ejecute:

# pacman -S proot

2.1.2 QEMU

QEMU (abreviatura de Quick Emulator, emulador rápido) es un hipervisor anfitrión de software libre que implementa la virtualización del hardware (no debe confundirse con virtualización asistida por hardware)

Necesitamos (qemu-arm) para emular una máquina ARMv7 en otra x86, entonces ejecutamos:

# pacman -S qemu-arch-extra

2.1.3 Preparar chroot e ingresar desde PRoot

 # mount -o rbind /dev parabola-arm-workdir/mnt/dev
 # mount -o bind /sys parabola-arm-workdir/mnt/sys
 # mount -o bind /tmp parabola-arm-workdir/mnt/tmp
 # mount -t proc none parabola-arm-workdir/mnt/proc
 # rm parabola-arm-workdir/mnt/etc/resolv.conf
 # cp -a /etc/resolv.conf parabola-arm-workdir/mnt/etc
 # proot -0 -q /usr/bin/qemu-arm -r parabola-arm-workdir/mnt

2.2 Configuración de chroot

2.2.1 Verificación de firma de paquetes

Asegúrese que la verificación de firmas está habilitada en /etc/pacman.conf:

pacman.conf
SigLevel    = Required DatabaseOptional

Para poder instalar paquetes firmados, tiene que inicializar el anillo de claves de pacman:

# pacman-key --init
# pacman-key --populate archlinux
# pacman-key --populate archlinuxarm
# pacman-key --populate parabola
Nota: Este paso puede demorar un rato, sea paciente. (consulte Pacman-Key)

2.2.2 Localización

Antes de habilitar locale en un sistema, debe ser generada. Los locales disponibles/generados actualmente pueden ser vistos con:

$ locale -a

Los locales que pueden ser generados están listados en el archivo /etc/locale.gen: sus nombres se definen usando el formato [languaje][_TERRITORIO[.CODIGO][@modificador]. Para generar un locale, primero descomente la línea correspondiente en el archivo (o comente para anularlo); cuando haga esto, también considere las localizaciones necesarias por otros usuarios del sistema y por variables específicas. Por ejemplo, para inglés americano descomente en_US.UTF-8 UTF-8. Una vez hecho esto, grabe el archivo y genere los locale(s) ejecutando:

# locale-gen
Nota: locale-gen también e ejecute con cada actualización de glibc.

2.2.3 Más configuraciones

This article or section needs expansion.
Please help expand this article so the intended scope is covered in sufficient detail. (Discuss)

Visite Installation_guide#Installation.

3 Como instalar Parabola ARM

This article or section needs expansion.
Please help expand this article so the intended scope is covered in sufficient detail. (Discuss)

Suponemos que el usuario dispone de alguna distribución GNU/Linux 100% software libre, Trisquel por ejemplo.

3.1 GTA04 A3

El GTA04 típicamente tiene un gestor de arranque en NAND. Pondremos todo en una única partición por simplicidad. Formatearemos una tarjeta microSD card (se perderá su contenido)

# fdisk /dev/mmcblk0 # crea una partición en su tarjeta microSD.
# mkfs.ext4 /dev/mmcblk0p1 # formateo como ext4
# mount /dev/mmcblk0p1 /mnt

Luego extraemos el rootfs, para esto, se necesita --numeric-owner por compatibilidad con otras distribuciones como Trisquel

# tar xf /path/to/parabola_arm_rootfs.tar.xz -C /mnt --numeric-owner

Ya tenemos el rootfs en su lugar, pero uboot espera una uImage en /boot/uImage, entonces la crearemos:

# cat /mnt/boot/vmlinuz-linux-libre /mnt/boot/dtbs/linux-libre/omap3-gta04a3.dtb > /tmp/zImage.dtb
# mkimage -A arm -O linux -T kernel -C none -a 0x82000000 -e 0x82000000 -d /tmp/zImage.dtb /mnt/boot/uImage

Posiblemente necesite ajustar cmdline y/o los parámetros de arranque pasados al kernel y al entorno uboot para ajustar su esquema de particionado.

Luego que arranque Parabola debería ver el log del booteo en la consola serial. En el momento de escribir estas líneas el kernel carece del driver de pantalla para GTA04, esto es un bug #587

3.2 Configuración del gestor de arranque

3.2.1 U-Boot

Nota: No necesita hacer una intervención manual para instalar el paquete gestor de arranques U-Boot para su (excepto BeagleBoard y BeagleBoard-xM) ya que lo hace automáticamente para usted, sin embargo sólo trabaja con linux-libre. Si desea usar otro kernel o múltiples kernels en el mismo hardware, consulte U-Boot4GRUB y U-Boot4Extlinux para más información
3.2.1.1 BeagleBoard y BeagleBoard-xM

Se necesita intervención manual para usar uboot-omap3_beagle

Nota: Reemplace sdX1 en las instrucciones siguientes con la partición de sistema de archivos FAT (que contiene los archivos de booteo) para la tarjeta SD según aparezca en su computadora

Monte el sistema de archivos FAT

 # mkdir boot
 # mount /dev/sdX1 boot

Copie los archivos de booteo para la primera partición

 # cp -a /boot/* boot

Desmonte la partición

 # umount boot

3.2.2 GRUB

grub brinda soporte para máquinas ARMv7 con soporte EFI. Consulte nuestro artículo sobre GRUB para más información.

Nota: Por defecto grub está construido para sistemas que tienen RAM con direcciones desde 0x08000000. Sin embargo las placas SBC que tenemos en mente tienen RAM que inician desde valores diferentes (por ejemplo, BeagleBone y BeagleBone Black en 0x82000000) entonces necesitamos ajustar GRUB_KERNEL_ARM_UBOOT_LINK_ADDR para asegurarnos que encuentre la U-Boot load_addr. Sin embargo, necesitamos crear paquetes grub con sufijos específicos para ello (por ejemplo grub-am335x_bone para BeagleBone y BeagleBone Black)

3.2.3 U-Boot4GRUB

Los paquetes uboot4grub están bajo desarrollo aún para U-Boot con soporte a GRUB. En este momento, tenemos algunos paquetes para testing y debugging de [libre-testing].

Nota: Si quiere agregar este repositorio, necesita añadir las siguientes líneas en su /etc/pacman.conf.
[libre-testing]
Include = /etc/pacman.d/mirrorlist

3.2.4 U-Boot4Extlinux

Extlinux es uno entre varis derivados de Syslinux -- el gestor de arranque usado por live CDs y muchas otras aplicaciones. No se usa muy a menudo como un gestor de arranque para desktops y laptops, pero es perfectamente capaz de esto y además es soportado por U-Boot. Los paquetes uboot4extlinux aún están en desarrollo para U-Boot con soporte Extlinux. En este momento, tenemos algunos paquetes para testing y debugging desde [libre-testing].

Nota: Si desea añadir este repositorio, deberá agregar las línea siguientes en /etc/pacman.conf.
[libre-testing]
Include = /etc/pacman.d/mirrorlist
Nota: uboot4extlinux-am335x_bone está disponible en [libre] ya que funciona bien y en forma estable en la Beaglebone Black de coadde. Para otros paquetes uboot4extlinux, necesitamos más placas ARMv7 para portarlos y testearlos antes de moverlos a [libre].

3.3 Banana Pi

Estas son las instrucciones para instalar Parabola en la Banana Pi, en teoría esta guía puede ser adaptada para la Banana Pro y Orange Pi solamente cambiando los paquetes. Esto fue probado en una Banana Pi M1, pero versiones más nuevas deberían funcionar también. Primero instala Arch ARM en una SD-Card y migra a Parabola. Dentro de la Banana Pi, instala uboot-bananapi y cuando te pregunte para flashear uboot, acepta. Luego ejecuta el script /boot/mkscr, pero antes asegúrate de tener instalado el paquete uboot-tools.

# pacman -S uboot-banapi
# cd /boot && ./mkscr

Opcionalmente, puedes instalar uboot4extlinux-bananapi el cual ha sido probado funcional.

# pacman -S uboot4extlinux-bananapi
Nota: Si vas a instalar uboot-bananapi no podrás elegir múltiples kernels al bootear, y necesitarás initramfs o uImage y script.bin. Se recomienda generar initramfs para este caso, pero asegúrese de que el kernel que instale tiene el archivo /etc/mkinitcpio.d/linux-libre-xxx.preset, de lo contrario no podrás generarlo.

3.4 Solución de problemas

3.4.1 Mkinitcpio

3.4.1.1 WARNING: No modules were added to the image. This is probably not what you want.

Si al crear la imagen initramfs con mkinitcpio, obtienes el siguiente mensaje

==> WARNING: No modules were added to the image. This is probably not what you want.

Solo ignoralo, deberías poder bootear de todas formas.

3.4.1.2 ERROR: kernel version extraction from image not supported for `armv7' architecture

Si al ejecutar mkinitcpio obtienes el mensaje

ERROR: kernel version extraction from image not supported for `armv7' architecture

O similar (como armv7h, armv7l, etc) edita /bin/mkinitcpio y donde dice $arch déjalo como

if [[ $arch != @(i?86|x86_64|armv7?) ]]; then
    error "kernel version extraction from image not supported for \`%s' architecture" "$arch"

3.4.1.3 ERROR: invalid kernel specified: '/boot/vmlinuz-linux-libre'

En este caso edita /etc/mkinitcpio.d/linux-libre-xxx.preset y donde dice ALL_kver="/boot/vmlinuz-linux-libre-xxx" cambia /boot/vmlinuz-linux-libre-xxx con el lanzamiento del kernel, que debiera ser el resultado de uname -r, si estás usando ese kernel. Puedes verlos también con

$ ls /lib/modules
Note: xxx es el nombre especial del kernel.

3.5 Vea también