Curso avanzado de Raspberry Pi 3: análisis de alfabetización del árbol del directorio de origen del kernel de Linux, configuración del kernel de Linux adecuada para operaciones relacionadas con Raspberry Pi y compilación del kernel, trasplante

Análisis de alfabetización del árbol del directorio de origen del kernel de Linux

1. Análisis de alfabetización del árbol de directorios de fuentes del kernel de Linux:

sudo apt-get install tree
tree   //查看目录树

Aproximadamente archivos C de 1.3w: líneas de código de 1100w
Linux es de código abierto y gratuito, y los trabajadores de la comunidad de código abierto de Linux mantienen conjuntamente
Linux como código abierto, admiten código de múltiples arquitecturas y plataformas, y tienen una portabilidad muy alta

Pero el kernel de Linux generalmente se compila en unos pocos M ---- 4M

Debido a que admite multiplataforma y arquitectura múltiple, es necesario configurarlo antes de compilarlo y configurarlo en una plataforma de destino adecuada.
Plataforma: ARM (HiSilicon, Friendly Arm, Raspberry Pi, nanopi) X86 MIPS

Artículo de referencia:
estructura de árbol de directorios del código fuente del kernel de Linux

Comprender la estructura del árbol del directorio de origen

2. Configure el kernel de Linux adecuado para las operaciones relacionadas con Raspberry Pi:

Cuando trabajamos, necesitamos escribir el código del controlador y luego compilar el código del controlador, pero la compilación del código del controlador requiere unaKernel precompilado, Compila el kernelDebe estar configurado

El objetivo final de la configuración generará un archivo .config, que le indica al Makefile que organice las cosas útiles en el kernel.

El fabricante está equipado con el código fuente del kernel de Linux: por ejemplo, si compra una Raspberry Pi, el fabricante le dará el
código fuente del kernel de Linux Raspberry Pi . Después de obtener el código fuente, este contiene el código fuente del fabricante.

La primera forma:

cp 厂家.config .config
find . -name *_defconfig
找到:
./arch/arm/configs/bcm2709_defconfig

La segunda forma:

make menuconfig   //一项项配置,通常基于厂家的config来配置

La tercera forma:

La propia familia del fabricante: hágalo todo usted mismo

¿Cómo configurar el kernel de Linux Raspberry Pi?

método uno:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
//用来配置,指定编译器

La función de este comando esObtenga 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.
Inserte la descripción de la imagen aquí
Darse cuenta de cambiar manufacturer.config a, config

Método 2:
agregue un controlador para
instalar las bibliotecas necesarias:

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

Después de la instalación:

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

Inserte la descripción de la imagen aquí
Conduce dos métodos de carga:

*: Compila en el kernel ----- zImage contiene el controlador.
METRO: El archivo del controlador xxx.ko se genera en el modo de módulo, después de que se inicia el sistema, a través del comando
inmosd xxx.ko carga

** Método 3: ** Ignorar temporalmente

3. Compilación del kernel de Linux:

编译:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs 2>&1 | tee build.log
//arm架构,内核7,j4:指定用多少电脑资源编译,
//zImage:生成内核镜像
//modules:生成驱动模块
//dtbs:生成配置文件

Compilar en n proceso. Si no se especifica el número de procesos, se compilará como un solo proceso de forma predeterminada.
Inserte la descripción de la imagen aquíUna vez que el kernel se compila correctamente, puede ver que hay más vmlinux en el árbol de fuentes, si falla, no existe tal archivo.
Después del éxito, zImage es la imagen de destino que necesitamos

cd arch/arm
cd boot
ls

Inserte la descripción de la imagen aquí

3. Copie la imagen del kernel de Linux en Raspberry Pi e inicie el nuevo kernel.

Empaque el archivo zImage:

Utilice las herramientas del paquete de código fuente de Linux directamente:

./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img

Genera uno en este directoriokernel_new.imgArchivo, este archivo es el archivo que se colocará en la tarjeta SD.
Nota: ¡Muchos lugares en Internet dicen que el uso de herramientas / mkimage / imagetool-uncompressd.py no funciona! !

Inserte la descripción de la imagen aquí
Copie la imagen:
1. Apague la Raspberry Pi, saque la tarjeta SD, use un lector de tarjetas para insertar la computadora y conéctese a la máquina virtual.

dmesg    //显示可移动设备信息

Inserte la descripción de la imagen aquí

cd  //回到根目录
mkdir data1
mkdir data2
//数据拷贝;创建两个文件夹,挂载U盘
sudo mount /dev/sdb1 data1//一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;
sudo mount /dev/sdb2 data2//一个是ext4分区,也就是系统的根目录分区
//  sudo umount /dev/sdb1   //取消挂载
//data1:U盘数据   data2:根目录数据

Inserte la descripción de la imagen aquí
data2:Inserte la descripción de la imagen aquí

Instalar módulos:

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/dazai/data2 modules_install

Instale los archivos del controlador del dispositivo: interfaz hdmi usb WiFi io, etc .;
Inserte la descripción de la imagen aquí

Actualice el archivo kernel.img:

Nota: Nombre del espejo: kernel7.img

cd data1
ls
//可以看到kernel7.img 文件
cp  kernel7.img  kernel7OLD.img//做一个备份

Inserte la descripción de la imagen aquí
Luego copie la compilación recién generada en data1 y asígnele un nombre:kernel7.img

cp kernel_new.img  /home/dazai/data1/kernel7.img

md5sum kernel_new.img//检查cp是否成功
md5sum /home/dazai/data1/kernel7.img

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
La copia fue exitosa.

Copie otros archivos relacionados:

cp arch/arm/boot/dts/.*dtb* /home/dazai/data1/
cp arch/arm/boot/dts/overlays/.*dtb* /home/dazai/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/dazai/data1/overlays/

Después de eso, Ubuntu desconecta el procesamiento de la tarjeta SD y la envía a Windows para capturarla.
Restaurar:
Inserte la descripción de la imagen aquí
Después: inserte la tarjeta SD nuevamente en la Raspberry Pi e
inicie sesión a través del puerto serie para ver el proceso de inicio.
Ingrese al terminal Raspberry Pi:

 uname -r

Inserte la descripción de la imagen aquí
La versión del kernel ha cambiado.
La configuración, compilación y trasplante del kernel de Raspberry Pi fue exitosa.
Estas operaciones provienen de:
La compilación del código del controlador requiere un kernel precompilado

Artículo de referencia:
Raspberry Pi-Kernel Development-Instrucciones para descargar el código, compilar y reemplazar el kernel

Supongo que te gusta

Origin blog.csdn.net/weixin_40734514/article/details/108730597
Recomendado
Clasificación