Configuración del kernel de Raspberry Pi

Dirección original: http://nicekwell.net/blog/20171108/shu-mei-pai-nei-he-kai-fa-shuo-ming-xia-zai-dai-ma-bian-yi-ti-huan-nei -he.html

Raspberry Pi ejecuta el sistema Linux, el código del kernel es de código abierto, podemos modificar el código del kernel y escribir el controlador nosotros mismos.

Este artículo describe cómo obtener el código del kernel de Linux, completar la compilación y el reemplazo del kernel.

1. Descripción general de
la página de inicio de github de Raspberry Pi: https://github.com/raspberrypi, que contiene código fuente de Linux, cadena de herramientas de compilación cruzada, etc.

Hay dos almacenes para lo que vamos a utilizar:

https://github.com/raspberrypi/linux código fuente del kernel

https://github.com/raspberrypi/tools Cadena de herramientas de compilación cruzada (solo se usa en compilación cruzada)

Nota:
1. La versión de la imagen del sistema instalada en la Raspberry Pi debe corresponder al código del kernel. Debido a que el sistema Raspberry Pi se desarrolla y actualiza constantemente, si su Raspberry Pi usa una imagen del sistema en un momento determinado, es mejor usar el código del kernel en ese momento.
2. Sobre el método de compilación del kernel, el sitio web oficial tiene una introducción muy detallada: https://www.raspberrypi.org/documentation/linux/kernel/building.md, aquí hay una traducción y un suplemento.
3. El siguiente proceso de compilación se prueba en Raspberry Pi 1 y Raspberry Pi 3B.

2. Compilación cruzada en ubuntu
1. Obtenga herramientas de compilación cruzada y código fuente

Código fuente: git clone [email protected]: raspberrypi / linux

Herramienta de compilación cruzada: git clone [email protected]: raspberrypi / tools

2. Configurar variables de entorno de compilación

2.1 Configurar manualmente las variables de entorno

Después de descargar la herramienta de compilación, compile el archivo bin de la herramienta de compilación que necesitamos en ubuntu de 64 bits en: tools / arm-bcm2708 / gcc-linaro-arm-linux-gnueabihf-raspbian-x64 / bin, agregue este directorio al entorno En la variable PATH, agregue el método:

RUTA = $ RUTA: / home / nicek / githubProjects / raspberrypi / tools / arm-bcm2708 / gcc-linaro-arm-linux-gnueabihf-raspbian-x64 / bin

Si está compilando en un sistema de 32 bits, debe elegir una herramienta de compilación cruzada de 32 bits.

Una vez completada la configuración, puede usar el comando de la herramienta del compilador para verificar el número de versión:
arm-linux-gnueabihf-gcc -v

Después de eso, todos los comandos make deben especificar algunas variables de entorno:
ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7

ARCH = arm indica que arm se está compilando actualmente. Aunque la Raspberry Pi es de 64 bits, arm todavía está seleccionado aquí en lugar de arm64.
CROSS_COMPILE indica el nombre de la cadena de herramientas cruzadas.
KERNEL indica el tipo de kernel. Raspberry Pi 1 se establece en kernel y Raspberry Pi 2 y 3 se configuran en kernel7.
Cada vez que make necesita especificar estas variables de entorno, tales como:
ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7 make menuconfig
ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7 make -j4 zImage

2.2 Configuración automática de variables de entorno

Es muy problemático escribir las variables de entorno anteriores en cada comando, puede configurarlo una vez a través de export:
export PATH = $ PATH: / home / nicek / githubProjects / raspberrypi / tools / arm-bcm2708 / gcc-linaro-arm-linux-gnueabihf- raspbian-x64 / bin ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7
Todos los comandos ejecutados en esta terminal después de kernel7 tienen esta información de variables de entorno.

Este comando de exportación se puede escribir como un script y luego generar este script en la terminal antes de compilar para establecer todas las variables de entorno. Simplemente obtenga envsetup.sh antes de compilar Android.

#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
export PATH="$PATH:$DIR/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/"
export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7

La ruta en el comando anterior puede ser diferente a la actual, preste atención para modificarla.

Después de exportar las variables de entorno, los comandos subsiguientes en esta terminal ya no pueden especificar estas variables de entorno, como:
comando antes de la configuración: ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7 make menuconfig
comando después de la configuración: make menuconfig

3. Configurar config

Hay muchos proyectos en el código fuente de Linux: el proyecto para
Raspberry Pi 1 es bcmrpi_defconfig; el proyecto para
Raspberry Pi 2 y 3 es bcm2709_defconfig.

3.1 Use la configuración que viene con el código fuente

ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7 make bcm2709_defconfig

La función de este comando es obtener la configuración de bcm2709_defconfig en .config.
Podemos usar directamente la configuración en el proyecto, pero en este caso se puede perder la configuración de la Raspberry Pi original. Aquí tienes un método para obtener la configuración de la Raspberry Pi actualmente en uso.

3.2 Obtener la configuración actual de Raspberry Pi

La Raspberry Pi que se haya encendido tendrá este nodo: /proc/config.gz, desde el cual se puede obtener la configuración de esta Raspberry Pi.
Si no existe tal nodo, primero debe cargar el módulo: sudo modprobe configs

Copie el contenido de config.gz en la computadora que se va a compilar:
scp pi @ [ip]: / proc / config.gz.

Descomprímalo y guárdelo como un archivo .confg.
zcat config.gz> .config
Nota: Debe descomprimirse en un entorno linux, se distorsionará en mac.

Copie este archivo de configuración en el directorio raíz del código fuente de Linux.

4. Compilar

安装 必要 的 库 :
sudo apt-get install bc
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install zlib1g: i386
sudo apt-get install libc6-i386 lib32stdc ++ 6 lib32gcc1 lib32ncurses5

1. Ejecute menuconfig
ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7 make menuconfig
Si no hay nada que cambiar, no es necesario realizar este paso.

2. Compile
ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7 make -j4 módulos zImage dtbs 2> & 1 | tee build.log
para compilar con n proceso. Si no se especifica el número de procesos, se compilará como un solo proceso de forma predeterminada.

3. Empaquete el archivo
zImage Utilice directamente las herramientas en el paquete fuente de Linux:
./scripts/mkknlimg arch / arm / boot / zImage ./kernel_new.img
para generar un archivo kernel_new.img en este directorio, este archivo debe colocarse en la tarjeta SD documento.
Nota: ¡Muchos lugares en Internet dicen que el uso de tools / mkimage / imagetool-uncompressd.py no funciona! !

5. Monte la tarjeta SD Raspberry Pi e instale la compilada DIRECTAMENTE en la tarjeta SD

Inserte la tarjeta sd de la Raspberry Pi en la computadora del sistema ubuntu. La tarjeta sd de la Raspberry Pi tiene dos particiones:
una partición fat, que está relacionada con el contenido de arranque, y el archivo img del kernel se coloca en esta partición; la
otra es una partición ext4. Es la partición del directorio raíz del sistema.

Los archivos que generamos involucran el contenido de estas dos particiones. Generalmente, se montarán automáticamente después de ser insertados en ubuntu. La partición fat puede ser operada sin privilegios de root y la partición ext4 requiere operaciones de privilegio de root.

Puede decidir dónde montar las dos particiones. A continuación, [fat] se usa para indicar la ruta donde se monta el arranque, y [ext4] es la ruta donde se monta ext4.

1. Instale los módulos
sudo ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7 make INSTALL_MOD_PATH = [ext4] modules_install para
operar la partición ext4, requiere privilegios de root.

2. Actualice
el archivo kernel.img. El archivo kernel_new.img ha sido empaquetado con la herramienta mkknlimg anteriormente. Cópielo en la partición de arranque y configúrelo para usarlo:
cp kernel_new.img [fat] /
edit [fat] /config.txt archivo, Agregue una línea al final:
kernel = kernel_new.img

3 、 复制 其他 相关 文件
cp arch / arm / boot / dts / .dtb [fat] /
cp arch / arm / boot / dts / superposiciones / .dtb * [fat] / superposiciones /
cp arch / arm / boot / dts / superposiciones / README [fat] / superposiciones /

Una vez completada la actualización, conecte la Raspberry Pi para arrancar. Después de arrancar, puede usar el comando uname -a para verificar que la información del kernel haya cambiado.

3. Compilación local en Raspberry Pi El
principio de compilación local en Raspberry Pi es básicamente el mismo que el principio de compilación cruzada anterior: debido a que es una compilación local, la configuración de las herramientas de compilación y las variables de entorno es más simple.
Se necesitaron casi 2 horas para compilar un kernel en la Raspberry Pi.

1. Obtén el código fuente

git clone [email protected]: raspberrypi / linux

2. Configure el entorno de compilación

Las variables de entorno que deben configurarse al realizar una compilación cruzada en ubuntu son:

RUTA: Agregue el directorio de la cadena de herramientas cruzadas
ARCH: Configúrelo como arm
CROSS_COMPILE: Configúrelo como la cadena de herramientas cruzada usada en ubuntu arm-linux-gnueabihf- KERNEL = kernel7
KERNEL: Configúrelo como kernel7
y compílelo localmente en la Raspberry Pi:
Acerca de la cadena de herramientas cruzadas , Puede compilar su propia herramienta de compilación para su propio uso, por lo que no es necesario configurarla;
solo configure KERNEL = kernel7.

Igual que el anterior, puede usar export KERNEL = kernel7. Después de una configuración, todos los comandos en esta terminal tienen esta variable de entorno.
Puede escribirse además como una secuencia de comandos, pero esta línea de comando es muy simple, por lo que no es necesario escribir una secuencia de comandos.

3. Configurar config

Como arriba,
Raspberry Pi 1 usa bcmrpi_defconfig, y
Raspberry Pi 2 y 3 usan bcm2709_defconfig.
Ejemplo: KERNEL = kernel7 make bcm2709_defconfig

Si desea utilizar la configuración que viene con la Raspberry Pi:
sudo modprobe configs # Cargue el módulo
zcat config.gz> .config # Obtenga la configuración

4. Compilar

Instale las bibliotecas necesarias:
sudo apt-get install bc
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install zlib1g
sudo apt-get install libc6

1. Ejecute menuconfig
KERNEL = kernel7 make menuconfig Si no hay
nada que cambiar, no necesita ejecutar este paso.

2. Compile
KERNEL = kernel7 make -j4 módulos zImage dtbs 2> & 1 | tee build.log
para compilar con n proceso. Si no se especifica el número de procesos, se compilará como un solo proceso de forma predeterminada.

3. Empaque el archivo
zImage Utilice directamente la herramienta en el paquete fuente de Linux:
./scripts/mkknlimg arch / arm / boot / zImage ./kernel_new.img
para generar un archivo kernel_new.img en este directorio, este archivo debe colocarse en la tarjeta SD documento.

5. Actualiza el sistema

1. Instale el módulo
sudo make modules_install

2 、 复制 dtb 文件
sudo cp arch / arm / boot / dts / .dtb / boot / sudo cp arch / arm / boot / dts / superposiciones / .dtb * / boot / overlay / sudo cp arch / arm / boot / dts / superposiciones / README / boot / superposiciones /

3. Actualice el archivo kernel.img
sudo cp arch / arm / boot / zImage /boot/$KERNEL.img

Supongo que te gusta

Origin blog.csdn.net/hhltaishuai/article/details/108007979
Recomendado
Clasificación