SBC-sig/documents/raspberrypi/内核编译.md
2026-01-04 11:24:29 +08:00

175 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- TOC -->
- [内核编译](#内核编译)
- [下载内核源码](#下载内核源码)
- [载入默认配置](#载入默认配置)
- [编译内核](#编译内核)
- [创建新内核收集目录](#创建新内核收集目录)
- [安装内核模块](#安装内核模块)
- [收集编译结果](#收集编译结果)
- [内核更新](#内核更新)
<!-- /TOC -->
# 内核编译
本文档介绍内核编译和更新的详细过程。操作目录:${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/`