树莓派4B修改内核源码并编译
我是采用本地编译的方式在树莓派4B上完成内核源码的修改和编译,这样可以简化在PC上进行交叉编译的流程,但相对来说耗时会长一些。
一、在Github上下载Linux内核源码
首先在树莓派中选择一个下载内核源码,我是选择在/root目录下安装,所以执行以下命令:
cd /root
git clone --depth=1 https://github.com/raspberrypi/linux --branch rpi-6.1.y
注:根据自己需求选择下载内核源码版本,如需要下载6.1.y的版本就根据以上进行操作。
二、安装git和树莓派内核编译所需的依赖库
一般树莓派都会安装以下文件,但以防万一还是执行命令安装一次,指令如下:
sudo apt install bc git bison flex libssl-dev make
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install zlib1g:i386
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5
三、完成自己所需要的源码修改
在执行完第一步后已经可以看到在/root目录下多出了一个linux文件夹,里面就是下载的源码,这时根据自己的需求完成代码的修改。
四、配置内核
根据树莓派的实际型号进行准备默认配置,由于我使用的树莓派型号为4B,所以根据以下命令进行配置:
pi@raspberrypi:/root $ cd linux
pi@raspberrypi:/root/linux $ KERNEL=kernel8
pi@raspberrypi:/root/linux $ make bcm2711_defconfig
注:如果树莓派使用的系统是64位系统的话为KERNEL=kernel8,若为其他版本则为KERNEL=kernel7
如果需要对内核进行其他配置,则可以利用如下命令实现:
pi@raspberrypi:/root/linux $ make menuconfig
执行命令后会出现一个可视化的内核配置窗口,根据自己的需求完成修改并保存,退出窗口后会发现已经生成了.config文件或旧的.config文件已经被更新。
注:配置好后记得save,并且根据命令行提示执行make,这一步时间很长。如果权限不够就执行sudo make,添加 -j4可以提高速度
(如使用命令sudo make -j4),执行完之后会在/arch/arm64/boot路径生成Image文件。
有些文章可能会说这一步直接生成zImage文件,这是因为在树莓派2及以上版本中使用了更现代化的启动方式(Device Tree),不再需要使用zImage格式的内核镜像。
五、编译与安装
如果参考上一步中内容生成的是Image文件在执行完make指令后内核就已经编译完成,在源码顶层文件夹包含Makefile文件的路径中执行
sudo make modules_install
进行驱动模块安装即可,再将arch/arm64/boot中生成的Image复制到根目录的/boot分区,并重命名为 kernel8.img。
最后更新引导配置文件:
sudo nano /boot/firmware/config.txt
找到或添加以下行:
kernel=kernel8.img
保存并退出nano,然后重新启动树莓派即可,执行命令sudo reboot重启树莓派。
完成重启后使用以下命令:
uname -r
会发现内核版本已经更新,此时说明树莓派的内核已经更新完成。