树莓派4B初级5-源码编译Raspberry OS

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

如果只想编译默认的镜像,可以直接跳过该步骤。如果想打开某些宏,需要在原有的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中,断开与主机的连接,具体步骤:

切换U盘到vmware

然后通过:lsblk,查看U盘分区,一般U盘会有2个分区:Boot和Root。

U盘分区

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-10

标签:源码   分区   版本号   路径   模块   步骤   型号   版本   文件   系统

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top