175 lines
6.8 KiB
Markdown
175 lines
6.8 KiB
Markdown
<!-- TOC -->
|
||
|
||
- [内核编译](#内核编译)
|
||
- [下载内核源码](#下载内核源码)
|
||
- [载入默认配置](#载入默认配置)
|
||
- [编译内核](#编译内核)
|
||
- [创建新内核收集目录](#创建新内核收集目录)
|
||
- [安装内核模块](#安装内核模块)
|
||
- [收集编译结果](#收集编译结果)
|
||
- [内核更新](#内核更新)
|
||
|
||
<!-- /TOC -->
|
||
|
||
# 内核编译
|
||
|
||
本文档介绍内核编译和更新的详细过程。操作目录:${WORKDIR}
|
||
|
||
> **须知:**
|
||
>当前只有 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/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`
|
||
|
||
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/24.03 LTS SP3:
|
||
- 树莓派 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/`
|