SBC-sig/documents/raspberrypi/内核编译.md
2026-01-19 16:27:12 +08:00

6.8 KiB
Raw Permalink Blame History

内核编译

本文档介绍内核编译和更新的详细过程。操作目录:${WORKDIR}

须知:
当前只有 6.6 版本的树莓派内核同时支持树莓派 5 和树莓派 3B/3B+/4B/400其他内核版本只支持树莓派 3B/3B+/4B/400。

下载内核源码

根据内核不同版本,需要下载不同仓库的不同分支:

  1. 6.6 内核

    • openEuler 25.03git 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 SP3git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b OLK-6.6 && cd raspberrypi-kernel
    • openEuler 25.09git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-25.09 && cd raspberrypi-kernel
  2. 6.1 内核

    • openEuler 23.03git 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 SP4git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b OLK-5.10 && cd raspberrypi-kernel
    • openEuler 22.03 LTS SP2git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-22.03-LTS-SP2 && cd raspberrypi-kernel
    • openEuler 22.03 LTS SP1git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-22.03-LTS-SP1 && cd raspberrypi-kernel
    • openEuler 22.09git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-22.09 && cd raspberrypi-kernel
    • openEuler 22.03 LTSgit clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-22.03-LTS && cd raspberrypi-kernel
    • openEuler 21.09git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-21.09 && cd raspberrypi-kernel
    • openEuler 21.03git clone git@atomgit.com:openeuler/kernel.git -b openEuler-21.03 && cd kernel
  4. 4.19 内核

    • openEuler 20.03 LTSgit clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-20.03-LTS && cd raspberrypi-kernel
    • openEuler 20.09git 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/24.03 LTS SP3
      • 树莓派 5make ARCH=arm64 O=output/2712 bcm2712_defconfig
      • 树莓派 4Bmake ARCH=arm64 O=output/v8 bcm2711_defconfig
    • openEuler 24.09make ARCH=arm64 bcm2711_defconfig
  2. 6.1 内核

    • openEuler 23.03make 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 内核

    • 树莓派 5make ARCH=arm64 -j$(nproc) O=output/2712 KERNELRELEASE=6.6-2712
    • 树莓派 4Bmake ARCH=arm64 -j$(nproc) O=output/v8 KERNELRELEASE=6.6-v8
  • 6.1/5.10/4.19 内核:make ARCH=arm64 -j$(nproc)

创建新内核收集目录

  • 6.6 内核

    • 树莓派 5mkdir ${WORKDIR}/output-2712
    • 树莓派 4Bmkdir ${WORKDIR}/output-v8
  • 6.1/5.10/4.19 内核:mkdir ${WORKDIR}/output

安装内核模块

  • 6.6 内核

    • 树莓派 5make ARCH=arm64 -j$(nproc) INSTALL_MOD_PATH=${WORKDIR}/output-2712 modules_install KERNELRELEASE=6.6-2712
    • 树莓派 4Bmake 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 内核
      • 树莓派 5cp ${WORKDIR}/raspberrypi-kernel/output/2712/arch/arm64/boot/Image ${WORKDIR}/output-2712/
      • 树莓派 4Bcp ${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} 分别表示待更新系统或镜像文件的 bootroot 分区的挂载目录。

  1. 将内核放进引导

    • 6.6 内核

      • 树莓派 5cp ${WORKDIR}/output-2712/Image ${boot}/kernel_2712.img
      • 树莓派 4Bcp ${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 内核

      • 树莓派 5cp -r ${WORKDIR}/output-2712/lib/modules/* ${rootfs}/lib/modules/
      • 树莓派 4Bcp -r ${WORKDIR}/output-v8/lib/modules/* ${rootfs}/lib/modules/
    • 6.1/5.10/4.19 内核:cp -r ${WORKDIR}/output/lib/modules/* ${rootfs}/lib/modules/