内核测试-编译内核
📅8/24/2021, 12:00:00 AM
本篇将讲述编译内核的一般步骤。
说到编译内核,没有接触过的伙伴们可能会望而生畏,其实不然。
编译内核的步骤可归纳如下:
- 下载内核源代码
- defconfig
- menuconfig
- 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
启用后,将会在内核启动的时候输出自检的结果。
启用 KFENCE 测试套装
禁用 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