给openwrt驱动打补丁

使用quilt内核打补丁的步骤

1、quilt简介

quilt是一个轻量级的版本控制工具

常用命令如下:

quilt series:查看所有的patch

注意点:需要在对应驱动下的目录下使用该命令查看

quilt top:查看栈顶的patch,一般在自己添加一个patch后进行查看检查

quilt applied:查看已应用的patch

quilt unapplied:查看未应用的patch

quilt files:查看patch关联的文件:

 

quilt diff:对比修改文件

不添加参数会对所有的文件进行对比输出

其他常用命令:

quilt new:新建patch文件:需要将patch文件的名字考虑好,新建patch后名字将不可更改

quilt remove:解除文件与patch的关联。操作后patch中针对此文件的diff内容会从patch中删除。

quilt push:patch入栈。即选择patch并应用,或者说导入patch。

quilt pop:patch出栈。撤销,导出patch,patch文件并不删除。

quilt import:从其他地方导入patch

quilt edit:编辑当前文件,包含了quilt add操作,并针对top patch。首次使用会提示选择编辑器

quilt refresh:保存当前的patch

实战操作

对驱动文件增加补丁:
·make target/linux/clean

进入OpenWrt目录,将内核清楚干净,该操作会将生产的驱动文件清楚干净

执行后linux-3.10.14的目录被移除

·make target/linux/prepare

将内核应用所有patch并生成最新代码到build_dir目录下

执行后内核从新加载出来:

·cd build_dir/linux-ar71xx_generic/linux-3.3.8 
进入最新kernel的source code目录。

·quilt new platform/965-ipheth-iphone5-6-support.patch 
新建965-ipheth-iphone5-6-support.patch,并指定保存目录到patches/platform/下

现在可以使用quilt top查看新添加的patch

·quilt edit drivers/net/wireless/mt_wifi/embedded/common/cmm_info.c 
编辑需要更改的文件

此时进入了这个nano的编辑器

修改后

·quilt refresh 
保存patch。

在可以进入到自己的patches目录下对修改进行查看。

·make target/linux/update V=99 
进入Openwrt目录, make target/linux/update V=99,将patch应用,此时会生成新patch,到target/linux/ar71xx/patches-3.3/下查看。

Index: linux-3.10.14/drivers/net/wireless/mt_wifi/embedded/common/cmm_info.c
===================================================================
--- linux-3.10.14.orig/drivers/net/wireless/mt_wifi/embedded/common/cmm_info.c
+++ linux-3.10.14/drivers/net/wireless/mt_wifi/embedded/common/cmm_info.c
@@ -3209,6 +3209,47 @@ RTMP_STRING *GetAuthMode(CHAR auth)
 */
 #define	LINE_LEN	(4+33+20+23+9+7+7+3)	/* Channel+SSID+Bssid+Security+Signal+WiressMode+ExtCh+NetworkType*/
 
+INT AtoHex(CHAR c)
+{
+        if (c >= 'A' && c <= 'F')
+                return (c - 'A' + 0x0A);
+        if (c >= 'a' && c <= 'f')
+                return (c - 'a' + 0x0a);
+        if (c >= '0' && c <= '9')
+                return (c - '0');
+        return -1;
+}
+
+VOID SsidTranslateHex(CHAR *in,CHAR *out)
+{
+        if(strncmp(in,"0x",2) == 0)
+        {
+                UCHAR c;
+                CHAR c1,c2;
+                CHAR *pc = in+2; //skip the 0x
+                int x = 0;
+                char tmpbuf[200];
+                memset(tmpbuf,0,sizeof(tmpbuf));
+                while(pc && *pc && *(pc+1))
+                {
+                        if((c1 = AtoHex(*pc)) < 0)    
+                                break;
+                        if((c2 = AtoHex(*(pc+1))) < 0)
+                                break;
+                        c1 &=0x0f;
+                        c2 &=0x0f;
+
+                        c = c1 << 4 | c2;
+                        tmpbuf[x] = c;
+                        x++;
+                        pc +=2;
+                }
+                sprintf(out, "0x");
+                strcpy(out,tmpbuf);
+        }
+        return;
+}
+
 VOID RTMPCommSiteSurveyData(
 	IN  RTMP_STRING *msg,
 	IN  BSS_ENTRY *pBss,
@@ -3218,6 +3259,7 @@ VOID RTMPCommSiteSurveyData(
 	UINT        Rssi_Quality = 0;
 	NDIS_802_11_NETWORK_TYPE    wireless_mode;
 	CHAR		Ssid[MAX_LEN_OF_SSID +1];
+	CHAR		Ssid1[(MAX_LEN_OF_SSID + 1)*2];
 	RTMP_STRING SecurityStr[32] = {0};
 
 		/*Channel*/
@@ -3231,9 +3273,11 @@ VOID RTMPCommSiteSurveyData(
 	else
 	{
 		INT idx = 0;
-		sprintf(Ssid, "0x");
-		for (idx = 0; (idx < 14) && (idx < pBss->SsidLen); idx++)
-			sprintf(Ssid + 2 + (idx*2), "%02X", (UCHAR)pBss->Ssid[idx]);
+		sprintf(Ssid1, "0x");
+		//for (idx = 0; (idx < 14) && (idx < pBss->SsidLen); idx++)
+		for (idx = 0;(idx < MAX_LEN_OF_SSID) && (idx < pBss->SsidLen);idx++) //change by ly 20200224
+			sprintf(Ssid1 + 2 + (idx*2), "%02X", (UCHAR)pBss->Ssid[idx]);
+		SsidTranslateHex(Ssid1,Ssid);
 	}
 		sprintf(msg+strlen(msg),"%-33s", Ssid);

参考来源:https://blog.csdn.net/wgl307293845/article/details/90369789

https://blog.csdn.net/lixiaofeng0/article/details/113735830

十分感谢

------------------------------------------------------------------------------------------------------------------------------

打了一天的补丁总算把补丁搞定了,在linux内核外需要补丁的地方,可以将文件一到内核中来先生成一个patch在将patch放到对应的地方去。

 

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘多拉的面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值