9

我正在开发一个嵌入式系统,该系统使用 buildroot 作为构建内核和根文件系统的工具。我想为这个内核源代码树应用一些补丁,有人可以告诉我 buildroot 如何应用补丁吗?

4

4 回答 4

9

扩展@pradeepchhentri 的答案。Quilt 将查找与 *.mk 文件位于同一文件夹中的文件。要构建适当的文件:

  1. 将您的源包从原始文件差异到一个名为的文件中

    包名-编号-描述.patch

    在哪里

    名 - 必须与包名相同

    number - 如果您要应用多个补丁,则应应用补丁的顺序(否则将按字母顺序应用)

    描述- 可以是任何自由文本

  2. 将此文件放入包中,与 [packagename].mk 文件和 package/Config.in 文件处于同一级别。

如果您这样做,请不要忘记删除您的构建文件或执行 [package]-rebuild。如果正确完成,您应该会看到“正在修补...”消息。

于 2014-05-06T05:57:16.867 回答
4

关于buildroot项目中的补丁文件的一些细节:

  1. 你必须

    diff -u "old_file" "new_file" > file.patch
    

同时站在您的包tar.gz中定义的提取位置的正上方

PACKAGE_NAME_SOURCE

这意味着,您的文件路径必须包含提取的包文件夹名称。

  1. 如果您想知道“old_file”路径是否与原始路径不同 - 别担心,重要的是“new_file”路径和名称 - 它应该与您提取的包匹配。

  2. 已在 buildroot 中使用/定义的补丁的命名约定(所有部分用“-”号分隔):

    • 4 位补丁优先级(从 0001 开始)
    • 目标文件名
    • 打补丁的原因
    • .patch 扩展

例子:

0001-configure.ac-convert-AC_TRY_COMPILE-AC_COMPILE_IFELS.patch
  1. 将补丁文件存放在buildroot/package/"your package name"/文件夹中。

无需修改配置文件,所有补丁都会自动尝试应用。

  1. 如果失败,reject-patch 文件(名称与您尝试修补的文件类似,但扩展名为.rej)将存放在包提取文件夹中。
于 2017-05-16T18:33:19.500 回答
3

在研究了 buildroot 架构之后,我了解到 buildroot 使用 quilt 工具来应用补丁。quilt 跟踪“patches”目录中名为“series”的文件中的所有补丁。您必须将补丁保存在此目录中。并按照您希望应用补丁的顺序在系列文件中添加补丁条目,将首先应用的补丁保持在顶部。

这样,当您运行 buildroot makefile 时,它​​将自动应用系列文件中列出的补丁。

于 2011-06-27T14:13:10.980 回答
3

使用*_OVERRIDE_SRCDIR和跟踪子模块中的所有内容

我强烈建议您不要使用补丁,而是这样做:

myproject/
  .git/
  submodules/buildroot/
  submodules/source_of_my_package/

并且只需在一个子模块中跟踪您的源代码,该子模块指向您的项目分支,顶部有您的补丁。

这将使一切变得更加理智和易于跟踪。

更多信息:如何修改 Buildroot 包的源代码以进行包开发?

BR2_GLOBAL_PATCH_DIR树外补丁

目录结构:

添加到配置:

BR2_GLOBAL_PATCH_DIR=../global_patch_dir

然后构建:

cd buildroot
make

该补丁应output/build/packagename-1.0.0/在构建之前应用。

于 2017-06-03T05:23:51.830 回答