如何在Openwrt上,针对内核创建自定义Patch?

参考资料:

1.http://wiki.openwrt.org/doc/devel/patches?s[]=quilt   --- 官方对于如何打Patch的说明

2.http://blog.csdn.net/hbsong75/article/details/8825184  --- 使用quilt的小例子

 

众所周知,openwrt采用的是:从各个开源站点下载源码,解压缩,然后再打上N多Patch的方式,来搭建自己的编译环境的。其中,针对内核的编译,也是这么操作的。

那么,如何为内核创建自定义的Patch呢?

1. 使用quilt工具

    quilt是一个开源的管理Patch的工具,openwrt采用此工具来生成Patch和打上Patch。具体使用方法,见参考资料2

2.从官网下载的openwrt的SDK中,针对内核已经有一些现存的Patch了。他们放在: target/linux/XXX子目录中,其中:

generic/ contains patches common to all architectures and   --- generic目录下存放的Patch,适用于所有的设备结构,即通用patch

platform/ contains patches specific to the current target       --- platform目录下存放的Patch,则适用于此platform自身。当然,实际就是类似:ar71xx,ramips这类的platform 

3. 如何为一个具体的Platform创建自定义的Patch?

    举例:由于开发需要,需要针对AR9331的目标设备,在内核增加一些代码,其中需要修改文件:build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620/linux-3.14.18/arch/mips/ath79/Kconfig,增加自定义的几个宏定义。那么,如何为这几个自定义的宏定义,创建Patch?

A.准备一个干净的SDK,即没有编译过的干净的openwrt SDK

B.通过make menuconfig 和 make kernel_menuconfig,设置好目标设备类型:这里就是选择好我们要编译的是 ar71xx目标 --- 否则,openwrt怎么知道是需要打上针对哪个platform的Patch呢?

C. 敲入命令:make target/linux/{clean,prepare} V=s QUILT=1 --- 用于将linux内核压缩包解压并完成openwrt自带的Patch文件的打入工作

   实际上,在上一步 make kernel_menuconfig后,就已经完成这一步的操作了 

D. 进入内核解压缩后,所在的目录,这里是:build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.14.18  --- 此目录下,有一个patches目录,里面有:

   generic  platform  series  其中,generic和platform是目录,就是针对此目标设备的patches了

   由于我们这里要增加的是针对 特定platform的,所以进入platform目录,再看看:里面有N多.patch文件,从102开始,到902  --- 注意:openwrt的patch打上顺序,是从小序号开始的,即从102开始;因此,我们自定义的Patch,需要放到最后。 但是,如果我们选择1001开始,似乎这个就变成第一个被打上的patch了  

E. 回到目录:build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.14.18

   我们选择 从910开始自定义的Patch创建,则这里设置命令:quilt new platform/910-MIPS-ath79-XXXX.patch (名字要简短但有意义)

F. 进入实际要修改文件所在目录:build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.14.18/arch/mips/ath79 ,采用 quilt edit Kconfig,从而打开nano编辑工具,加入自定义内容,并保存退出

G. 敲入 quilt diff,可以看到我们修改的内容;

    敲入 quilt refresh,就可以将我们修改的内容,写入到对应的patch文件中了: 910-MIPS-ath79-XXXX.patch 

H. 将build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.14.18/patches/platform/910-MIPS-ath79-XXXX.patch 
 拷贝到target/linux/ar71xx/patches-3.14  --- 这样,就真正将这个Patch 收编到SDK中了

 

I.将之前解压缩的linux内核目录全部删除:  make target/linux/clean

  然后,再利用 make kernel_menuconfig  或者  make target/linux/prepare V=s QUILT=1 就看到我们自定义的Patch已经生效了

 

***************注意:上述方式仅仅用于对原有内核文件修改的处理方式,如果是新增一个文件,则需要******************* 

比如:若需要在build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.14.18/include/linux中加入文件:xxxx.h,则需要将此文件放到:

target/linux/ar71xx/files/include/linux 目录中

 

posted @ 2015-02-28 14:17  拉古小师傅  阅读(2417)  评论(0编辑  收藏  举报