梳理树莓派4B内核交叉编译过程(Debian11自带编译器)

树莓派参考文档真多,感谢各位作者!

为编译树莓派内核,重新装了Debian11,又查了好几个文档,最后要结合起来才成功,干脆自己整理下。目标系统为raspbian 5.10。

1、在Debian的用户目录$HOME下新建文件夹raspberrypi,用于存放编译文件,进入该目录

2、 树莓派官方网址https://github.com/raspberrypi,选linux下载(右侧Code下拉有Download ZIP)

或以下方式获得文件(进入目录后执行cd $HOME/raspberrypi,会生成linux和tools两个目录)

sudo git clone git://github.com/raspberrypi/linux.git

sudo git clone git://github.com/raspberrypi/tools.git这个可以不用了,看第5点

最终结构如下:

~
└── raspberrypi
    ├── linux
    └── tools

3、安装编译环境

sudo apt-get install bc libncurses-dev libssl-dev build-essential kmod cpio flex bison

4、获取树莓派原内核配置

在树莓派中执行sudo modprobe configs

在/proc/找到原配置的压缩文件 config.gz

执行zcat config.gz > .config,会生成.config文件

将.config放到Debian自建目录的linux下(方法很多,可以顺便在树莓派上装samba)

5、配置交叉编译环境(可以跳到本点最后

Debian自建目录的tools下一共有5个不同版本的交叉编译工具

arm-rpi-4.9.3-linux-gnueabihf和gcc-linaro-arm-linux-gnueabihf-raspbian-x64是64位机器用的,每一个交叉编译工具的目录下都有bin目录进入,执行./arm-linux-gnueabihf-gcc -v可查看gcc版本。

( 参考https://blog.csdn.net/iefenghao/article/details/88815093

添加环境变量(和window的PATH一个意思,为了能找到程序,是否写到启动脚本/etc/bash.bashrc或/etc/profile里大家自己看,生效命令:source /etc/bash.bashrc)

经测试,64位debian11下只有arm-rpi-4.9.3-linux-gnueabihf可用:

export PATH=$PATH:$HOME/raspberrypi/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin

(这个gcc版本编译时会报错export PATH=$PATH:$HOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin)

(32位:export PATH=$PATH:$HOME/raspberrypi/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin 这条原文的路径有误)

最后在这:在看官方自带内核信息时猛然发现有新版本的交叉编译工具,

经过apt list gcc*arm*gnueabihf有没有很惊喜,挑个喜欢的装

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

安装后arm-linux-gnueabihf-gcc-10位于/usr/bin/下

cd /usr/bin

sudo ln -s arm-linux-gnueabihf-gcc-10 arm-linux-gnueabihf-gcc

建立链接方便后续使用

6、在同一终端的任意目录测试执行arm-linux-gnueabihf-gcc -v应该要可以显示版本号

注意:直接运行export配置PATH的方式在关闭终端后会失效(按5最后装的不用理会这个)

7、配置内核

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

实际就是要求arm-linux-gnueabihf-后面加gcc的命令可以运行(即要配置正确的tools路径)

ARCH=后面为目标的架构,树莓派为arm

空格后的menuconfig即是原来 make menuconfig的后半部

8、编译内核模块等

make  ARCH=arm  CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs(解释同上)

4核CPU的可以开4个线程

make  ARCH=arm  CROSS_COMPILE=arm-linux-gnueabihf- -j 4 zImage modules dtbs

多次编译的先make clean

9、安装模块(注意要root权限,使用sudo命令

如SD卡或U盘(19年4月以后的eeprom已经可以完全用U盘代替TF卡了)根目录挂载为/media/roofs,以下为一条命令

sudo make  ARCH=arm  CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/media/roofs modules_install

会安装在/media/roofs/lib/modules/5.10.63-v7l(版本号下)

10、安装dtbs

如SD卡或U盘boot目录(就是windows下可以读取到的盘fat32格式)挂载为/media/boot

进入linux目录(cd $HOME/raspberrypi/linux)

sudo cp arch/arm/boot/dts/*.dtb /media/boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /media/boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /media/boot/overlays/

11、生成树莓派可用内核

tools下的mkimage工具生成内核已不可用,需要mkknlimg

从官网查询到在5.2版本后的linux/cripts/mkknlimg工具也已被移除,就直接提取了一个,有知道新工具的帮留言告知下,谢谢!

https://download.csdn.net/download/ttham/29206209

下载到linux/scripts后进入目录赋于运行权限并运行(不能下载的看这里可直接复制代码linux/mkknlimg at rpi-5.2.y · raspberrypi/linux · GitHub

cd $HOME/linux/scripts

chmod 755 mkknlimg

./mkknlimg ../arch/arm/boot/zImage /media/boot/$KERNEL.img

编辑/media/boot/config.txt,加入kernel=kernel.img(上一行可以直接指定名称为kernel.img),如未加入据说

如果config.txt里没指定kernel参数,则默认是先后搜寻kernel8.img、kernel8-32.img、kernel7.img、kernel.img,分别对应ARMv8-aarch64、ARMv8-aarch32、ARMv7和之前版本的。

tools下的mkimage工具生成内核已不可用(留着旧版本参考)

sudo apt-get install python2,安装python2后运行下面命令

python2 $HOME/raspberrypi/tools/mkimage/imagetool-uncompressed.py $HOME/raspberrypi/linux/arch/arm/boot/zImage

在当前目录下会生成可用的内核文件kernel.img

然后把当前目录(假设为$HOME/raspberrypi/tools/mkimage/)生成的kernel.img替换掉Raspberry Pi的/boot目录下的kernel.img文件

sudo cp $HOME/raspberrypi/tools/mkimage/kernel.img /media/boot/kernel.img

12、解除SD卡或U盘挂载

umount /mnt/boot

umount /mnt/rootfs

13、插入测试成功

wifi模块加载已解决,有空再更

14、参考文档:

树莓派Linux内核编译_嵌入式-CSDN博客_树莓派编译内核

树莓派3b 编译内核之交叉编译_XFZH的博客-CSDN博客

【树莓派】交叉编译环境搭建_iefenghao的博客-CSDN博客_树莓派交叉编译环境

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值