树莓派Linux内核交叉编译及部署

获取内核源码及工具

源码链接:

https://github.com/raspberrypi/linux

工具链接:

https://github.com/raspberrypi/tools

patch链接:

https://www.kernel.org/pub/linux/kernel/projects/rt/

源码在git上的master的版本是4.9,可直接复制git的链接

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

如果想下载其他版本的内核,比如想下载5.1.y版本内核,则使用如下方式

git clone -b rpi-5.1.y https://github.com/raspberrypi/linux.git

tools工具则是一些交叉编译所使用的编译器

git clone https://github.com/raspberrypi/tools.git

下载patch,要下载和你将要编译的内核版本一致的patch。

扫描二维码关注公众号,回复: 10745941 查看本文章

以上是使用git下载,在国内的下载速度是比较慢的。如果想高速下载,可以使用迅雷。方法是复制浏览器顶部链接,复制到迅雷进行搜索

然后下载压缩版本,我在迅雷里的下载速度达到了3m,速度还可以。

下载完成后全部解压。

打patch

我们对Linux内核添加补丁,这个过程就是打patch。将上面下载的patch压缩版解压到对应的内核文件夹下,并执行

cat *.patch | patch p1

配置交叉编译环境

这个要用到我们下载的tools。使用git方式下载的文件夹名为tools;下载压缩包版本直接解压的文件夹名为tool-master。我们以tools为命名来讲解。

ubuntu系统位数查看

$ getconf LONG_BIT
64

如果你的ubuntu系统位数为32位,执行

echo PATH=\$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin >> ~/.bashrc
source ~/.bashrc

如果是64位,执行

echo PATH=\$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin >> ~/.bashrc
source ~/.bashrc

​​​​并且64位系统也要安装32位的编译器的支持​​​​​​​

sudo apt-get install lib32stdc++6
sudo apt-get install libc6:i386
sudo apt-get install lib32z1

进入Linux源码目录,进行交叉编译的配置​​​​​​​

KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig

编译

进入Linux源码目录,执行

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

或者你的处理器有多个线程,可以使用-jn来加速编译

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4

这个过程应该要持续几十分钟,取决于电脑运行速度。喝杯茶等一下吧~
 

部署到SD卡

首先将插入装有系统的内存卡读卡器,并在虚拟机内挂载。

查看分区在/dev下的名称

lsblk

sdc1是boot分区,sdc2是rootfs分区。

接下来进行挂载。首先在/mnt下创建两个文件夹​​​​​​​

sudo mkdir /mnt/fat32
sudo mkdir /mnt/ext4

然后将sdc1和sdc2分别挂载在fat32和ext4​​​​​​​

sudo mount /dev/sdc1 /mnt/fat32
sudo mount /dev/sdc2 /mnt/ext4

首先安装内核模块到/mnt/ext4,定位到内核源码文件夹下,执行

sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/mnt/ext4 modules_install

接下来的操作都是对boot分区进行,也就是/mnt/fat32

备份原本的内核,本次调试发现,kernel7.img是树莓派所使用的内核,所以我们对树莓派的kernel7.img进行备份

mv kernel7.img kernel7-pre.img

将内核源码中的zImage重命名为kernel7.img(所在位置:linux-rpi-4.9.y/arch/arm/boot)

mv zImage kernel7.img

或者使用tools下的工具进行类型转换​​​​​​​

cd tools/mkimage
./imagetool-uncompressed.py ~/linux-rpi-4.9.y/arch/arm/boot/zImage

这样生成的名称为kernel.img,将他重命名为kernel7.img

mv kernel.img kernel7.img

**********************************************

如果出现python编译的错

/usr/bin/env python\r no such file or directory

则是由于windows下编写的python代码不符合Linux下的规范,使用以下方式进行转码

sudo apt-get install dos2unix

dos2unix <filename>

**********************************************

将生成的kernel复制到/mnt/fat32下​​​​​​​

sudo cp ~/linux-rpi-4.9.y/arch/arm/boot/kernel7.img /mnt/fat32
或者
sudo cp ~/tools/mkimage/kernel7.img /mnt/fat32

复制.dts文件和README文件​​​​​​​

sudo cp ~/linux-rpi-4.9.y/arch/arm/boot/dts/*.dtb /mnt/fat32
sudo cp ~/linux-rpi-4.9.yarch/arm/boot/dts/overlays/README /mnt/fat32/overlays

至此树莓派内核更新完成,插入到树莓派中试一试

发布了45 篇原创文章 · 获赞 63 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Groot_Lee/article/details/105333542