参考文献:
Raspberry Pi 文档 - Linux 内核 //官网文档(靠谱有效亲测)
一、下载源码并解压
1.下载链接:
这个是我树莓派的版本:
2.解压源码
unzip linux-rpi-6.1.y.zip
3.安装所需的依赖项
sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
4.安装所需工具链
- Linaro Releases 不同版本的交叉编译链
sudo apt install crossbuild-essential-armhf //32位
sudo apt install crossbuild-essential-arm64 //64位
5.配置源代码
32位:
对于 Raspberry Pi 2、3、3+ 和零 2 W,以及 Raspberry Pi 计算模块 3 和 3+:
cd linux-rpi-6.1.y
KERNEL=kernel7 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
64位:
对于 Raspberry Pi 3、3+、4、400 和零 2 W,以及 Raspberry Pi 计算模块 3、3+ 和 4:
cd linux KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
6.编译源代码:
大概需要20分钟
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs //32位
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs //64位
#make:构建 Linux 内核的工具,通常在 Linux 内核源代码目录中使用。
#ARCH=arm: 指定要构建的目标平台为 ARM,以便选择正确的编译选项和工具链。
#CROSS_COMPILE=arm-linux-gnueabihf-: 指定交叉编译工具链的前缀,以便在构建过程中使用正确的编译器##和工具。
#zImage: 构建 Linux 内核的镜像,该镜像是经过压缩的内核二进制文件。
#modules: 构建 Linux 内核模块,这些模块可以加载到运行中的内核中以添加新的功能或驱动程序。
#dtbs: 构#建设备树二进制文件(.dtb)。
二、虚拟机挂载SD &&内核模块安装到 SD 卡
1.查看设备节点
lsblk //sdb1 和 sdb2
2.挂载节点
作为文件系统(引导)分区,以及文件系统(根)分区。sdb1 -> FAT sdb -> 2ext4
首先挂载这些,根据需要调整分区号:
在用户目录下创建文件,用来挂载
mkdir mnt/fat32 cd mnt mkdir ext4
sudo mount /dev/sdb1 ~/mnt/fat32
sudo mount /dev/sdb2 ~/mnt/ext4
3.新构建的内核映像文件
对于 32 位
sudo env PATH=$PATH make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=~/mnt/ext4 modules_install
或者: sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/lh/mnt/ext4 modules_install
#INSTALL_MOD_PATH : 根据具体路径来
对于 64 位
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=mnt/ext4 modules_install
4.复制内核和设备树到 SD 卡上,确保备份旧内核
目录
对于 32 位
sudo cp /mnt/fat32/kernel7.img ~/mnt/fat32/kernel7-backup.img
//:备份原始的内核映像文件。
sudo cp arch/arm/boot/zImage ~/mnt/fat32/kernel7.img
//将新构建的内核映像文件复制到 Raspberry Pi 的引导分区中。
sudo cp arch/arm/boot/dts/*.dtb ~/mnt/fat32/
//将新构建的设备树二进制文件复制到 Raspberry Pi 的引导分区中。
sudo cp arch/arm/boot/dts/overlays/*.dtb* ~/mnt/fat32/overlays/
//将新构建的设备树叠加文件复制到 Raspberry Pi 的引导分区中的 overlays 目录中。
sudo cp arch/arm/boot/dts/overlays/README ~/mnt/fat32/overlays/
//将设备树叠加文件的 README 文件复制到 Raspberry Pi 的引导分区中的 overlays 目录中,以提供有关如何使用它们的信息。
sudo umount ~/mnt/fat32
//卸载 Raspberry Pi 的引导分区。
sudo umount ~/mnt/ext4
//卸载 Raspberry Pi 的根文件系统分区。
对于 64 位
sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img
sudo cp arch/arm64/boot/Image mnt/fat32/$KERNEL.img
sudo cp arch/arm64/boot/dts/broadcom/*.dtb mnt/fat32/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
sudo cp arch/arm64/boot/dts/overlays/README mnt/fat32/overlays/
sudo umount mnt/fat32
sudo umount mnt/ext4
三、串口启动:
1.最后将以下内容加上,然后将SD卡插回树莓派 ,
2.见证效果
未构建内核之前:
构建之后: