- [内核编译](#内核编译) - [下载内核源码](#下载内核源码) - [载入默认配置](#载入默认配置) - [编译内核](#编译内核) - [创建新内核收集目录](#创建新内核收集目录) - [安装内核模块](#安装内核模块) - [收集编译结果](#收集编译结果) - [内核更新](#内核更新) # 内核编译 本文档介绍内核编译和更新的详细过程。操作目录:${WORKDIR} >![](../public_sys-resources/icon-notice.gif) **须知:** >当前只有 6.6 版本的树莓派内核同时支持树莓派 5 和树莓派 3B/3B+/4B/400,其他内核版本只支持树莓派 3B/3B+/4B/400。 ## 下载内核源码 根据内核不同版本,需要下载不同仓库的不同分支: 1. 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:`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` 2. 6.1 内核 - openEuler 23.03:`git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-23.03 && cd raspberrypi-kernel` 3. 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` 4. 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` ## 载入默认配置 根据内核不同版本,需要载入不同的默认配置: 1. 6.6 内核 - openEuler 24.03 LTS/24.03 LTS SP1/25.03/24.03 LTS SP2/25.09: - 树莓派 5:`make ARCH=arm64 O=output/2712 bcm2712_defconfig` - 树莓派 4B:`make ARCH=arm64 O=output/v8 bcm2711_defconfig` - openEuler 24.09:`make ARCH=arm64 bcm2711_defconfig` 2. 6.1 内核 - openEuler 23.03:`make ARCH=arm64 bcm2711_defconfig` 3. 5.10 内核 `make ARCH=arm64 bcm2711_defconfig` 4. 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` - 6.1/5.10/4.19 内核:`make ARCH=arm64 -j$(nproc)` ## 创建新内核收集目录 - 6.6 内核 - 树莓派 5:`mkdir ${WORKDIR}/output-2712` - 树莓派 4B:`mkdir ${WORKDIR}/output-v8` - 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` - 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 文件夹。 ## 收集编译结果 1. 内核 - 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/` - 6.1/5.10/4.19 内核:`cp ${WORKDIR}/raspberrypi-kernel/arch/arm64/boot/Image ${WORKDIR}/output/` 2. 设备树文件等 - 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` 分区的挂载目录。 1. 将内核放进引导 - 6.6 内核 - 树莓派 5:`cp ${WORKDIR}/output-2712/Image ${boot}/kernel_2712.img` - 树莓派 4B:`cp ${WORKDIR}/output-v8/Image ${boot}/kernel8.img` - 6.1/5.10/4.19 内核:`cp ${WORKDIR}/output/Image ${boot}/kernel8.img` 2. 将设备树文件放进引导 - 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}/ ``` - 6.1/5.10/4.19 内核 ``` cp ${WORKDIR}/output/*.dtb ${boot}/ cp -r ${WORKDIR}/output/overlays ${boot}/ ``` 3. 将内核模块放进 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/` - 6.1/5.10/4.19 内核:`cp -r ${WORKDIR}/output/lib/modules/* ${rootfs}/lib/modules/`