1. 程式人生 > >Linux移植EC20 4G模組驅動簡易教程

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。我會盡快發給你.