6.8 KiB
内核编译
本文档介绍内核编译和更新的详细过程。操作目录:${WORKDIR}
须知:
当前只有 6.6 版本的树莓派内核同时支持树莓派 5 和树莓派 3B/3B+/4B/400,其他内核版本只支持树莓派 3B/3B+/4B/400。
下载内核源码
根据内核不同版本,需要下载不同仓库的不同分支:
-
6.6 内核
- openEuler 25.03:
git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-25.03 && cd raspberrypi-kernel - openEuler 24.09/24.03 LTS/24.03 LTS SP1/24.03 LTS SP2/24.03 LTS SP3:
git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b OLK-6.6 && cd raspberrypi-kernel - openEuler 25.09:
git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-25.09 && cd raspberrypi-kernel
- openEuler 25.03:
-
6.1 内核
- openEuler 23.03:
git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-23.03 && cd raspberrypi-kernel
- openEuler 23.03:
-
5.10 内核
- openEuler 22.03 LTS SP3/22.03 LTS SP4:
git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b OLK-5.10 && cd raspberrypi-kernel - openEuler 22.03 LTS SP2:
git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-22.03-LTS-SP2 && cd raspberrypi-kernel - openEuler 22.03 LTS SP1:
git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-22.03-LTS-SP1 && cd raspberrypi-kernel - openEuler 22.09:
git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-22.09 && cd raspberrypi-kernel - openEuler 22.03 LTS:
git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-22.03-LTS && cd raspberrypi-kernel - openEuler 21.09:
git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-21.09 && cd raspberrypi-kernel - openEuler 21.03:
git clone git@atomgit.com:openeuler/kernel.git -b openEuler-21.03 && cd kernel
- openEuler 22.03 LTS SP3/22.03 LTS SP4:
-
4.19 内核
- openEuler 20.03 LTS:
git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-20.03-LTS && cd raspberrypi-kernel - openEuler 20.09:
git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-20.09 && cd raspberrypi-kernel
- openEuler 20.03 LTS:
载入默认配置
根据内核不同版本,需要载入不同的默认配置:
-
6.6 内核
- openEuler 24.03 LTS/24.03 LTS SP1/25.03/24.03 LTS SP2/25.09/24.03 LTS SP3:
- 树莓派 5:
make ARCH=arm64 O=output/2712 bcm2712_defconfig - 树莓派 4B:
make ARCH=arm64 O=output/v8 bcm2711_defconfig
- 树莓派 5:
- openEuler 24.09:
make ARCH=arm64 bcm2711_defconfig
- openEuler 24.03 LTS/24.03 LTS SP1/25.03/24.03 LTS SP2/25.09/24.03 LTS SP3:
-
6.1 内核
- openEuler 23.03:
make ARCH=arm64 bcm2711_defconfig
- openEuler 23.03:
-
5.10 内核
make ARCH=arm64 bcm2711_defconfig -
4.19 内核
make ARCH=arm64 openeuler-raspi_defconfig
对应的 defconfig 文件在 ./arch/arm64/configs 下。
编译内核
-
6.6 内核
- 树莓派 5:
make ARCH=arm64 -j$(nproc) O=output/2712 KERNELRELEASE=6.6-2712 - 树莓派 4B:
make ARCH=arm64 -j$(nproc) O=output/v8 KERNELRELEASE=6.6-v8
- 树莓派 5:
-
6.1/5.10/4.19 内核:
make ARCH=arm64 -j$(nproc)
创建新内核收集目录
-
6.6 内核
- 树莓派 5:
mkdir ${WORKDIR}/output-2712 - 树莓派 4B:
mkdir ${WORKDIR}/output-v8
- 树莓派 5:
-
6.1/5.10/4.19 内核:
mkdir ${WORKDIR}/output
安装内核模块
-
6.6 内核
- 树莓派 5:
make ARCH=arm64 -j$(nproc) INSTALL_MOD_PATH=${WORKDIR}/output-2712 modules_install KERNELRELEASE=6.6-2712 - 树莓派 4B:
make ARCH=arm64 -j$(nproc) INSTALL_MOD_PATH=${WORKDIR}/output-v8 modules_install KERNELRELEASE=6.6-v8
- 树莓派 5:
-
6.1/5.10/4.19 内核:
make ARCH=arm64 -j$(nproc) INSTALL_MOD_PATH=${WORKDIR}/output modules_install
在 ${WORKDIR}/output-2712、${WORKDIR}/output-v8 或 ${WORKDIR}/output 文件夹下会生成 lib 文件夹。
收集编译结果
-
内核
- 6.6 内核
- 树莓派 5:
cp ${WORKDIR}/raspberrypi-kernel/output/2712/arch/arm64/boot/Image ${WORKDIR}/output-2712/ - 树莓派 4B:
cp ${WORKDIR}/raspberrypi-kernel/output/v8/arch/arm64/boot/Image ${WORKDIR}/output-v8/
- 树莓派 5:
- 6.1/5.10/4.19 内核:
cp ${WORKDIR}/raspberrypi-kernel/arch/arm64/boot/Image ${WORKDIR}/output/
- 6.6 内核
-
设备树文件等
-
6.6 内核
-
树莓派 5:
cp ${WORKDIR}/raspberrypi-kernel/output/2712/arch/arm64/boot/dts/broadcom/*.dtb ${WORKDIR}/output-2712/ mkdir ${WORKDIR}/output-2712/overlays cp ${WORKDIR}/raspberrypi-kernel/output/2712/arch/arm64/boot/dts/overlays/*.dtb* ${WORKDIR}/output-2712/overlays/ -
树莓派 4B:
cp ${WORKDIR}/raspberrypi-kernel/output/v8/arch/arm64/boot/dts/broadcom/*.dtb ${WORKDIR}/output-v8/ mkdir ${WORKDIR}/output-v8/overlays cp ${WORKDIR}/raspberrypi-kernel/output/v8/arch/arm64/boot/dts/overlays/*.dtb* ${WORKDIR}/output-v8/overlays/
-
-
6.1/5.10/4.19 内核
cp ${WORKDIR}/raspberrypi-kernel/arch/arm64/boot/dts/broadcom/*.dtb ${WORKDIR}/output/ mkdir ${WORKDIR}/output/overlays cp ${WORKDIR}/raspberrypi-kernel/arch/arm64/boot/dts/overlays/*.dtb* ${WORKDIR}/output/overlays/
-
至此,所有内核及内核模块相关内容都在 ${WORKDIR}/output-2712、${WORKDIR}/output-v8 或 ${WORKDIR}/output 下了。
内核更新
这里 ${boot} 和 ${rootfs} 分别表示待更新系统或镜像文件的 boot 和 root 分区的挂载目录。
-
将内核放进引导
-
6.6 内核
- 树莓派 5:
cp ${WORKDIR}/output-2712/Image ${boot}/kernel_2712.img - 树莓派 4B:
cp ${WORKDIR}/output-v8/Image ${boot}/kernel8.img
- 树莓派 5:
-
6.1/5.10/4.19 内核:
cp ${WORKDIR}/output/Image ${boot}/kernel8.img
-
-
将设备树文件放进引导
-
6.6 内核
- 树莓派 5:
cp ${WORKDIR}/output-2712/*.dtb ${boot}/ cp -r ${WORKDIR}/output-2712/overlays ${boot}/ - 树莓派 4B:
cp ${WORKDIR}/output-v8/*.dtb ${boot}/ cp -r ${WORKDIR}/output-v8/overlays ${boot}/
- 树莓派 5:
-
6.1/5.10/4.19 内核
cp ${WORKDIR}/output/*.dtb ${boot}/ cp -r ${WORKDIR}/output/overlays ${boot}/
-
-
将内核模块放进 rootfs
-
6.6 内核
- 树莓派 5:
cp -r ${WORKDIR}/output-2712/lib/modules/* ${rootfs}/lib/modules/ - 树莓派 4B:
cp -r ${WORKDIR}/output-v8/lib/modules/* ${rootfs}/lib/modules/
- 树莓派 5:
-
6.1/5.10/4.19 内核:
cp -r ${WORKDIR}/output/lib/modules/* ${rootfs}/lib/modules/
-