本文参考自openeuler/raspberrypi的官方文档

https://gitee.com/openeuler/raspberrypi/tree/master/documents


 

本文用的是Ubuntu18.04镜像,需要配置环境

sudo apt-get install gcc

sudo apt-get install g++

sudo apt install make

sudo apt install make-guile

sudo apt-get install libncurses5-dev

sudo apt install bison flex

sudo apt install libelf-dev

sudo apt install libssl-dev

如果是Openeuler环境需要配置

sudo yum install flex bison

一、交叉编译内核

环境1

操作系统:ubuntu16.04

架构:x86_64

1. 安装依赖软件

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

2. 下载内核源码

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

5.10 内核:

openEuler 21.09 :git clone git@gitee.com:openeuler/raspberrypi-kernel.git -b openEuler-21.09 && cd raspberrypi-kernel

openEuler 21.09 :git clone git@gitee.com:openeuler/kernel.git -b openEuler-21.03 && cd kernel

4.19 内核:

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

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

报错公钥无权限的话可以直接到网页上下zip

https://gitee.com/openeuler/raspberrypi-kernel/tree/openEuler-21.09/

3. 设置环境变量

        export ARCH=arm64

        export CROSS_COMPILE=aarch64-linux-gnu-

4. 载入默认配置

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

        5.10 内核

                openEuler 21.09:make bcm2711_defconfig

                openEuler 21.03:make bcm2711_defconfig

        4.19 内核

                openEuler 20.03 LTS:make openeuler-raspi_defconfig

                openEuler 20.09:make openeuler-raspi_defconfig

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

5. 编译

        make -j4

6. 将当前窗口所在路径配为WORKDIR标签

        export WORKDIR=$PWD

7. 创建编译内核模块目录

        mkdir ${WORKDIR}/ouput

8. 编译内核模块

        make INSTALL_MOD_PATH=${WORKDIR}/output/ modules_install

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

9. 收集编译结果

(1) 内核

        cp ${WORKDIR}/arch/arm64/boot/Image ${WORKDIR}/output/

(2) 设备树文件等

        cp ${WORKDIR}/arch/arm64/boot/dts/broadcom/*.dtb ${WORKDIR}/output/

        mkdir ${WORKDIR}/output/overlays

        cp ${WORKDIR}/arch/arm64/boot/dts/overlays/*.dtb*  ${WORKDIR}/output/overlays/

至此,所有内核及内核模块相关内容都在 ${WORKDIR}/output 下了,此时可以替换进树莓派镜像的SD卡里。

------------------------------------------------------------------------------------------------------------

环境2

操作系统:openEuler

架构:arm64

此环境和树莓派的环境相同,流程和ubuntu 的基本相同,参考

documents/openEuler镜像的构建.md · openEuler/raspberrypi - Gitee.com

1. 下载内核代码

        参考ubuntu环境,到网站上下zip包,用ssh传给树莓派并解压

2. 载入默认配置

        5.10 内核

                make bcm2711_defconfig

        4.19 内核

                make openeuler-raspi_defconfig

3. 编译

        make -j8    //树莓派是4核,但是非常慢,5小时以上

后面的流程和ubuntu环境相同:

4. 将当前窗口所在路径配为WORKDIR标签方便操作

        export WORKDIR=$PWD

5. 创建编译内核模块目录

        mkdir ${WORKDIR}/ouput

6. 编译内核模块

        make INSTALL_MOD_PATH=${WORKDIR}/output/ modules_install -j8

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

7. 收集编译结果

(1) 内核

        cp ${WORKDIR}/arch/arm64/boot/Image ${WORKDIR}/output/

(2) 设备树文件等

        cp ${WORKDIR}/arch/arm64/boot/dts/broadcom/*.dtb ${WORKDIR}/output/

        mkdir ${WORKDIR}/output/overlays

        cp ${WORKDIR}/arch/arm64/boot/dts/overlays/*.dtb*  ${WORKDIR}/output/overlays/

至此,所有内核及内核模块相关内容都在 ${WORKDIR}/output 下了

-------------------------------------------------------------------------------------------------------------------------

二、编完可以直接替换内核并验证可用性

        使用一个之前刷好 openEuler 树莓派镜像的 SD 卡,直接插到 Linux 主机上,SD 会默认挂载其 boot 分区和rootfs(根目录)分区,执行 df -lh 命令查看当前已挂载的卷,将这两个挂载路径配置成标签

export rootfs=/media/raspberry/955c3d53-5a13-4a10-9f26-e440b19de471

export boot=/media/raspberry/boot

将上面编译好的内核放置到SD卡对应分区。

1. 将内核模块放进rootfs

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

2. 将内核放进引导

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

        如有需要也可先备份此文件再覆盖

3. 将设备树文件放进引导

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

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

然后可以参考正常树莓派的启动方法,用SD卡启动树莓派

查看内核时间戳可知内核已被替换

uname -a

例如原版

Linux openEuler 5.10.0-v8 #1 SMP PREEMPT Thu Jan 20 14:28:41 CST 2022 aarch64 aarch64 aarch64 GNU/Linux

改后

Linux openEuler 5.10.0-v8 #1 SMP PREEMPT Fri Jan 21 11:47:55 CST 2022 aarch64 aarch64 aarch64 GNU/Linux

---------------------------------------------------------------------------------------------------------------------------

三、LTP测试使用

Linux test project是一个linux测试程序的社区

github连不上的话可以参考以下链接,实测有用。

解决Github打不开问题 - 知乎 (zhihu.com)

在树莓派(arm64)环境下

1. 下载ltp

        $ git clone https://github.com/linux-test-project/ltp.git

        $ cd ltp

2. 生成makefile

        $ make autotools

        这一步host默认参数是x86的,要在其他架构上要注意配置

        $ ./configure --host=aarch64

        $ make -j8

        $ make install -j8

        $ cd /opt/ltp/

        $ ./runltp

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐