树莓派CM4 Raspberry Pi OS下的内核编译升级操作
最近在调试基于树莓派CM4的PCIE WIFI网卡发射AP的功能,由于供应商提供的网卡驱动有内核版本的限制,且在尝试下确实出现了不兼容的情况,不得已对树莓派进行编译替换内核版本的操作。
操作的软硬件环境如下:
树莓派硬件信息:树莓派CM4 4G+32G v1.1
树莓派系统镜像:2023-02-21-raspios-bullseye-arm64_lite.img
linux kernel:5.15.84-v8 -> 5.15.92-v8
⽬标主机,编译主机为同⼀块树莓派CM4,不采⽤交叉编译的⽅式
获取linux内核版本信息
在终端执⾏如下指令获取系统内核版本。
1 | uname -r |
操作结果如下图,可知树莓派升级前实际使⽤内核版本为5.15.84 。
linux内核源码编译
下载内核源码
树莓派对应的内核源码在https://github.com/raspberrypi/linux 上进⾏管理,需要使用git工具将内核源码下载。
如果使用的是lite版本系统,默认未安装git工具,通过apt-get安装git工具。
1 | apt-get install git |
执行clone拉去对应版本的内核源码(如下拉取 kernel 5.15的内核源码)
1 | git clone --depth=1 --branch rpi-5.15.y https://github.com/raspberrypi/linux |
执行结果如图:
如果遇到下载过程中报错,可以尝试通过网页上打包下载的方式下载源码,并拷贝到树莓派进行解压缩。
编译内核源码
生成.config编译配置文件
进入源码目录,并执行如下指令指定编译工具链及相关配置信息。
1 | cd linux |
执行成功结果如下;
异常解决:
如果提示“flex:not found”,则需要安装flex。
执行如下指令安装flex。
1 | apt-get install flex |
如果提示“bison:not found”,则需要安装bison。
执行如下指令安装bison。
1 | apt-get install bison |
编译dtb
执行如下编译指令编译生成dtb相关文件。
1 | make -j4 dtbs |
正常执行结果如下:
编译modules
执行如下指令编译内核modules。
1 | make -j4 modules |
该步骤编译执行时间较长,正常执行结果如下图。
异常解决:
如果在编译过程中报错“fatal error: openssl/bio.h: No such file or directory”及相关openssl内容,考虑系统未安装openssl。
可通过如下指令安装openssl
1 | apt-get install opensssl-dev |
如果在编译过程中报错“bc: not found“,考虑系统未安装bc工具
可通过如下指令安装bc
1 | apt-get install bc |
编译Image
1 | make -j4 Image |
编译完成后终端显示内容如下:
替换内核文件
安装modules
在内核源码根目录下执行如下指令,安装modules到系统
1 | sudo make modules_install |
安装项目较多,install结束后终端显示内容如下:
替换设备树相关文件
在内核源码根目录下执行如下操作,替换编译⽣成的dtb⾄设备boot文件夹。
1 | sudo cp arch/arm64/boot/dts/broadcom/*.dtb /boot/ |
替换内核镜像文件
在内核编译根⽬录执⾏如下操作,备份并且替换内核img⽂件。
1 | sudo cp /boot/kernel8.img /boot/kernel8_old.img |
执行上述替换指令后对系统进行重启。
1 | sudo reboot |
确认更新后内核版本
在终端执⾏如下指令获取系统内核版本 。
1 | uname -r |
操作结果如下图,可知树莓派CM4内核版本已更新为5.15.92,内核更新成功。