2021SC@SDUSC
详情请见官方:https://www.raspberrypi.org/documentation/linux/kernel/building.md

构建内核
操作系统附带的默认编译器和链接器被配置为构建在该操作系统上运行的可执行文件——它们是本机工具——但不一定是这种情况。交叉编译器被配置为为运行构建过程的目标之外的目标构建代码,使用它称为交叉编译。
Raspberry Pi 内核的交叉编译很有用,原因有二:
-
它允许使用 32 位操作系统构建 64 位内核,反之亦然,并且
-
即使是普通的笔记本电脑也可以比 Pi 本身更快地交叉编译 Pi 内核。
1
、在编译前运行
sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
安装所需工具包

运行 sudo apt install crossbuild-essential-arm64,为 64 位内核安装 64 位工具链
2
、到
https://github.com/raspberrypi/linux
下载内核的源码,并将其解压放到
Linux
目录
中,或是在 Linux 中直接运行 sudo git clone
https://github.com/raspberrypi/linux

3、跟随下面的命令来创建源文件和设备树文件
扫描二维码关注公众号,回复:
13306494 查看本文章

cd linux-rpi-5.10.y #
根据自己的目录运行
KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig

4
、运行命令来创建
64
位内核文件
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
Note
:为了加快多处理器系统上的编译速度,并在单处理器系统上得到一些改进,
像编译
u-boot
一样,可以使用
-j n
(
n
为随意的数字,如
-j 4
)。

5
、直接将内核移到
SD
卡上
首先在
linux
目录下创建用来
mount
的目录,方便后面的移植文件。
mkdir mnt
mkdir mnt/fat32
mkdir mnt/ext4


运行命令,挂载
sudo mount /dev/sdb1 mnt/fat32
sudo mount /dev/sdb2 mnt/ext4
接下来,运行命令来生成内核模块
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu
INSTALL_MOD_PATH=mnt/ext4 modules_install(这个命令可以去官方文档粘贴,太长了)
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=mnt/ext4 modules_install
最后,把内核,模块和设备树移植到
SD 卡,确保备份旧内核:
sudo cp arch/arm64/boot/Image mnt/fat32/
sudo cp arch/arm64/boot/dts/broadcom/*.dtb mnt/fat32/
sudo mkdir mnt/fat32/overlays
sudo cp arch/arm64/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
sudo cp arch/arm64/boot/dts/overlays/README mnt/fat32/overlays/

然后内核移植完了。