一種簡單快速的Openwrt內核patch製作方式

openwrt的patch機制非常不錯,應用的很廣泛,從內核到應用都有涉及,patch機制也方便了多個用戶之間的功能同步及差異控制。

在openwrt上常用的patch生成及修改方式爲QUILT工具,應用此工具可以修改現有補丁以及生成新的補丁,但個人認爲也有一定侷限性;

以普通的開發方式來看,一般我們都會在build_dir中修改現有代碼,然後重新編譯,再測試功能直到功能OK。

在此過程中,我們會使用自己熟悉的編輯工具來編輯文件,如Notepad++,VIM等,但quilt生成補丁前,需要使用quilt edit文件,

這導致了一些不方便,不能讓我們隨時隨處隨意的修改源文件。

下面我將介紹另一種patch製作方式,將不受此侷限,即使用Linux自帶的diff命令即可;

在編輯修改源文件之前,只需要保存一份我們要修改的源文件用於對比即可。

以kernel加載4G模塊來舉例,一般我們會在option.c中添加4G模塊的VID,PID

第一,保存原有的option.c文件

第二,修改option.c,添加我們的4G模塊的VID,PID

第三,重命名文件爲option_new.c,此處主要是爲了方便diff,編譯時還是需要使用option.c文件名的

修改好了文件,下面 開始製作patch,執行一條指令即可:

diff -ruN option.c option_new.c > 999-kernel-option-add-new-dev.patch

我生成的patch內容如下:

--- option.c	2018-09-04 17:14:32.000000000 +0800
+++ option_new.c	2018-06-12 14:56:55.000000000 +0800
@@ -372,8 +372,11 @@
 /* SpeedUp SU9800 usb 3g modem */
 #define SPEEDUP_PRODUCT_SU9800			0x9800
 
-/* LongShang  U8300W  LET modem */
-#define LONGSHANG_PRODUCT_U8300W         0x9b05
+/* LongShang  U8300C/W  LET modem */
+#define LONGSHANG_PRODUCT_U8300CW         0x9b05
+
+/* LongShang  U9300C/W  LET modem */
+#define LONGSHANG_PRODUCT_U9300CW         0x9b3c
 
 /* Haier products */
 #define HAIER_VENDOR_ID				0x201e
@@ -647,6 +650,7 @@
 };
 
 static const struct usb_device_id option_ids[] = {
+	{ USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25 */
 	{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MZ382) },
 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
@@ -1699,7 +1703,10 @@
 	{ USB_DEVICE_INTERFACE_CLASS(LONGCHEER_VENDOR_ID, SPEEDUP_PRODUCT_SU9800, 0xff) },
 	{ USB_DEVICE(LONGCHEER_VENDOR_ID, ZOOM_PRODUCT_4597) },
 	{ USB_DEVICE(LONGCHEER_VENDOR_ID, IBALL_3_5G_CONNECT) },
-	{ USB_DEVICE(LONGCHEER_VENDOR_ID, LONGSHANG_PRODUCT_U8300W) },
+	{ USB_DEVICE(LONGCHEER_VENDOR_ID, LONGSHANG_PRODUCT_U8300CW),
+		.driver_info = (kernel_ulong_t)&net_intf4_blacklist },
+	{ USB_DEVICE(LONGCHEER_VENDOR_ID, LONGSHANG_PRODUCT_U9300CW),
+		.driver_info = (kernel_ulong_t)&net_intf4_blacklist },
 	{ USB_DEVICE(HAIER_VENDOR_ID, HAIER_PRODUCT_CE100) },
 	{ USB_DEVICE_AND_INTERFACE_INFO(HAIER_VENDOR_ID, HAIER_PRODUCT_CE81B, 0xff, 0xff, 0xff) },
 	/* Pirelli  */
@@ -1872,6 +1879,7 @@
 #ifdef CONFIG_PM
 	.suspend           = usb_wwan_suspend,
 	.resume            = usb_wwan_resume,
+	.reset_resume      = usb_wwan_resume, //for EC25
 #endif
 };
 

接着,只需要修改頭兩行文件的路徑即可

--- a/drivers/usb/serial/option.c	2018-09-04 17:14:32.000000000 +0800
+++ b/drivers/usb/serial/option.c	2018-06-12 14:56:55.000000000 +0800

將文件路徑設爲kernel下的絕對路徑即可,加上前綴a表示源文件,b表示修改之後的文件

將此patch拷貝到target/linux/對應的board下即可,或者發佈出去供其他人員使用,前提要是同一個內核版本

 

 

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