拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

yocto:17-menuconfig

yocto:17-menuconfig

第7课: 很好,这一课是 Yocto 学习中一个重要的里程碑。
按照我们前面的路线,你已经完成了:

✅ 建立 Yocto 编译环境
✅ 编译 core-image-minimal
✅ Raspberry Pi 2 启动成功
✅ Dropbear SSH
✅ 固定 IP
✅ 自己写 recipe
✅ do_install
✅ systemd service
✅ 自己建立 meta-myproduct
✅ image 组成
✅ package 与依赖

下面进入:

第7课:kernel menuconfig —— 掌握 Kernel 定制

摘要:本课深入讲解如何在 Yocto 项目中定制 Linux Kernel 配置。主要内容包括:1) 理解 Kernel 在 Yocto 中的位置和提供者;2) 使用bitbake virtual/kernel -c menuconfig进入图形化配置界面;3) 修改配置(如 LOCALVERSION)并理解其临时性;4) 了解 Kernel 配置的真正来源(BSP defconfig → 默认配置 → Fragments → 最终 .config);5) 掌握永久保存配置的正确方法(savedefconfig → 放入 layer → bbappend 引用);6) 推荐的关键命令和实践步骤。通过本课学习,你将掌握 Yocto 中 Kernel 配置的完整工作流,避免临时修改丢失,实现配置的版本化管理。

目标不是学 Linux Kernel 开发,而是学会 Yocto 如何修改 Kernel 配置。


本课目标
完成以后,你应该能够回答:

Kernel 的 .config 从哪里来的?
menuconfig 修改后如何永久保存?
如何让 Yocto 每次都自动使用你的 Kernel 配置?


第一部分 认识 Kernel 在 Yocto 中的位置
先看看当前使用的是哪个 kernel : bitbake -e virtual/kernel | grep ^PN=
一般 Raspberry Pi 会看到 : PN=“linux-raspberrypi”
再看看 Provider : bitbake -e virtual/kernel | grep ^PREFERRED_PROVIDER_virtual/kernel
应该类似 : linux-raspberrypi
说明:

virtual/kernel ▼ linux-raspberrypi.bb ▼ 下载 Raspberry Pi Linux Kernel

第二部分 menuconfig
运行: bitbake virtual/kernel -c menuconfig
第一次会编译 kernel。
最后出现: Linux Kernel Configuration
就是经典的

Device Drivers Filesystem Networking USB

那个菜单。


第三部分 修改一个配置
例如:
进入图形菜单后:

General setup --->Local version - append to kernel release 默认可能是:()或者(-yocto-standard)把它改成: -mytest保存退出。

这时并没有修改 recipe。
只是修改了:.config
也就是说:
~/yocto/build-rpi2/tmp/work/raspberrypi2-poky-linux-gnueabi/linux-raspberrypi/6.6.63+git/linux-raspberrypi2-standard-build/.config
这是临时文件。
如果:bitbake -c clean virtual/kernel
它就没了。
所以:

menuconfig 默认不会永久保存。


第四部分 查看配置


第五部分 编译 Kernel
退出后:bitbake virtual/kernel
Yocto 会重新编译 kernel。
如果:bitbake myproduct-image

整个 image 也会自动包含新的 kernel。


第六部分 Kernel 配置来源
很多初学者以为:

kernel|--->.config

其实不是。
真正流程:

BSP defconfig ▼ kernel 默认配置 ▼ Fragments ▼ 最终 .config ▼ 编译

因此:

.config 是自动生成的,而不是源码仓库中的固定文件。


第七部分 为什么 menuconfig 不推荐直接使用
因为:tmp/work/
是临时目录。
例如:

clean cleanall 重新编译 升级kernel

都会丢失修改。
正确做法是:

menuconfig ▼ savedefconfig ▼ 生成 defconfig ▼ 放入自己的 layer ▼ bbappend 引用

这才符合 Yocto 的管理方式。


第八部分 推荐掌握的几个命令
bitbake virtual/kernel -c menuconfig
修改 Kernel 配置 : bitbake virtual/kernel -c devshell
进入 Kernel 构建目录 : bitbake virtual/kernel
重新编译 Kernel : bitbake virtual/kernel -c clean
清除 Kernel 构建结果 : bitbake myproduct-image

生成包含新 Kernel 的镜像。


本课实践建议
建议你做以下几个实验:
1.运行 bitbake virtual/kernel -c menuconfig。
2.将 CONFIG_LOCALVERSION 设置为 -mytest。
3.保存退出。
4.编译 virtual/kernel。
5.生成 myproduct-image。
6.启动 Raspberry Pi,确认新内核正常运行。

返回列表