在有些情况下,由于版本和软件环境的问题,需要对buildroot中构建的软件包修改之后才能编译通过。这个时候如果直接修改buildroot中build文件夹下的源文件,虽然可以编译通过,但一旦clean之后,又无法编译通过了,这个时候就需要对package进行补丁操作了。
buildroot构建正常情况都是在buildroot/output/build目录下进行的,这个目录下会有许多软件包,如果编译过程中报错,则需要进入到对应的软件中,找到报错或者需要补丁的文件。这里我以host-systemd为例;
进入buildroot/output/build/host-systemd-254.9目录,先备份未修改的原始文件;
cd buildroot/output/build/host-systemd-254.9
mkdir -p ../tmp_systemd/
cp src/basic/missing_loop.h ../tmp_systemd/
修改原始文件:vi src/basic/missing_loop.h,比如,我加入如下的代码:
修改完后保存退出。这个时候,源文件和刚刚备份的文件就有了差异,我们可以使用diff命名把差异生成patch文件;
cd buildroot/output/build
diff -uNr tmp_systemd/missing_loop.h host-systemd-254.9/src/basic/missing_loop.h > tmp_systemd/0003_fix_missing_loop.patch
这个patch文件就是我们需要的补丁文件了。把这个patch放在buildroot下package对应的目录中,就可以了,下次编译的时候,buildroot会自动先打patch再进行编译;
cp 0003_fix_missing_loop.patch ../../../../buildroot/package/systemd/