openwrt里面给kernel生成patch的例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011007991/article/details/55509632

openwrt里面给kernel生成patch的例子。

1.给Makefile生成patch Makefile里面添加了以下行:
proc-y += flashid.o
进入linux-3.18.21/fs/proc目录,备份修改之前的Makefile为Makefile.bak
然后在linux根目录下面使用以下命令生成patch

diff -uprN ./fs/proc/Makefile.bak ./fs/proc/Makefile > flashid.makefile.patch

生成的flashid.makefile.patch内容如下:

    --- ./fs/proc/Makefile.bak 2017-01-21 08:47:02.049371555 +0800 
    +++ ./fs/proc/Makefile 2017-01-21 07:50:26.677285655 +0800  @@ -24,6 +24,7 @@ proc-y += softirqs.o  proc-y += namespaces.o  proc-y += self.o  proc-y += thread_self.o 
    +proc-y += flashid.o  proc-$(CONFIG_PROC_SYSCTL) += proc_sysctl.o  proc-$(CONFIG_NET) += proc_net.o  proc-$(CONFIG_PROC_KCORE) +=
    kcore.o

2.给flashid.c生成patch flashid.c为全新的文件,没有对比的文件,在linux根目录下面使用以下命令生成patch
diff -uprN ./fs/proc/flashid.c.bak ./fs/proc/flashid.c >flashid.flashid.c.patch

生成的flashid.flashid.c.patch内容如下:

    --- ./fs/proc/flashid.c.bak 1970-01-01 08:00:00.000000000 +0800 
    +++ ./fs/proc/flashid.c 2017-01-21 07:49:39.617284465 +0800  @@ -0,0 +1,35 @@ 
    +#include 
    +#include 
    +#include 
    +#include 
    + 
    +#define FLASH_ID_LEN 0x8 
    +static int flashid_proc_show(struct seq_file *m, void *v) 
    +{ 
    + seq_printf(m, "%02x%02x%02x%02x%02x%02x%02x%02x ",

    + saved_flash_id[0], saved_flash_id[1],

    + saved_flash_id[2], saved_flash_id[3],
    + return 0; 
    +} 
    +static int _init proc_flashid_init(void) 
    +{ 
    + return 0; 
    +} 
    +module_init(proc_flashid_init);

3.. 给m25p80.c生成patch
进入linux-3.18.21/drivers/mtd/devices目录,备份修改之前的m25p80.c为m25p80.c.bak
然后在linux根目录下面使用以下命令生成
patch diff -uprN ./drivers/mtd/devices/m25p80.c.bak ./drivers/mtd/devices/m25p80.c > flashid.m25p80.c.patch
生成的flashid.m25p80.c.patch内容如下:

    --- ./drivers/mtd/devices/m25p80.c.bak 2017-01-21 09:23:44.389427272 +0800
    +++ ./drivers/mtd/devices/m25p80.c 2017-01-21 08:23:58.981336564 +0800  @@ -246,6 +246,9 @@ static int m25p80_erase(struct spi_nor *

    * matches what the READ command supports, at least until this driver

    * understands FAST_READ (for clocks over 25 MHz). 
    {

    struct mtd_part_parser_data ppdata;  @@ -302,6 +305,18 @@ static int
    m25p_probe(struct spi_device

    if (ret)

    return ret;

    //get flash unique id

4.把以上3个patch合成到一个文件中 cat flashid.*.patch > 0100-flashid.patch

5.修改生成的0100-flashid.patch里面的路径

./fs/proc/flashid.c.bak ==> a/fs/proc/flashid.c
./fs/proc/flashid.c ==> b/fs/proc/flashid.c

./drivers/mtd/devices/m25p80.c.bak ==> a/drivers/mtd/devices/m25p80.c
./drivers/mtd/devices/m25p80.c ==> b/drivers/mtd/devices/m25p80.c

./fs/proc/Makefile.bak ==> a/fs/proc/Makefile
./fs/proc/Makefile ==> b/fs/proc/Makefile

最终的0100-flashid.patch内容如下:

--- a/fs/proc/flashid.c 1970-01-01 08:00:00.000000000 +0800 
+++ b/fs/proc/flashid.c 2017-01-21 07:49:39.617284465 +0800 
@@ -0,0 +1,35 @@ 
+#include 
er 25 MHz). 
*/ 
+#define FLASH_ID_LEN 0x8 
+u8 saved_flash_id[FLASH_ID_LEN] = {0}; 
+ static int m25p_probe(struct spi_device *spi)

{
if (ret) 
proc-$(CONFIG_NET) += proc_net.o 
proc-$(CONFIG_PROC_KCORE) += kcore

6.复制生成的patch到kernel patch目录下面
复制patch文件到目录chaos_calmer/target/linux/ramips/patches-3.18下面
7. 使用生成的patch 直接make kernel的话不会打patch,patch只会在第一次编译时生效,所以需要先clean
kernel.
make ./target/linux/clean V=s
make ./target/linux/install

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章