SBC-sig/documents/raspberrypi/内核编译.md

175 lines
6.8 KiB
Markdown
Raw Normal View History

2024-12-19 14:47:27 +08:00
<!-- TOC -->
- [内核编译](#内核编译)
- [下载内核源码](#下载内核源码)
- [载入默认配置](#载入默认配置)
- [编译内核](#编译内核)
- [创建新内核收集目录](#创建新内核收集目录)
- [安装内核模块](#安装内核模块)
- [收集编译结果](#收集编译结果)
- [内核更新](#内核更新)
<!-- /TOC -->
# 内核编译
本文档介绍内核编译和更新的详细过程。操作目录:${WORKDIR}
>![](../public_sys-resources/icon-notice.gif) **须知:**
>当前只有 6.6 版本的树莓派内核同时支持树莓派 5 和树莓派 3B/3B+/4B/400其他内核版本只支持树莓派 3B/3B+/4B/400。
## 下载内核源码
根据内核不同版本,需要下载不同仓库的不同分支:
1. 6.6 内核
2025-12-26 13:02:58 +00:00
- openEuler 25.03`git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-25.03 && cd raspberrypi-kernel`
2026-01-19 16:27:06 +08:00
- 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`
2025-12-26 13:02:58 +00:00
- openEuler 25.09`git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-25.09 && cd raspberrypi-kernel`
2024-12-19 14:47:27 +08:00
2. 6.1 内核
2025-12-26 13:02:58 +00:00
- openEuler 23.03`git clone git@atomgit.com:openeuler/raspberrypi-kernel.git -b openEuler-23.03 && cd raspberrypi-kernel`
2024-12-19 14:47:27 +08:00
3. 5.10 内核
2025-12-26 13:02:58 +00:00
- 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`
2024-12-19 14:47:27 +08:00
4. 4.19 内核
2025-12-26 13:02:58 +00:00
- 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`
2024-12-19 14:47:27 +08:00
## 载入默认配置
根据内核不同版本,需要载入不同的默认配置:
1. 6.6 内核
2026-01-19 16:27:06 +08:00
- openEuler 24.03 LTS/24.03 LTS SP1/25.03/24.03 LTS SP2/25.09/24.03 LTS SP3
2024-12-19 14:47:27 +08:00
- 树莓派 5`make ARCH=arm64 O=output/2712 bcm2712_defconfig`
- 树莓派 4B`make ARCH=arm64 O=output/v8 bcm2711_defconfig`
2025-04-02 11:19:16 +08:00
- openEuler 24.09`make ARCH=arm64 bcm2711_defconfig`
2024-12-19 14:47:27 +08:00
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/`