1 简介

1 概述

无论打算如何使用 Yocto Project,你很可能都会接触 Linux 内核。本手册涵盖:

  • 如何设置构建主机以支持内核开发

  • 内核开发流程

  • Yocto Linux 内核 Metadata 的背景信息

  • 使用内核工具执行常见任务

  • 如何使用在 Yocto Project 中处理内核所需的内核元数据

  • Yocto Project 团队如何开发和维护 Yocto Linux 内核 Git 仓库及元数据。

每个 Yocto Project 发行版都包含一组 Yocto Linux 内核配方。其 Git 仓库 可在 Yocto 源码仓库 的 "Yocto Linux Kernel" 栏目下查看。 发行版中的新配方跟踪 https://www.kernel.org 的最新上游 Linux 内核开发, 并引入新支持的平台。发行版中原有的配方也会更新,并至少再支持一个 Yocto Project 发行周期。

此外还提供 Yocto Linux 内核开发配方(linux-yocto-dev.bb ),供希望 使用最新上游 Yocto Linux 内核及内核元数据开发成果的用户使用。

备注

Yocto Linux 内核的更多信息见 “Yocto Project 内核开发与维护” 一节。

Yocto Project 还提供一组强大的内核工具,用于管理 Yocto Linux 内核源码和 配置数据。可以用它们修改单个配置、应用多个补丁,或处理自己的内核源码。

这些工具尤其便于生成精简的配置片段,只指定必需内容。配置片段只需包含 Yocto Linux 内核 menuconfig 系统中可见的最高层 CONFIG 选项; 完整的内核 .config 文件则包含所有自动选择的 CONFIG 选项。 这种方式降低了维护成本,也便于按项目需要进一步拆分配置。常见做法是将 策略与硬件分离。例如,所有内核可能都需要支持 proc 和 sys 文件系统, 但只有特定开发板需要声音、USB 或某些驱动。分别指定这些配置后,就能按需 组合,而每项只在一处维护。源码变更也可以按类似逻辑拆分。

如果不维护自己的内核源码,只需少量修改,已发布配方可提供经过验证的基础, 便于在其上叠加变更。这样可以受益于 Yocto Project 开发期间持续进行的内核 集成和测试。

如果有非常特定的 Linux 内核源码树,无法与任何官方 Yocto Linux 内核配方 保持一致,也可以将 Yocto Project Linux 内核工具用于自己的内核源码。

本手册其余部分介绍具体的 Linux 内核开发任务,假定你已经熟悉 BitBake 配方及基本开源开发工具。理解这些概念会使内核 配方的使用更加顺利。如需补充背景知识,请先阅读并理解以下文档:

1 内核修改流程

修改 Yocto Project 内核可能涉及更改配置选项,也可能涉及添加新的内核配方。 配置变更可以用配置片段表示,配方修改则放在自行创建的内核层的 recipes-kernel 区域。

本节概述 Yocto Project 的内核修改流程。下图及对应列表给出一般信息,以及 供进一步阅读的参考。

../_images/kernel-dev-flow.png
  1. 设置主机开发系统以支持 Yocto Project 开发: 如何准备可使用 Yocto Project 的构建主机,见开发任务手册的 “准备使用 Yocto Project” 一节。

  2. 为内核开发设置主机系统: 推荐使用 devtool 进行内核开发,也可以在 Yocto Project 中采用传统内核开发方式。两种方式都需要先准备开发环境。

    使用 devtool 前,需要对镜像进行一次干净构建。更多信息见 “准备使用 devtool 开发” 一节。

    传统内核开发要求将内核源码放在隔离的本地 Git 仓库中。更多信息见 “准备传统内核开发” 一节。

  3. 按需修改内核源码: 修改内核并不总是意味着直接修改源文件。如果确实需要, 使用 devtool 时,应修改 Yocto Build Directory 中的文件。 更多信息见 “使用 devtool 修补内核” 一节。

    采用传统内核开发时,则编辑内核本地 Git 仓库中的源文件。更多信息见 “使用传统内核开发流程修补内核” 一节。

  4. 按需修改内核配置: 如果需要更改内核配置,可以使用 menuconfig,以交互方式 开发和测试配置变更。保存 menuconfig 中的修改会更新内核 .config 文件。

    备注

    尽量不要直接编辑 Build Directory 中构建源码旁边的已有 .config 文件,否则 OpenEmbedded 构建系统重新生成配置文件时 可能出现意外结果。

    通过 menuconfig 完成满意的配置修改并保存后,可以将生成的 .config 与原文件比较,把变更整理为 配置片段文件, 再从内核的 .bbappend 文件引用。

    如果在 BSP 层中工作,需要修改 BSP 内核配置,也可以使用 menuconfig。

  5. 重新构建包含变更的内核镜像: 重新构建内核镜像会应用变更。根据目标硬件, 可以在实际硬件上验证,也可能可以用 QEMU 验证。

本开发指南其余部分涵盖内核开发的常见任务、元数据高级用法以及 Yocto Linux 内核维护概念。