Embedded 如何将修补程序应用于Buildroot中的包?

Embedded 如何将修补程序应用于Buildroot中的包?,embedded,linux-kernel,buildroot,Embedded,Linux Kernel,Buildroot,我正在开发一个嵌入式系统,它使用buildroot作为构建内核和根文件系统的工具。我想在这个内核源代码树上应用一些补丁,有人能告诉我buildroot是如何应用补丁的吗?在研究了buildroot体系结构之后,我知道buildroot使用了Cutter工具来应用补丁。Cutter跟踪“patches”目录中名为“series”的文件中的所有补丁。您必须将修补程序保存在此目录中。并按应用修补程序的顺序在序列文件中添加修补程序条目,使修补程序始终位于顶部 这样,当您运行buildroot makef

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

在研究了buildroot体系结构之后,我知道buildroot使用了Cutter工具来应用补丁。Cutter跟踪“patches”目录中名为“series”的文件中的所有补丁。您必须将修补程序保存在此目录中。并按应用修补程序的顺序在序列文件中添加修补程序条目,使修补程序始终位于顶部


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

以展开@pradeepchhentri的答案。Cutter将查找与*.mk文件位于同一文件夹中的文件。要构造适当的文件,请执行以下操作:

  • 将源程序包从原始文件差异化为一个名为

    packagename-编号-说明.patch

    在哪里

    packagename-必须与包名相同

    编号-如果要应用多个修补程序,则修补程序的应用顺序(否则将按字母顺序应用)

    说明-可以是任何自由文本

  • 将此文件放在与[packagename].mk文件和package/Config.in文件相同级别的包中


  • 如果你这么做的话,别忘了吹走你的构建文件或进行[package]-重建。如果操作正确,您应该会看到一条“Patching…”消息。

    有关buildroot项目中修补程序文件的一些详细信息:

  • 你必须

    diff -u "old_file" "new_file" > file.patch
    
  • 站在中定义的包提取位置的正上方tar.gz

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

  • 如果您想知道“旧文件”路径是否与原始路径不同-别担心,重要的是“新文件”路径和名称-它应该与您提取的包匹配

  • buildroot中已使用/定义的修补程序的命名约定(所有部分都用'-'符号分隔):

    • 4位修补程序优先级(从0001开始)
    • 目标文件名
    • 修补的原因
    • .斑块扩展
  • 例如:

    0001-configure.ac-convert-AC_TRY_COMPILE-AC_COMPILE_IFELS.patch
    
  • 将补丁文件存放在buildroot/package/“您的包名”/文件夹中
  • 不需要修改配置文件,所有补丁都将自动为应用程序试用

  • 如果失败,拒绝修补程序文件(名称与您尝试修补的文件类似,但扩展名为.rej的文件)将存放在package extracted文件夹中

  • 使用
    *\u OVERRIDE\u SRCDIR
    并跟踪子模块中的所有内容

    我强烈建议您不要使用修补程序,而是:

    myproject/
      .git/
      submodules/buildroot/
      submodules/source_of_my_package/
    
    只需在子模块中跟踪您的源代码,该子模块指向您的项目分支,并在顶部显示您的补丁

    这将使一切变得更理智,更容易跟踪

    更多信息,请访问:

    BR2\u全局\u补丁\u目录
    树外补丁

    目录结构:

    • .git/
    • buildroot/
      buildroot子模块,如所述:
    • global\u patch\u dir/packagename/0001 my test.patch
    添加到配置:

    BR2_GLOBAL_PATCH_DIR=../global_patch_dir
    
    然后使用以下工具进行构建:

    cd buildroot
    make
    

    在生成之前,应将该修补程序应用于
    output/build/packagename-1.0.0/

    Buildroot不使用coult(至少在过去几年中没有使用它)。提到了coult使用的“系列”文件。当前状态为:“以前,也可以在程序包目录中添加一个系列文件(如被使用的文件)。在这种情况下,序列文件定义修补程序应用程序顺序。这已弃用,并将在将来删除。不要使用序列文件。”所以这个答案很快就会被弃用。另外的小提示对我有所帮助,所以我把它放在这里:。