交叉编译内核

介绍

目前 EulixOS 树莓派版本只支持 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}

下载内核源码

git clone git@isrc.iscas.ac.cn:mirrors-private/openeuler/raspberrypi-kernel.git

得到文件 ${WORKDIR}/raspberrypi-kernel。

进入内核源码

cd ${WORKDIR}/raspberrypi-kernel

切换分支

这里适用于树莓派的内核源码的分支有 openEuler-20.03-LTS 和 openEuler-20.09,分别对应不同的内核版本。根据需要选择对应分支,下载源码后默认为 master 分支,如果需要选择 openEuler-20.03-LTS 分支,执行下面的命令:

git checkout -b openEuler-20.03-LTS origin/openEuler-20.03-LTS

设置环境变量

export ARCH=arm64

export CROSS_COMPILE=aarch64-linux-gnu-

载入默认配置

make openeuler-raspi_defconfig

其中 openeuler-raspi_defconfig 在 ../linux/arch/arm64/configs 下。

编译内核

make -j9

创建编译内核模块目录

mkdir ${WORKDIR}/ouput

编译内核模块

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

验证内核可用性

使用一个之前刷好 EulixOS 树莓派镜像的 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 卡启用树莓派,验证功能:

results matching ""

    No results matching ""