Raspberry 4B之编译内核

本文档详细介绍了如何在Raspberry Pi 4B上从源代码编译内核版本4.20.x。首先从官方仓库克隆内核源代码,然后安装交叉编译工具。接着,使用arm架构的bcm2711_config配置内核,并根据需求进行自定义配置。在编译过程中,解决gcc高版本可能出现的错误。完成编译后,制作dtb包,安装内核和头文件包,替换dtb文件和内核映像,并修改配置文件以确保系统启动。最后,文章提供了整个过程的总结,便于参考和复用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Raspberry 4B之编译内核

起因:因为官方镜像内核版本是5.x版本,比较高,需要使用4.x版本的内核做日常使用和学习用,遂进行此操作。
目标内核版本: 4.20.x

步骤:
1.下载内核:
官方内核地址(raspberry维护非linux组织)
https://github.com/raspberrypi/linux

sudo apt-get install git
git clone -b rpi-4.20.y --depth 1 https://github.com/raspberrypi/linux.git

2.安装编译交叉工具

sudo apt-get install  -y gcc-arm-linux-gnueabihf

3.使用的arm架构下的bcm2711_config,若要使用arm64位架构的默认配置文件,可自行更改

make -j8 0=build ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig

4.自己再进行添加自己想要的配置(或减少)

make -j8 0=build ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

注:若命令有出错的地方,提示缺少哪些包,自行查找安装即可

apt-cache search "缺少的文件" #会查找出提供功能的包,然后安装即可
  1. 编译
make -j8 0=build ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bzImage modules #-j8参数是使用的线程数编译,比如-j4就是使用4线程编译

或者可以编译成deb包的形式,后面使用方便

make -j8 0=build ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- deb-pkg

注:上面两个方法在使用gcc >= 10版本时会出错:

multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here

需要手动注销scripts/dtc/dtc-lexer.l中对yylloc的声明,为什么改这个文件不改.c文件呢,主要原因是.c文件是这个文件生成的,在编译安装包的形式中体现的更加明显

vim scripts/dtc/dtc-lexer.l

如下图41行:

6.编译dtb

make -j8 0=build ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs 

7.进入目录将编译好的dtb打包

cd arch/arm/boot
tar cvf dtb.tar dts/b*.dtb dts/overlays/*.dtb 

8.接下来就很简单,只需要安装两个安装包,然后将dtb.tar解压,将里面的dtb文件copy到/boot下面,再将/boot下的内核文件进行改名操作

sudo dpkg -i linux-image-4.20.17-v7l+_4.20.17-v7l+-1_armhf.deb 
sudo dpkg -i linux-headers-4.20.17-v7l+_4.20.17-v7l+-1_armhf.deb 
tar xvf dtb.tar
cd dtc
sudo cp -rf * /boot
sudo mv vmlinuz-4.20.17-v7l+ kernel7l.img 

9.最后的处理工作。
只是这样的话,重启可能起不来,需要在/boot/config.txt中关闭"dtoverlay=vc4-fkms-v3d"选项。如下图61行所示:
在这里插入图片描述
然后大工搞成!
特此贴为记录,方便自己也方便他人。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值