通过这个文章记录一下如何在Ubuntu22.04编译树莓派CM4的kernel。
主要参考树莓派官网的方法,也总结了一些关于SD卡分区的知识。
1,虚拟机安装Ubuntu 22.04,就不介绍了。
2,先将树莓派官方系统烧录倒SD卡中,设备能正常启动运行。
3,在Ubuntu 22.04中安装相关程序
bash
sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
4,安装交叉编译工具
bash
sudo apt install crossbuild-essential-arm64
5,克隆最新的内核源码
bash
git clone --depth=1 https://github.com/raspberrypi/linux
6,定制内核编译文件
bash
cd linux
KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
7,如果无需修改内核配置,可用下面代码
bash
cd linux
KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
8,交叉编译Image, modules, dtbs
bash
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
9,拷贝文件到SD卡,检查SD卡分区
lsblk
sdb
sdb1
sdb2
10,挂载分区
bash
mkdir mnt
mkdir mnt/fat32
mkdir mnt/ext4
sudo mount /dev/sdb1 mnt/fat32
sudo mount /dev/sdb2 mnt/ext4
11,安装模块
bash
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=mnt/ext4 modules_install
12,备份kernel.img
bash
sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img
13,拷贝编译的kernel文件,需要注意,对应kernel8.img
bash
sudo cp arch/arm64/boot/Image mnt/fat32/kernel8.img
14,拷贝驱动
bash
sudo cp arch/arm64/boot/dts/broadcom/*.dtb mnt/fat32/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
sudo cp arch/arm64/boot/dts/overlays/README mnt/fat32/overlays/
15,卸载映射盘
bash
sudo umount mnt/fat32
sudo umount mnt/ext4
16,如果开机启动没有切换内核,可以在boot config.txt最后增加:
bash
arm_64bit=1 kernel=kernel8.img
17,重启后,查看内核版本
bash
uname -a