在使用全志Tina系统中,就发现在pack中有很多原文件夹中只有patch和makefile,这就导致我们无法修改源码:在out中找到源码修改后,只要make,就会被原始的代码覆盖。Tina是基于openwrt修改,那我们就参考openwrt,把我们修改的代码做成patch,就可以解决问题了。很可惜,如果用git生成的补丁,make会报错,提示patch错误。我目前确定,openwrt中确使用quilt工具制作补丁。
一:安装quilt
sudo apt-get install quilt
然后,gedit ~/.quiltrc,在home下新建.quiltrc文件,内容如下
QUILT_DIFF_ARGS="--no-timestamps --no-index -p ab --color=auto"
QUILT_REFRESH_ARGS="--no-timestamps --no-index -p ab"
QUILT_SERIES_ARGS="--color=auto"
QUILT_PATCH_OPTS="--unified"
QUILT_DIFF_OPTS="-p"
EDITOR="vi"
提醒,这个文件十分重要,否则后面运行quilt报错,都是和这个配置文件有关。特别说明,最后EDITOR是表示编辑用vi,但是用下面介绍的方法,是用windows的UE来处理。
二、正常编译Tina后,在out中把我们要用的某个源码文件夹拷贝到其他地方。注意,这个源码,是已经打好了pack中对应patch。
三、关键来了。
我们查看pack中对应的源码文件夹,一般有00x-fix-xxxx.patch文件,00x是patch的序号,我们新的patch文件名,序号要比00x大。之前是006-fix-xxx,我们新的patch就要是007-fix-xxx.patch。知道这个后,我们进入到拷贝出来的源码中,
1:创建patch:quilt new 007-fix-test.patch
2:这个把你可能会修改的文件加入到patch中,如我会修改src/test.c:
quilt add src/test.c
然后,用我们熟悉的编辑工具编辑test文件。
3:生成patch
quilt refresh
在当前文件下,我们可以看到多出一个文件夹patch,里面就是新的007patch了。我们再把这个patch拷贝到pack对应的源码文件夹中,make,就会自动生成我们修改后的代码了。
你可以反复修改这个文件,重复再执行quilt refresh即可,程序会继续生成这个007的patch。
如果有多个文件,请多次执行quilt add即可。
我的这个流程,和网上的大部分文章的不同是在第2点上,我是用windows的编辑器来修改文件的。
以上测试验证,方法简单可行。如有问题,请检查.quiltrc。