如何在Buildroot中将补丁应用到包中?

时间:2011-06-17 08:03:56

标签: embedded linux-kernel buildroot

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

4 个答案:

答案 0 :(得分:6)

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

  1. 将您的源包从原始文件扩散到名为

    的文件中

    <强>包名 - 的 - 的描述 .patch

    ,其中

    packagename - 必须与包名称相同

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

    说明 - 可以是任何免费文字

  2. 将此文件放入与[packagename] .mk文件和包/ Config.in文件相同级别的包中。

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

BR2_GLOBAL_PATCH_DIR树外补丁

目录结构:

添加到配置:

BR2_GLOBAL_PATCH_DIR=../global_patch_dir

然后用:

构建
cd buildroot
make

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

使用*_OVERRIDE_SRCDIR

生成修补程序

如果你只是直接在output/build/下破解包裹,你就不会有任何差异。

而是使用*_OVERRIDE_SRCDIR机制,它允许您指向您选择的git仓库:How to modify the source of Buildroot packages for package development?,然后您应该将其作为git子模块进行跟踪。

答案 3 :(得分:1)

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

  1. 你必须

    diff -u "old_file" "new_file" > file.patch
    
  2. 同时站在

    中定义的包 tar.gz 的提取位置之上
    PACKAGE_NAME_SOURCE
    

    这意味着,您的文件路径必须包含解压缩的包文件夹名称。

    1. 如果你想知道&#34; old_file&#34; 路径是否会与原路径不同 - 不用担心,重要的是 >&#34; new_file&#34; 路径和名称 - 它应与您提取的包匹配。

    2. 在buildroot中已经使用/定义的补丁的命名约定(所有部分都用&#39; - &#39; 符号分隔):

      • 4位数补丁优先(从0001开始)
      • 目标文件名
      • 修补原因
      • .patch extention
    3. 示例:

      0001-configure.ac-convert-AC_TRY_COMPILE-AC_COMPILE_IFELS.patch
      
      1. buildroot / package /&#34;您的包名&#34; / 文件夹中存放补丁文件。
      2. 不需要修改配置文件,所有补丁都将自动尝试应用。

        1. 如果失败,拒绝补丁文件(命名类似于您尝试修补的文件,但 .rej 扩展名)将存放在软件包解压文件夹中。