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