乐于分享
好东西不私藏

别再满世界找源码了,Yocto 配置内核路径的三种姿势

本文最后更新于2026-03-10,某些文章具有时效性,若有错误或已失效,请在下方留言或联系老夜

别再满世界找源码了,Yocto 配置内核路径的三种姿势

点击↑深色口袋物联,选择关注公众号,获取更多内容,不迷路


做为BSP 的新人,十有八九被 Yocto 的源码管理绕晕过。

明明只想改个驱动,却发现编译用的内核源码不知藏身何处。好不容易在 tmp/work 目录下翻到了,改完一清理,代码没了。

或者更惨,厂商丢给一个几十 GB 的内核压缩包,让基于这个开发。折腾了半天,愣是不知道怎么让 Yocto 识别它,只能傻傻地每次手动解压、手动覆盖。

这就是典型的“路径焦虑”。

Yocto 其实是个很听话的管家,问题在于你得用它的语言告诉它:内核源码到底在哪。

今天就把平时工作中,配置内核源码路径的几种常用方法总结下。弄懂了这个,就掌握了 Yocto 开发的“钥匙”,以后就可以随时更换内核版本,对比测试!

方法一:标准流 —— 指定下载地址(SRC_URI)

这是最正规、最推荐的做法。适用于源码在远程 Git 仓库,或者已经打好 补丁patch 的标准包。

概述: 通过修改 Recipe 文件(.bb 或 .bbappend),直接告诉 Yocto 去哪里下载代码。Yocto 会自动管理下载、解压、打补丁的全过程。

关键步骤:

  1. 1. 找到 Recipe。 找到内核的配方文件,通常在 meta-xxx/recipes-kernel/linux/ 下。
  2. 2. 修改 SRC_URI。 如果是 Git 仓库: SRC_URI = "git://git.server.com/linux-kernel.git;protocol=git;branch=${KBRANCH}" 如果是本地压缩包(厂商给的): SRC_URI = "file:///home/user/kernel-src.tar.gz"
  3. 3. 设置版本号。 别忘了设置 SRCREV(针对 Git)或者 PV(针对压缩包),否则 Yocto 不知道版本,编译会报错。

优缺点:

  • • 优点: 规范。源码来源清晰,团队成员拉取代码后,编译环境完全一致。适合最终发布。
  • • 缺点: 稍显繁琐。如果是 Git 仓库,每次改动代码都要 Commit 生成 Patch 才能被 Yocto 识别;如果是压缩包,每次更新都要重新打包。

方法二:开发流 —— 外部源码构建(externalsrc)

开发调试阶段,要的是快速。改一行代码提交 Commit 一次,谁受得了?

这时候,externalsrc 类就是救命稻草。

概述: 这种方法的本质是告诉 Yocto:“别下载了,也别解压了,编译的时候直接去指定的文件夹拿源码。”

关键步骤:

  1. 1. 创建 bbappend。 在sdk的 Layer 里,给内核创建一个 .bbappend 文件。
  2. 2. 继承类并指定路径。 写入以下内容:

    inherit externalsrc
    EXTERNALSRC = "/home/user/my-kernel-source"
    EXTERNALSRC_BUILD = "/home/user/my-kernel-source"

    注意:EXTERNALSRC 是源码路径,EXTERNALSRC_BUILD 是编译路径。为了方便,通常设成同一个。

  3. 3. 直接编译。

配置好后,执行 bitbake virtual/kernel,Yocto 就会直接编译指定的那个文件夹里的代码。

优缺点:

  • • 优点: 极速。改完代码直接编译,不需要 Commit,不需要打包。配合 IDE 阅读代码非常爽。
  • • 缺点: 破坏了构建的可复现性。如果别人的机器上没有这个路径,或者路径不一样,编译直接挂掉。切记:开发调试用,发版前切回去。

方法三:本地流 —— 指向本地 Git 仓库

有时候如果不想用 externalsrc,但又想用本地的 Git 目录。这有点折中。

概述: 利用 Yocto 的 Fetcher 机制,支持 file:// 协议指向本地的 Git 仓库。Yocto 会把它当成一个远程仓库来处理,但实际是在本地操作。

关键步骤:

  1. 1. 修改 SRC_URI。 在 .bbappend 里配置: SRC_URI = "git:///home/user/my-local-kernel;protocol=file;branch=master" 注意那个 git:// 后面跟了三个斜杠,表示本地绝对路径。
  2. 2. 管理分支。 确保本地的分支(比如 master)是正确的,且 SRCREV 指向的 Commit ID 存在。

优缺点:

  • • 优点: 兼顾了标准流程和本地开发。Yocto 会帮助管理 Patch 应用流程,比 externalsrc 更符合构建逻辑。
  • • 缺点: 路径依赖重。需要在本地维护好这个 Git 仓库。而且每次源码变动,Yocto 可能会重新做解压拷贝动作,速度不如 externalsrc 快。

最后想说

配置源码路径,本质上是解决“代码在哪”和“怎么拿”的问题。

新人最容易犯的错,就是在 tmp/work 的临时目录里改代码,那是 Yocto 的“地盘”,不是开发者的工作区,只属于Yocto的bitbake。

用 SRC_URI 管发布,用 externalsrc 搞开发,这才是 BSP 工程师的成熟标志。

下次拿到厂商的 SDK 包,别再一头雾水地乱改了,先想想该用哪种姿势把它接入 Yocto。

你最头疼的 Yocto 配置是哪个环节?是github网络下载太慢,还是 Patch 打不上?评论区聊聊。


本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 别再满世界找源码了,Yocto 配置内核路径的三种姿势

猜你喜欢

  • 暂无文章

评论 抢沙发

2 + 7 =