11 在工作流程中使用 Quilt

Quilt 是一个功能强大的工具, 即使没有干净的源码树,也可以用它记录源码变更。本节概述使用 Quilt 修改源码、 测试变更并最终将变更保存为补丁的典型流程。

备注

如果清理配方或启用了 rm_work,从保留源码修改的角度 来说,Yocto Project 应用程序开发和可扩展软件开发工具包(eSDK)手册中 介绍的 devtool 工作流程 比使用 Quilt 的流程更安全。

基本步骤如下:

  1. 查找源码: OpenEmbedded 构建系统使用的临时源码保存在 Build Directory 中。如何定位特定软件包的临时源码目录,见 “查找临时源码” 一节。

  2. 切换工作目录: 需要进入保存临时源码的目录,该目录由 S 变量定义。

  3. 创建新补丁: 修改源码前,需要先创建新补丁。使用 quilt new 命令:

    $ quilt new my_changes.patch
    
  4. 通知 Quilt 并添加文件: 创建补丁后,需要将计划编辑的文件添加到刚创建 的补丁中,以便 Quilt 跟踪这些文件:

    $ quilt add file1.c file2.c file3.c
    
  5. 编辑文件: 修改已加入补丁的源码文件。

  6. 测试变更: 修改源码后,最简单的测试方式是调用 do_compile 任务,如下所示:

    $ bitbake -c compile -f package
    

    -f 或 --force 选项会强制执行指定任务。如果发现代码有问题,可以 继续编辑并反复测试,直到行为符合预期。

    备注

    一旦通过 BitBake 运行 do_clean 或 do_cleanall 任务,即 bitbake -c clean package 或 bitbake -c cleanall package, 对临时源码的所有修改都会消失。使用 “在构建期间节省磁盘空间” 一节 介绍的 rm_work 功能时,修改也会消失。

  7. 生成补丁: 确认变更按预期工作后,使用 Quilt 生成包含全部修改的最终补丁:

    $ quilt refresh
    

    此时,my_changes.patch 文件包含对 file1.c、file2.c 和 file3.c 的全部编辑。

    生成的补丁文件位于源码( S )目录下的 patches/ 子目录。

  8. 复制补丁文件: 为简便起见,将补丁复制到 files 目录。可以在配方 (.bb )文件或追加(.bbappend )文件所在目录创建此目录。这样可 确保 OpenEmbedded 构建系统找到补丁。接着,将补丁加入配方的 SRC_URI。例如:

    SRC_URI += "file://my_changes.patch"