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