前言
本文章介绍了在linux系统下,如何修改u***驱动支持移远模块,移远模块正常启动后,通过USB连接到linux设备上,驱动正常加载后会在/dev/下产ttyUSB*设备。
一、USB串口驱动
1.1 添加VID和PID
linux下通过lsu***就可以查看USB的VID和PID
#lsu***
Bus 001 Device 011: ID 2C7C:0125
说明这个USB设备的VID为2C7C,PID为0125;
File: [KERNEL]/drivers/u***/serial/option.c
static const struct u***_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/u***/serial/qcserial.c
{USB_DEVICE(0x2C7C, 0x0125)}, /* Acer Gobi 2000 Modem device (VP413) */
File: [KERNEL]/drivers/net/u***/qmi_wwan.c
{QMI_GOBI_DEVICE(0x2C7C, 0x0125)}, /* Acer Gobi 2000 Modem device (VP413) */
1.3 添加零包机制
File: [KERNEL]/drivers/u***/serial/u***_wwan.c
static struct urb *u***_wwan_setup_urb(struct u***_serial *serial, int endpoint,int dir, void *ctx, char *buf, int len,void (*callback) (struct urb *)){…… u***_fill_bulk_urb(urb, serial->dev, u***_sndbulkpipe(serial->dev, endpoint) | dir,buf, len, callback, ctx); //Added by Quectel for zero packet if (dir == USB_DIR_OUT) { struct u***_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 packet return urb;}
1.4 添加重置
File: [KERNEL]/drivers/u***/serial/option.c
static struct u***_serial_driver option_1port_device = {……#ifdef CONFIG_PM.suspend = u***_wwan_suspend,.resume = u***_wwan_resume,//Added by Quectel .reset_resume = u***_wwan_resume,//End by Quectel#endif};
1.5 使用添加GOBINET
File: [KERNEL]/drivers/u***/serial/option.c
static int option_probe(struct u***_serial *serial, const struct u***_device_id *id) {struct u***_wwan_intf_private *data;……//Added by Quectelif (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. */u***_set_serial_data(serial, (void *)id);return 0;}
二、 GobiNet驱动
2.1 模块添加
2.2 添加程序
把Quectel_WCDMA移远模块Linux下GobinNet驱动_quectel-CM-C代码类资源-CSDN下载
修改[KERNEL]/drivers/net/u***/下的makefile,在文件最后添加
obj-y += GobiNet.o
GobiNet-objs := GobiUSBNet.o QMIDevice.o QMI.o
2.3 编译内核
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- uImage
三、 环境变量配置
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开发板-C代码类资源-CSDN下载