He construido mi kernel de Linux (3.0.1) para mi Raspberry Pi con estos pasos:
1. Downloading kernel source
2. tar xvf source.tar.bz2
3. downloading arm cross compilation tool.
4. tar xvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
5. setting up path for cross tool export PATH=$PATH:/home/shan/<cross tool folder>/bin/
6. after entering linux source dir make ARCH=arm versatile_defconfig (is this reliable with raspberry pi)
7. make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
8. zImage is generated in /arch/arm/boot
Mi pregunta es, ¿cómo puedo construir kernel.img? Creo que contiene zImage + ramdisk, pero ¿cómo puedo construir esto?
¿Alguien me puede guiar a hacer ramdisk y empacar estos dos en el archivo kernel.img? Quiero arrancar este kernel en mi Raspberry Pi.
cross-compilation
linux
kernel
arm
Shantanu Banerjee
fuente
fuente
kernel.org
sitio?Respuestas:
archivo kernel.img
Cuando se usa el kernel de Linux, el
kernel.img
archivo se renombralinux/arch/arm/boot/Image
. También debería ser posible (o al menos fue posible la última vez que lo verifiqué) usar una versión comprimida de este archivo -zImage
. Puede contener integradoinitramfs
(ramdisk) pero no es obligatorio. Por ejemplo, elkernel.img
archivo de stock no contieneinitramfs
mientras quekernel_emergency.img
sí.Nota: La guía oficial de compilación del núcleo en eLinux wiki sugiere que debe usar la
imagetool-uncompressed.py
herramienta para preparar elkernel.img
archivo. Era necesario en los primeros días de RaspberyPi, pero hoy en día el gestor de arranque puede manejar archivosImage
yzImage
archivos regulares .Problema con las fuentes del kernel
Lo que es muy importante es que al compilar kernel para RaspberryPi, no se puede usar cualquier versión del mismo. Solo funcionará una versión especial portada a RaspberryPi. Desafortunadamente, la versión actual actual (que se encuentra en el
kernel.org
sitio) no es compatible con RaspberryPi. Además,versatil_config
no es bueno para RaspberryPi, debe usarlobcmrpi_defconfig
en su lugar (se encuentra en fuentes de kernel compatibles con RaspberryPi) obcmrpi_emergency_defconfig
si planea usar buildininitramfs
.Instrucciones de construcción del núcleo
El mejor lugar para obtener fuentes de kernel para RaspberryPi es Foundation Github . También puede encontrar algunas explicaciones útiles sobre cómo obtenerlo y cómo compilarlo en la wiki oficial de RasbperryPi . Aquí está mi pequeña versión simplificada de los pasos involucrados (NOTA: supongo que desea compilar el núcleo de forma cruzada. Es mucho más rápido y debería crear los mismos resultados, pero también es posible construir el núcleo de forma nativa en RaspberryPi):
Descargue la cadena de herramientas oficial para crear la suya. De otra manera, supongo que está instalado
/usr/bin/arm-linux-gnueabi-*
. Si lo tiene en otro lugar, debe cambiar laCROSS_COMPILE
opción en todos susmake
comandos.Vaya al sitio https://github.com/raspberrypi/linux donde puede encontrar fuentes oficiales del núcleo RapsberryPi. Puede descargar el código de dos maneras:
git
utilidad y puede hacerlo incluso en RapsberryPi): haga clic en elZIP
icono, un poco debajo de laCode
pestaña en la parte superior del sitio. Esto debería permitirle descargar los últimos archivos de origen comozip
archivo. En su lugar, podría usar git para hacer esto, pero eso (como se describe en la wiki) necesitará mucho más espacio y tiempo. Luego descomprima el archivo para obtener el árbol de origen.Uso de la
git
utilidad (esto no funcionó para mí en RaspberryPi, ya que probablemente haya una pequeña cantidad de RAM, pero debería funcionar bien en los sistemas de escritorio (tenga en cuenta el--depth 1
argumento que impide que git descargue todo el historial del desarrollo (que es enorme):Utilice la configuración predeterminada proporcionada por la fundación:
Ejecute
make oldconfig
y responda algunas preguntas (debería estar bien presionar enter en cada pregunta dejando la respuesta predeterminada):Compila el núcleo:
Copie los módulos del kernel a
/tmp/modules
:Usar
Image
archivo comokernel.img
Cargue todos los módulos desde desde
/tmp/modules/lib/modules/
su computadora al/lib/modules/
directorio en su raíz RaspberryPi.Agregar initramfs
Sin embargo, esto no proporciona instrucciones sobre cómo crear
initramfs
. Dado que este es un tema muy amplio (básicamente, debe crear un entorno de espacio de usuario de Linux funcional y realmente no hay límite en lo complicado que puede ser), no voy a cubrir esto aquí ahora. Solo notaré queinitramfs
se puede usar en dos formas diferentes: una independiente, donde es un archivo separado y buildin donde está integrado con el archivo de imagen del núcleo (como si estuviera enkernel_emergency.img
). La segunda opción debería ser compatible con el gestor de arranque RaspberryPi, pero hay algunos rumores de que está rota en la versión actual del firmware, por lo que probablemente debería usar la versión de compilación.La mejor manera de comenzar es usar el contenido de trabajo de initramfs (que se está usando para kernel_emergency.img) descargándolo de otro repositorio github de Foundation y solo después de que pueda arrancar el kernel usando esta
iniramfs
imagen, intente construir el suyo. Todo lo que debería ser necesario para esto es apuntar a laCONFIG_INITRAMFS_SOURCE
opción de configuración del núcleo uing del directorio descargado .Notas finales
Entonces debes hacer esto en 3 pasos:
initramfs
archivo.initramfs
contenido listo a su núcleo.initramfs
contenido para satisfacer sus necesidades.fuente
zip
;git
transfiere eficientemente los archivos y puede usarlosdepth=1
para evitar el historial de descargas (creo).Si está ejecutando la misma versión de Debian en ambos, usando X-Apt, dpkg-cross, etc ... y las herramientas emdebian pueden funcionar muy bien.
Fuente: utilizado para desarrollar aplicaciones c ++ para sistemas ARM integrados que ejecutan emdebian.
fuente