嵌入式设备路由网络共享开发(2):移远Quectel系列4G模块驱动移值
前言
本文章介紹了在linux系統(tǒng)下,如何修改usb驅(qū)動支持移遠模塊,移遠模塊正常啟動后,通過USB連接到linux設(shè)備上,驅(qū)動正常加載后會在/dev/下產(chǎn)ttyUSB*設(shè)備。
一、USB串口驅(qū)動
1.1 添加VID和PID? ?
linux下通過lsusb就可以查看USB的VID和PID
#lsusb
Bus 001 Device 011: ID 2C7C:0125
說明這個USB設(shè)備的VID為2C7C,PID為0125;
File: [KERNEL]/drivers/usb/serial/option.c
static const struct usb_device_id option_ids[] = { //Added by Quectel { USB_DEVICE(0x2C7C, 0x0125) }, //End by Quectel { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) }, { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) }, { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD) }, { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD_LIGHT) },1.2 屏蔽沖突
File: [KERNEL]/drivers/usb/serial/qcserial.c
{USB_DEVICE(0x2C7C, 0x0125)}, /* Acer Gobi 2000 Modem device (VP413) */File: [KERNEL]/drivers/net/usb/qmi_wwan.c
{QMI_GOBI_DEVICE(0x2C7C, 0x0125)}, /* Acer Gobi 2000 Modem device (VP413) */1.3 添加零包機制
File: [KERNEL]/drivers/usb/serial/usb_wwan.c
static struct urb *usb_wwan_setup_urb(struct usb_serial *serial, int endpoint, int dir, void *ctx, char *buf, int len,void (*callback) (struct urb *)) { ……usb_fill_bulk_urb(urb, serial->dev,usb_sndbulkpipe(serial->dev, endpoint) | dir,buf, len, callback, ctx);//Added by Quectel for zero packetif (dir == USB_DIR_OUT) {struct usb_device_descriptor *desc = &serial->dev->descriptor;if (desc->idVendor == cpu_to_le16(0x2C7C) && desc->idProduct == cpu_to_le16(0x0125))urb->transfer_flags |= URB_ZERO_PACKET;}//End by Quectel for zero packetreturn urb; }1.4 添加重置
File: [KERNEL]/drivers/usb/serial/option.c
static struct usb_serial_driver option_1port_device = { …… #ifdef CONFIG_PM .suspend = usb_wwan_suspend, .resume = usb_wwan_resume, //Added by Quectel.reset_resume = usb_wwan_resume, //End by Quectel #endif };1.5 使用添加GobiNet
File: [KERNEL]/drivers/usb/serial/option.c
static int option_probe(struct usb_serial *serial, const struct usb_device_id *id) { struct usb_wwan_intf_private *data; …… //Added by Quectel if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C) && serial->dev->descriptor.idProduct == cpu_to_le16(0x0125) && serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)return -ENODEV; //End by Quectel /* Store device id so we can use it during attach. */ usb_set_serial_data(serial, (void *)id); return 0; }1.6 模塊內(nèi)核配置
二、? GobiNet驅(qū)動
2.1 模塊添加
2.2 添加程序
把Quectel_WCDMA<E_Linux&Android_GobiNet_Driver_V1.3.0.zip/src/目錄下的文件拷貝到 [KERNEL]/drivers/net/usb/ 下,makefile 和Readme.txt不拷貝,源碼下載:移遠模塊Linux下GobinNet驅(qū)動_quectel-CM-C代碼類資源-CSDN下載
修改[KERNEL]/drivers/net/usb/下的makefile,在文件最后添加
obj-y += GobiNet.o
GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o
2.3 編譯內(nèi)核
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- uImage
三、? 環(huán)境變量配置
3.1、udhcpc配置:
把文件default.script拷貝到/usr/share/udhcpc/下:
把文件resolv.conf拷貝到/var/dvr/下,然后
ln ?-s ?/var/dvr/resolv.conf?? ?/etc/resolv.conf
3.2、撥號:
編譯quectel-CM程序源碼,編譯出quectel-CM工具進行撥號;
quectel-CM源碼下載:Linux下移遠4G模塊quectel-CM撥號工具_quectelag35開發(fā)板-C代碼類資源-CSDN下載
總結(jié)
以上是生活随笔為你收集整理的嵌入式设备路由网络共享开发(2):移远Quectel系列4G模块驱动移值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rust入门学习指南
- 下一篇: 《Python数据分析基础教程:NumP