Raspberry Pi kernel也是基于linux内核的,版本在不断的更新迭代,当前写作时间看github的版本号已经从3.27~6.2了。如果你有以下需求,可能会涉及到编译源码:
这里参考官文提供2种方法编译源码:Raspberry PI开发板本地编译和PC交叉编译。
注:基于2023-02-07的官方文档
启动开发板,开启ssh和wifi远程登陆,参考前面几篇文章。
1.安装依赖
sudo apt install git bc bison flex libssl-dev make
2.下载对应版本的源代码
这里通过git获取不同分支branch源码,branch一般为版本号(下图说明),或者直接下载zip压缩包,然后传入到板中。
git clone --depth=1 --branch https://github.com/raspberrypi/linux
3.环境配置
不同型号的Raspberry采用不同的config:
cd linux
KERNEL=kernel
make bcmrpi_defconfig
cd linux
KERNEL=kernel7
make bcm2709_defconfig
cd linux
KERNEL=kernel7l
make bcm2711_defconfig
cd linux
KERNEL=kernel8
make bcm2711_defconfig
4.编译
编译会耗时比较久,生成系统必须的镜像,包括kernel、modules和dtb(设备树),然后覆盖掉系统原有的文件:
make -j4 zImage modules dtbs
sudo make modules_install
编译32位系统和64位系统生成文件的目录有些差异,32位在arm目录,64位在arm64,覆盖时候要选择正确:
# 32位生成路径
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo cp arch/arm/boot/zImage /boot/$KERNEL.img
# 64位生成路径
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /boot/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm64/boot/dts/overlays/README /boot/overlays/
sudo cp arch/arm64/boot/Image.gz /boot/$KERNEL.img
5.验证
上面步骤操作完后,可以重启确认版本号和日期是否有更新,通过uname -a进行查看:
在板子上编译会很慢,可以在PC上安装vmware进行编译。
环境:VMware 16.2.4;ubuntu 22.04
1.安装依赖
sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
2.安装交叉编译链
// 编译32位系统
sudo apt install crossbuild-essential-armhf
// 编译64位系统
sudo apt install crossbuild-essential-arm64
3.获取源码方式同本地方式
4.编译
Raspberry Pi 1, Zero和 Zero W型号:
cd linux
KERNEL=kernel
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
Raspberry Pi 2, 3, 3+ 和Zero 2 W型号:
cd linux
KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
Raspberry Pi 4 和 400型号:
cd linux
KERNEL=kernel7l
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
Raspberry Pi 3, 3+, 4, 400和Zero 2 W型号:
cd linux
KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
如果只想编译默认的镜像,可以直接跳过该步骤。如果想打开某些宏,需要在原有的config中进行编辑。
上一步中的make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- xxx作用是采用默认的配置文件,会生成.config文件。如果想修改,通过命令:
// 32位
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
// 64位
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
编译后会生成镜像,需要复制到SD卡或者U盘。这里是针对Raspberry Pi 4B进行的说明。
U盘插入PC,需要切换到vmware中,断开与主机的连接,具体步骤:
然后通过:lsblk,查看U盘分区,一般U盘会有2个分区:Boot和Root。
Boot分区:FAT格式,用于存放bootloader文件、kernel镜像、cmdline和confog配置文件;
Root分区:ext4格式,根文件系统分区。
1.挂载U盘分区到vmware
主要作用是安装编译的模块,创建2个文件夹,分别挂载boot和root分区:
mkdir mnt
mkdir mnt/fat32
mkdir mnt/ext4
sudo mount /dev/sdb1 mnt/fat32
sudo mount /dev/sdb2 mnt/ext4
2.安装kernel模块到U盘
// 32位
sudo env PATH=$PATH make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=mnt/ext4 modules_install
// 64位
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=mnt/ext4 modules_install
3.复制kernel和dtb到U盘
sudo cp arch/arm/boot/zImage mnt/fat32/$KERNEL.img
sudo cp arch/arm/boot/dts/*.dtb mnt/fat32/
sudo cp arch/arm/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
sudo cp arch/arm/boot/dts/overlays/README mnt/fat32/overlays/
4.卸载分区
sudo umount mnt/fat32
sudo umount mnt/ext4
5.U盘插入开发板开机即可使用
页面更新:2024-04-24
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号