树莓派4B交叉编译更新Linux内核
参考:https://www.raspberrypi.com/documentation/computers/linux_kernel.html#kernel
以下基本全文复制官方教程。
原本树莓派4b运行的就是ubuntu 24.04,通过uname -m得到aarch64架构。因此选择64位选项
下载内核源码
下载最新树莓派内核的源代码:
1 | git clone --depth=1 https://github.com/raspberrypi/linux |
说明:--depth=1 表示 只下载最新的一层提交记录(commit)
本地构建内核
安装依赖项
安装构建依赖项:
1 | sudo apt install bc bison flex libssl-dev make libc6-dev libncurses5-dev |
工具说明 bc bison flex libssl-dev make 是要安装的具体软件包,各自功能如下:
bc:一款支持高精度计算的命令行计算器,常用于脚本中进行数学运算。bison:语法分析器生成器,配合flex可用于开发编译器、解释器等需要语法解析的工具。flex:词法分析器生成器,用于将输入的字符流转换为结构化的 “令牌(token)”。libssl-dev:OpenSSL 库的开发文件。make:make构建自动化工具。
安装交叉编译工具链
要安装用于构建 64 位内核的 64 位工具链,请运行以下命令:
1
sudo apt install crossbuild-essential-arm64
要安装用于构建 32 位内核的 32 位工具链,请运行以下命令:
1
sudo apt install crossbuild-essential-armhf
配置内核
对于64位的树莓派4b来说,需要进行如下配置:
1 | cd linux |
编译内核
运行以下命令构建 64 位内核:
1
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
运行以下命令构建 32 位内核:
1
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
安装内核
确认启动介质
将SD卡插入PC,执行lsblk命令,查看是否有sdb等信息。在我的电脑上是sdd
1 | sdd 8:48 1 29.7G 0 disk |
/media/book/system-boot 对应 Raspberry Pi 启动分区;
/media/book/writable 对应根文件系统
可以设置环境变量,方便后续操作
1 | export ARCH=arm64 |
安装内核模块到根分区
1 | sudo env PATH=$PATH make -j"$(nproc)" \ |
这一步会在 /media/book/writable/lib/modules/ 下面生成你新编译的模块目录,例如:
1 | /media/book/writable/lib/modules/6.6.32-v8+/ |
备份旧内核并复制新内核和设备树到 /system-boot
💡 Ubuntu 的启动分区通常包含
vmlinuz,initrd.img,config.txt,cmdline.txt等。
我们建议把自己的内核命名为kernel8.img(Pi 4 的标准命名),并在config.txt里指明。
1️⃣ 备份现有启动文件:
1 | sudo cp -a $BOOT/kernel8.img $BOOT/kernel8-backup.img 2>/dev/null || true |
2️⃣ 复制新编译的内核镜像:
1 | sudo cp -a arch/arm64/boot/Image $BOOT/kernel8.img |
3️⃣ 复制设备树文件(DTB 和 overlays):
1 | sudo cp -a arch/arm64/boot/dts/broadcom/*.dtb $BOOT/ |
确保 config.txt 正确
打开 /media/book/system-boot/config.txt,检查或添加:
1 | kernel=kernel8.img |
如果你用了压缩内核或自定义文件名,必须在这里改成一致的名字。
同步并卸载分区
复制完成后一定要卸载,否则数据可能没写入卡:
1 | sync |
⚡ 六、启动验证
把这张卡插回树莓派 4B,启动后用串口或 SSH 登录执行:
1 | uname -a |
如果显示你的新内核版本(例如你设置的 -v8 后缀),说明更新成功 🎉
验证模块是否加载:
1 | ls /lib/modules |
应该能看到与你新内核版本号对应的目录。