内核测试-编译内核

📅8/24/2021, 12:00:00 AM

本篇将讲述编译内核的一般步骤。

说到编译内核,没有接触过的伙伴们可能会望而生畏,其实不然。

编译内核的步骤可归纳如下:

  1. 下载内核源代码
  2. defconfig
  3. menuconfig
  4. make

下载内核源代码

defconfig

配置文件 .config 是编译内核所必须的,我们可以基于 defconfig 来生成匹配于目标机器架构的 .config 文件。

执行

make defconfig

将得到由当前机器架构的 defconfig 生成而来的 .config。

若想交叉编译用于其他架构的内核,如 arm64,执行

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig

将会得到编译的目标架构为 arm64 的 .config 文件。

menuconfig

在 .config 的基础上,进行个性化设置。

因为目标架构为 arm64(与本机不同),所以这一步亦带有交叉编译的参数,执行

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig

将会在当前的“终端”中出现一个类似 GUI 效果的界面。

注意:“终端”的宽度要足够大,否则将会报错。

使用方向键移动,按下空格来启用/关闭选项。

启用 KFENCE

-> Kernel hacking
 -> Memory Debugging
  -> KFENCE: low-overhead sampling-based memory safety error detector

启用 KFENCE 自检

启用 Tracers

-> Kernel hacking
 -> Tracers

启用后,将会在内核启动的时候输出自检的结果。

Enable Tracers

启用 KFENCE 测试套装

Enable KFENCE test suite

禁用 Memtest

-> Kernel Testing and Coverage
 -> <*>Kunit
 -> [ ] Memtest

make

执行

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image -j8

交叉编译内核。

  • 结尾的 Image 要求编译得到内核镜像
  • -j 指定多进程编译时,进程的数量(可与CPU核心数一致)

总结

在本篇中,通过修改配置文件,启用了目标功能,经过编译得到了内核镜像。

一般编译内核的步骤可总结如下:

| No | Do | Why | | ---- | --------------- | --------------------------------------------------- | | 1 | make defconfig | 依据特定架构的 defconfig 生成 .config 文件 | | 2 | make menuconfig | 在 .config 的基础上,在“图形化”界面上进行个性化设置 | | 3 | make | 编译 |

若目标为其他架构,则需在每个阶段的命令中加入交叉编译的参数

参考资料

https://zhuanlan.zhihu.com/p/77564702

This 

post

 by Yingjie Shang is licensed under 

CC BY 4.0