Linux移植EC20 4G模組驅動簡易教程
關於4G模組常見的品牌與型號:
品牌 |
型號 |
市場價格 |
晶片組 |
狀態 |
HUAWEI |
ME909s-821 |
210-260 |
海思晶片,只有五模 |
在售 |
HUAWEI |
ME909s-521 |
400左右 |
高通晶片 |
在售 |
中興 |
ME3760 |
260左右 |
中芯微 |
停產 |
中興 |
MW3630 |
210左右 |
高通9x07 |
在售 |
移遠 |
EC20 |
240-290 |
高通9x15 |
在售 |
移遠 |
EC20 V2.0 |
190-240 |
高通9x07 |
在售 |
龍尚 |
8300系列 |
260左右 |
高通9x15 |
停產 |
龍尚 |
U9300系列 |
200左右的區間 |
高通9x07 |
在售 |
綜合分析:今年和接下來的時間裡基本會是高通9x07和海思方案的天下,由於海思基本是華為在用;其它廠家基本轉向9x07了。
中興一代的3760、龍尚的8300系列產品是市場上最早見的模組;技術相當不成熟,加上原廠的支援較差,不建議使用。
還有一些品牌,因為市場佔有率較小未統計在表格中。
移遠在幾家中技術支援算是最好的了,加上價效比較好。後面慢慢變成了我們用的主要模組。今天就以移遠模組為例,說說linux驅動的移植。
平臺:TI AM3352
OS:ubuntu 12.04 arm
核心:3.2.0
第一步:核心驅動的修改。
相關的配置項位於menuconfig的Device Drivers->USB Support-> USB Serial Converter support-> USB driver for GSM and CDMA modems
在上面的配置項中可以看到USB Serial Converter,實際上4G模組在作業系統中的介面就是串列埠裝置(USB轉的Serial),所謂的核心驅動移植其實就是在USB轉串列埠驅動中加上對應usb裝置的pid和vid,具體可以通過lsusb查詢得到。
具體程式碼修改:
1、在”#define QUALCOMM_VENDOR_ID 0x05C6”下面加上移遠模組的PID和VID。
//add by alan 150820
#define QUECTEL_VENDOR_ID 0x2C7C
#define QUECTEL_PRODUCT_UC15 0x9090
#define QUECTEL_PRODUCT_UC20 0x9003
#define QUECTEL_PRODUCT_EC20 0x9215
#define QUECTEL_PRODUCT_EC25 0x0125
#define QUECTEL_PRODUCT_EC21 0x0121
2、在“static const struct usb_device_id option_ids[]”函式中的
“{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */”後面加上
//add by alan 150820
{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC15)}, /* QUECTEL UC15 */
{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC20)}, /* QUECTEL UC20 */
{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_EC20)}, /* QUECTEL EC20 */
{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25)}, /* QUECTEL EC25 */
{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21)}, /* QUECTEL EC21 */
3、在” option_probe”函式的” data = serial->private = kzalloc(sizeof(struct usb_wwan_intf_private), GFP_KERNEL);”前面加上
// Add to cancel the binding of UC20 NDIS interface -> start
if (serial->dev->descriptor.idVendor == 0x05c6 &&
serial->dev->descriptor.idProduct == 0x9003 &&
serial->interface->cur_altsetting->desc.bInterfaceNumber == 4)
return -ENODEV;
// Add to cancel the binding of UC20 NDIS interface -> end
// Add to cancel the binding of EC20 NDIS interface -> start
if (serial->dev->descriptor.idVendor == 0x05c6 &&
serial->dev->descriptor.idProduct == 0x9215 &&
serial->interface->cur_altsetting->desc.bInterfaceNumber == 4)
return -ENODEV;
// Add to cancel the binding of EC20 NDIS interface -> end
// Add to cancel the binding of EC25 NDIS interface -> start
if (serial->dev->descriptor.idVendor == 0x2C7C &&
serial->interface->cur_altsetting->desc.bInterfaceNumber == 4)
return -ENODEV;
// Add to cancel the binding of EC25 NDIS interface -> end
注:其實在步驟1、步驟2中增加的程式碼已經足夠將模組驅動起來了,這裡的程式碼主要是為了NDIS方式撥號。
4、模組一般有多種撥號方式,比較老的有PPP方式撥號,很多用過3G模組的朋友都會知道這個方法。由於4G模組的上下行速度都非常快,用PPP方式受協議限制速率跑不高,一般現在建議用NDIS或QWAN方式。移遠模組自帶了一套驅動和撥號軟體叫GobiNet。將
Quectel_Linux_GobiNet_SR01A02V15.zip解壓到核心的drivers/net/usb/目錄下,並修改Makefile,新增:
obj-$(CONFIG_USB_GOBI_NET) += Quectel_GobiNet_SR01A02V13/
修改Kconfig檔案,在endmenu前加上:
config USB_GOBI_NET
tristate "Gobi USB Net driver for Quectel module"
help
Support Quectel module.
A modem manager with support for GobiNet is recommended.
To compile this driver as a module, choose M here: the module will be called GobiNet.
5、做完這些,就可以進行核心的配置了。
Make menuconfig,確認以下選項:
Device Drivers->USB Support-> USB Serial Converter support-> USB driver for GSM and CDMA modems 選擇為M或*
Device Drivers->Network device support->USB Network Adapters->Gobi USB Net driver for Quectel module 選擇為M
6、編譯並下載到目標機上測試
Make uImage && make modules
7、系統啟動後,ls /dev/ttyUSB*,正如驅動正常一般會有/dev/ttyUSB0到ttyUSB3的接口出現,說明USB Serial的驅動已正常工作。
8、編譯quectel-CM撥號程式。這個軟體的使用比較簡單,直接執行就行了,軟體幫你自動識別APN。
寫在最後:這個文件主要目的是把整個移植的流程進行說明,實際應用中使用其它模組也可以的。以前3G時代的PPP儘量不要用在4G模組上,否則模組的效能根本跑不出來。
至於模組的硬體電路,供電部分非常重要。最好採用獨立電源,而且最大電流能支援3A,並就近加上470的鉭電容,有了這個設計基本上可以相容市面上大部分的模組了。
模組的驅動資料,可以加我的QQ 527130394。我會盡快發給你.