SBC-sig/documents/raspberrypi/交叉编译内核.md
lixiang e80572e7dd
Fix some simple errors
Signed-off-by: lixiang <lixiang_yewu@cmss.chinamobile.com>
2024-11-20 01:00:56 +00:00

5.6 KiB
Raw Blame History

介绍

说明:
如需根据自身需求定制内核,可参考本文档。

目前 openEuler 树莓派版本只支持 AArch64 架构。

编译内核时,除了使用 AArch64 架构的运行环境,也可以采用交叉编译的方式。这里,我们以 ubuntu16.04 x86_64 的服务器上编译内核为例,介绍交叉编译的过程。

实验环境

  • 操作系统ubuntu16.04
  • 架构x86_64

安装依赖软件

apt-get install build-essential gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu bc libssl-dev -y

编译

操作目录:${WORKDIR}

下载内核源码

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

  1. 6.6 内核

    • openEuler 24.09git clone git@gitee.com:openeuler/raspberrypi-kernel.git -b OLK-6.6 && cd raspberrypi-kernel
    • openEuler 24.03 LTSgit clone git@gitee.com:openeuler/raspberrypi-kernel.git -b OLK-6.6 && cd raspberrypi-kernel
  2. 6.1 内核

    • openEuler 23.03git clone git@gitee.com:openeuler/raspberrypi-kernel.git -b openEuler-23.03 && cd raspberrypi-kernel
  3. 5.10 内核

    • openEuler 22.03 LTS SP4git clone git@gitee.com:openeuler/raspberrypi-kernel.git -b OLK-5.10 && cd raspberrypi-kernel
    • openEuler 22.03 LTS SP3git clone git@gitee.com:openeuler/raspberrypi-kernel.git -b OLK-5.10 && cd raspberrypi-kernel
    • openEuler 22.03 LTS SP2git clone git@gitee.com:openeuler/raspberrypi-kernel.git -b openEuler-22.03-LTS-SP2 && cd raspberrypi-kernel
    • openEuler 22.03 LTS SP1git clone git@gitee.com:openeuler/raspberrypi-kernel.git -b openEuler-22.03-LTS-SP1 && cd raspberrypi-kernel
    • openEuler 22.09git clone git@gitee.com:openeuler/raspberrypi-kernel.git -b openEuler-22.09 && cd raspberrypi-kernel
    • openEuler 22.03 LTSgit clone git@gitee.com:openeuler/raspberrypi-kernel.git -b openEuler-22.03-LTS && cd raspberrypi-kernel
    • openEuler 21.09git clone git@gitee.com:openeuler/raspberrypi-kernel.git -b openEuler-21.09 && cd raspberrypi-kernel
    • openEuler 21.03git clone git@gitee.com:openeuler/kernel.git -b openEuler-21.03 && cd kernel
  4. 4.19 内核

    • openEuler 20.03 LTSgit clone git@gitee.com:openeuler/raspberrypi-kernel.git -b openEuler-20.03-LTS && cd raspberrypi-kernel
    • openEuler 20.09git clone git@gitee.com:openeuler/raspberrypi-kernel.git -b openEuler-20.09 && cd raspberrypi-kernel

设置环境变量

export ARCH=arm64

export CROSS_COMPILE=aarch64-linux-gnu-

载入默认配置

根据内核不同版本,需要载入不同的默认配置:

  1. 6.6 内核

    • openEuler 24.09make bcm2711_defconfig
    • openEuler 24.03 LTSmake bcm2711_defconfig
  2. 6.1 内核

    • openEuler 23.03make bcm2711_defconfig
  3. 5.10 内核

    • openEuler 22.03 LTS SP4make bcm2711_defconfig
    • openEuler 22.03 LTS SP3make bcm2711_defconfig
    • openEuler 22.03 LTS SP2make bcm2711_defconfig
    • openEuler 22.03 LTS SP1make bcm2711_defconfig
    • openEuler 22.09make bcm2711_defconfig
    • openEuler 22.03 LTSmake bcm2711_defconfig
    • openEuler 21.09make bcm2711_defconfig
    • openEuler 21.03make bcm2711_defconfig
  4. 4.19 内核

    • openEuler 20.03 LTSmake openeuler-raspi_defconfig
    • openEuler 20.09make openeuler-raspi_defconfig

对应的 defconfig 文件在 ./arch/arm64/configs 下。

编译内核

make -j9

创建编译内核模块目录

mkdir ${WORKDIR}/output

编译内核模块

make INSTALL_MOD_PATH=${WORKDIR}/output/ modules_install

在 ${WORKDIR}/output 文件夹下会生成 lib 文件夹。

收集编译结果

  1. 内核

    cp ${WORKDIR}/raspberrypi-kernel/arch/arm64/boot/Image ${WORKDIR}/output/

  2. 设备树文件等

    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 下了。

验证内核可用性

使用一个之前刷好 openEuler 树莓派镜像的 SD 卡,直接插到 Linux 主机上SD 会默认挂载其 boot 分区和 根目录分区。这里其挂载路径分别表示为 ${boot} 和 ${rootfs}将上面编译好的内核放置到SD卡对应分区。

将内核模块放进rootfs

cp -r ${WORKDIR}/output/lib/modules ${rootfs}/lib/

将内核放进引导

cp ${WORKDIR}/output/Image ${boot}/kernel8.img

将设备树文件放进引导

cp ${WORKDIR}/output/*.dtb ${boot}/

cp ${WORKDIR}/output/overlays/* ${boot}/overlays/

之后,参考 树莓派使用 使用该 SD 卡启用树莓派,验证功能: