为树莓派4编译64位的内核

树莓派从3代开始就已经是64位的CPU了,64位的CPU当然要使用64位的系统了。但是即便性能更强大的树莓派4都已经发布两三个月了,树莓派官方也没有放出64位的系统,
我想这可能是为了照顾3代以前的树莓派吧,毕竟一个系统要适配所有的产品,同时系统升级到64位,对于树莓派的整个软件生态来说都是一次改头换面的大更新,树莓派基金会作为一个非营利性的组织,精力可能有点不够,所以官方的64位系统还得再等等。
不过如果你网上搜索 “树莓派 64位系统”, 会发现现在已经有很多非官方的64位系统了,这是因为树莓派的内核是开源的,64位的内核是可以从源码编译的,所以网上的所有的树莓派64位系统,包括所谓的 “全球首发”的64位debain,
都是从树莓派的Linux内核源码编译来的。

对于网上那些魔改内核的64位系统,不做评价。但对于处女座有强迫症的人来说,要想体验到真正原滋原味的树莓派64位系统,还是得自己动手从头编译。
本文背景即基于此。树莓派官方有一篇关于内核编译的文章:kernel building,
作为官方的教程,肯定是很详细的,但是这篇是针对32位内核的,所以我重新梳理一下编译64位内核的过程。

先说一下编译环境:

主机:archlinux x86_64

需要的软件:
make
git
aarch64交叉编译工具: aarch64-linux-gnu-gcc
flex, libssl-dev, vbuild-essential,bison等基础构建工具大部分系统都是会安装的,编译时缺哪一个安装哪一个。

对于archlinux来说,这些软件局可以使用pacman安装。

编译环境的搭建不多说,都是很简单的,aarch64-linux-gnu-gcc可以手动下载压缩包解压,把路径添加到环境变量,或者使用apt, yum等包管理安装。

克隆树莓派内核源码:

1
git clone -b rpi-5.3.y --depth=1 https://github.com/raspberrypi/linux.git raspberrypi-linux

-b 选择分支,选择了最新的5.3,默认的是4.19,–depth=1 只克隆最新的一次commit,由于只是编译,所以不必把这个仓库都完整的克隆下来(整个仓库有十几个G大小)。
有哪些分支可以很容易在github上看到:

代码将会克隆到raspberrypi-linux目录,

进入这个目录:

1
cd raspberrypi-linux

先进行一些编译参数设置:也就是内核调参,大部分的内核魔改都基于此处,
生成默认的内核配置文件:
对于编译树莓派4的64位内核来说,执行:

1
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig

执行该命令后会在raspberrypi-linux的目录下生成一个.config文件,打开是一项项的linux内核配置,
可以根据自己的需要修改各项配置,比如开启kvm支持,取消部分不必要的驱动达到裁剪内核的目的。
关于内核配置,一本书可能都说不完。使用默认配置即可。
如需修改内核配置可以直接编辑.config文件,设置各项的参数值,也可以执行一下命令:

1
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig

有一个简单的GUI界面来修改内核配置,相信装过gentoo的人对此不会陌生。

开始编译
输入以下命令:
1

1
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs -j6

这里的-j选项是开启多线程编译,加快编译速度,一般为CPU数量的1.5倍以内,在树莓派上编译设置为4就好了。

如果没什么问题,可以去喝杯茶。

编译完毕,将内核模块安装进树莓派的系统内:

1
sudo make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/mnt/rootfs modules_install

/mnt/rootfs 是树莓派根目录所在的路径,我这里把装有树莓派系统的tf卡的根目录挂载在了/mnt/rootfs, 所以就把内核安装进这个目录

再把内核的其他文件手动复制进树莓派系统的/boot下的指定目录(tf卡中只有几十兆的那个分区,我这里挂载到了本机的/mnt/boot):
复制编译好的内核:

1
sudo cp arch/arm64/boot/Image /mnt/boot/kernel8.img

复制不同版本的树莓派的dtb文件到树莓派系统的/boot:。

1
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /mnt/boot

复制overlays中的文件到树莓派系统的/boot/overlays, README也复制一下:

1
2
sudo cp arch/arm64/boot/dts/overlays/*.dtb* /mnt/loop0p1/overlays/
sudo cp arch/arm/boot/dts/overlays/README mnt/fat32/overlays/

最后在树莓派的/boot/config.txt文件中注意指定启动内核为新编译的内核,即kernel8.img:

1
kernel=kernel8.img

至此,原滋原味的64位内核就编译安装完成了。
如果树莓派运行着64位的系统,以上操作也可以在树莓派上完成,就不需要交叉编译工具,直接编译即可。
在树莓派上编译内核的话可能要喝十杯茶了。

原文:大专栏  为树莓派4编译64位的内核


猜你喜欢

转载自www.cnblogs.com/sanxiandoupi/p/11645340.html