????????最近在研究imx6ull linux下4G模塊驅動的移植,參考的移遠ec20的移植方法,添加了GobiNet驅動,編譯了quectel-CM工具,并且可以正常撥號,分配到ip,如下:????????
? ? ? ? ping外網也沒有壓力,如下:
? ? ? ? 但是手上還有有方N720 4G模塊,可以通過pppd撥號上網,感覺比較麻煩,如果換模塊了還要調用不同的ppp撥號腳本,想著能不能也和移遠一樣,通過quectel-CM這個直接撥號。想法很好,但是實現起來不是很容易哈。
? ? ? ? 通過多方渠道,主要是百度,并沒有找到有方官方提供的相關源碼,昨天突發奇想,能不能研究一下移遠的源碼,看看能不能改一下呢,使其滿足要求呢?畢竟GobiNet不是移遠獨有的,它是高通的產物。
? ? ? ?聯想到移植驅動時都和idVendor?idProduct這兩個有關,移遠EC20的是2C7C 0125?,有方N720的是2949 8247 。
????????我想一定和這個有關,那就打開源碼看一下吧。在GobiUSBNet.c中全局搜索2C7C或者0125,找到如下代碼:????????
static const struct usb_device_id QuecGobiVIDPIDTable [] =
{GOBI_FIXED_INTF( 0x05c6, 0x9003 ), // Quectel UC20GOBI_FIXED_INTF( 0x05c6, 0x9215 ), // Quectel EC20 (MDM9215)GOBI_FIXED_INTF( 0x2c7c, 0x0125 ), // Quectel EC20 (MDM9X07)/EC25/EG25GOBI_FIXED_INTF( 0x2c7c, 0x0121 ), // Quectel EC21GOBI_FIXED_INTF( 0x2c7c, 0x0306 ), // Quectel EP06GOBI_FIXED_INTF( 0x2c7c, 0x0435 ), // Quectel AG35GOBI_FIXED_INTF( 0x2c7c, 0x0296 ), // Quectel BG96GOBI_FIXED_INTF( 0x2c7c, 0x0191 ), // Quectel EG91GOBI_FIXED_INTF( 0x2c7c, 0x0195 ), // Quectel EG95 GOBI_FIXED_INTF( 0x2c7c, 0x0512 ), // Quectel EG12/EP12/EM12/EG16/EG18,SDx20GOBI_FIXED_INTF( 0x2c7c, 0x0620 ), // Quectel EG20,SDx24GOBI_FIXED_INTF( 0x2c7c, 0x0800 ), // Quectel RG500Q,RM500Q,RM510Q,SDX55//Terminating entry{ }
};
? ? ? ? 多么的熟悉呀,添加linux 4G模塊驅動的時候好像也有和這個差不多的東西,如下:
? ? ? ? 果斷將有方n720的添加進去,編譯一下行不行。
? ? ? ? 使用沒有添加有方N720支持的內核啟動設備后如下,并沒有GobiNet相關的提示。
? ? ? ??使用添加有方N720支持的內核啟動設備后如下,就有GobiNet相關的提示了。這個證明我的想法的正確的。
? ? ? ? 使用quectel-CM工具試一下看看能不能撥號成功,好家伙,竟然沒成功。報錯了,如下:
? ? ? ? 初步猜測應該是GobiUSBNet.c文件里應該還有其他與idVendor?idProduct相關的操作,繼續搜索2c7c,發現如下代碼:
? ? ? ? 這個應該就是關鍵部分,因為其他的地方都沒有2c7c相關的內容了,通過上下文引用知道
pGobiDev->mbMdm9x07 pGobiDev->mbMdm9x06是一個bool類型,就是一個標志,代表不同的模塊類型,同時pGobiDev->mbMdm9x06上下文中只有這個地方使用了,那這個就應該不需要考慮了。那就從pGobiDev->mbMdm9x07下手了,仿照原來的代碼將有方n720的也加進去,改成如下:
? ? ? ? 重新編譯內核啟動,如下:
? ? ? ? 竟然多了一句creating qcqmi0,這個足以證明上面的改動有對了。
? ? ? ? quectel-CM撥號試一下
? ? ? ? 雖然成功撥號了,但是發現缺少
????????Find /sys/bus/usb/devices/1-1 idVendor=2c7c idProduct=0125這個提示,應該是quectel-CM源碼也需要修改。打開源碼,在main.c文件中搜索2c7c,果然發現了秘密,如下:
? ? ? ? 2c7c是移遠EC20模塊的idVendor?,05c6是QUALCOMM(高通)的idVendor ,這個說明了
quectel-CM源碼也不是移遠獨創的,也是用的高通的源碼。既然如此,那就將有方N720的加上,如下:
????????重新重新編譯一下quectel-CM???????,使用新的quectel-CM撥號。如下:
? ? ? ? 成功了,哈哈哈。
? ? ? ? 不僅分配了ip,啟動了usb0網卡,還有了Find /sys/bus/usb/devices/1-1 idVendor=2949 idProduct=8247提示。
????????試一下ping外網完全無壓力,如下:
? ? ? ? 至此,我認為GobiNet及quectel-CM支持有方N720 4G模塊的修改工作應該是完成了。
? ? ? ? 修改后的源碼可以通過如下鏈接下載
????????GobiNet
????????CM???????
????????這個只是我自己研究測試使用,至于穩定性還需要驗證,如果誰用了我修改的源碼,導致項目或者設備出問題的概不負責。
? ? ? ? 理論上市面上的4G模塊都可以通過這樣修改來實現支持。