Quectel EC200A-CN移植
Quectel EC200A-CN移植
- 一:usb转串口
- 二:usb网卡驱动
- 三:源码修改
- 四:测试
一:usb转串口
usb-serial-option,USB转串口驱动,生产/dev/ttyUSB0-2,分别是DM,AT,PPP
需要使能内核选项如下:
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_WWAN=y
CONFIG_USB_SERIAL_OPTION=y
二:usb网卡驱动
USB网卡驱动,模块可通过AT配置成RNDIS或者ecm,默认是ecm。
需要使能内核选项
USB_USBNET=y
USB_NET_CDCETHER=y #用ECM 使能此项
USB_NET_RNDIS_HOST=y #用RNDIS 使能此项
三:源码修改
- 增加usb vid和pid
增加vid和pid,设备连接,使用lsusb命令查看设备的vid和pid,如下图所示:
vid:3763
pid:3c93
文件修改:linux-3.10/drivers/usb/serial/option.c
static const struct usb_device_id option_ids[] = {
#if 1 //Added by Quectel{ USB_DEVICE(0x3763, 0x3c93) }, /* Quectel EC200A-CN 内置GPS */{ USB_DEVICE(0x3c93, 0xffff) }, /* Quectel EC200A-CN 外置GPS*/
#endif
文件修改:linux-3.10/drivers/usb/serial/option.c
1790 #if 1 //Added by Quectel
1791 static void cfmakeraw(struct ktermios *t)
1792 {
1793 t->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
1794 t->c_oflag &= ~OPOST;
1795 t->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
1796 t->c_cflag &= ~(CSIZE|PARENB);
1797 t->c_cflag |= CS8;
1798 t->c_cc[VMIN] = 1;
1799 t->c_cc[VTIME] = 0;
1800 }
1801
1802 static void option_init_termios(struct tty_struct *tty)
1803 {
1804 cfmakeraw(&tty->termios);
1805 }
1806 #endif
文件修改:linux-3.10/drivers/usb/serial/option.c:option_1port_device
1813 static struct usb_serial_driver option_1port_device = {
1814 .driver = {
1815 .owner = THIS_MODULE,
1816 .name = "option1",
1817 },
1818 .description = "GSM modem (1-port)",
1819 .id_table = option_ids,
1820 .num_ports = 1,
1821 .probe = option_probe,
1822 .open = usb_wwan_open,
1823 .close = usb_wwan_close,
1824 .dtr_rts = usb_wwan_dtr_rts,
1825 .write = usb_wwan_write,
1826 .write_room = usb_wwan_write_room,
1827 .chars_in_buffer = usb_wwan_chars_in_buffer,
1828 .set_termios = usb_wwan_set_termios,
1829 .tiocmget = usb_wwan_tiocmget,
1830 .tiocmset = usb_wwan_tiocmset,
1831 .ioctl = usb_wwan_ioctl,
1832 .attach = option_attach,
1833 .release = option_release,
1834 .port_probe = usb_wwan_port_probe,
1835 .port_remove = usb_wwan_port_remove,
1836 .read_int_callback = option_instat_callback,
1837 #ifdef CONFIG_PM
1838 .suspend = usb_wwan_suspend,
1839 .resume = usb_wwan_resume,
1840 #if 1 //Added by Quectel
1841 .reset_resume = usb_wwan_resume,
1842 #endif
1843 #endif
1844 };
文件修改:linux-3.10/drivers/usb/serial/option.c:option_probe
if (serial->dev->descriptor.idVendor == cpu_to_le16(0x3c93))
{__u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct);struct usb_interface_descriptor *intf = &serial->interface->cur_altsetting->desc;if (intf->bInterfaceClass != 0xFF || intf->bInterfaceSubClass == 0x42){//ECM, RNDIS, NCM, MBIM, ACM, UAC, ADBreturn -ENODEV;}if ((idProduct&0xF000) == 0x0000){//MDM interface 4 is QMIif (intf->bInterfaceNumber == 4 &&intf->bNumEndpoints == 3 &&intf->bInterfaceSubClass == 0xFF &&intf->bInterfaceProtocol == 0xFF)return -ENODEV;}
}
if (serial->dev->descriptor.idVendor == cpu_to_le16(0x3763))
{__u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct);struct usb_interface_descriptor *intf = &serial->interface->cur_altsetting->desc;if (intf->bInterfaceClass != 0xFF || intf->bInterfaceSubClass == 0x42){//ECM, RNDIS, NCM, MBIM, ACM, UAC, ADBreturn -ENODEV;}if ((idProduct&0xF000) == 0x0000){//MDM interface 4 is QMIif (intf->bInterfaceNumber == 4 &&intf->bNumEndpoints == 3 &&intf->bInterfaceSubClass == 0xFF &&intf->bInterfaceProtocol == 0xFF)return -ENODEV;}
}
- linux-3.10/drivers/usb/serial/usb_wwan.c:usb_wwan_setup_urb
在usb_wwan_setup_urb
函数中添加如下内容
//Added by Quectel for Zero Packetif (dir == USB_DIR_OUT) {struct usb_device_descriptor *desc = &serial->dev->descriptor;if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9090))urb->transfer_flags |= URB_ZERO_PACKET;if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9003))urb->transfer_flags |= URB_ZERO_PACKET;if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9215))urb->transfer_flags |= URB_ZERO_PACKET;if (desc->idVendor == cpu_to_le16(0x2C7C))urb->transfer_flags |= URB_ZERO_PACKET;if (desc->idVendor == cpu_to_le16(0x3c93))urb->transfer_flags |= URB_ZERO_PACKET;if (desc->idVendor == cpu_to_le16(0x3763))urb->transfer_flags |= URB_ZERO_PACKET;}
四:测试
- 查看usb网卡是否生成
ifconfig -a
- AT指令测试
busybox microcom /dev/ttyUSB2
Quectel EC200A-CN移植相关推荐
- Quectel EC200N-CN驱动移植记录
一. 1)add PID VID kernel_dir/drivers/usb/serial/option.c option_ids[] { USB_DEVICE(0x2C7C, 0x6002) } ...
- OpenWRT移植EC200A驱动,并实现wifi和lan的上网,及wan和4g的负载均衡(五)
网卡驱动方式 转载:[拨号PPP NDIS RNDIS CDC ECM NCM QMI_WWAN GOBINET RMNET MBIM概念介绍](https://blog.csdn.net/qlexc ...
- 在基于瑞芯微rk3568的android12上添加移远4G通信模块EC200A
==============================以下修改已在开发板中验证OK==================== [添加前的准备工作] 0.开发平台 CPU是rk3568,andr ...
- NBIOT开发(一):NBIOT模组以及芯片厂家都有哪些?
本文来源:全球物联网观察:由"物联网时空"微信公众号(IoT-LPWAN)整理发布,转载请注明来源. 2014年,华为先提出了窄带技术NB M2M,而后与高通.爱立信等公司的方案融 ...
- EC20-GPS功能初次使用
整个文档只是用于初步使用,需要开发更细节的东西,详细请见官方的规格书. 采用了下图的USB模块进行针对移远的EC20-CEFILG模块,对它的GPS功能进行使用. 将此模块插上电脑,要使用必须使用移远 ...
- 物联网之窄带物联网(NB-IOT)
NB-IoT即窄带物联网(Narrow Band Internet of Things),NB-IOT构建在蜂窝网络之上,只消耗大约180KHZ的带宽,可直接部署于GSM(2G).UMTS(3G).L ...
- 易达号-云对讲智能门禁M101-拆机
评测日期:2020-05-20 评测人:wuxy 本次评测的产品是易达号的M101-F3人脸识别智能门禁.本评测仅代表我个人的看法,如有错误欢迎斧正. 产品描述 功能评测 这里主要是根据说明书上的开门 ...
- NB-IoT 移远 BC28 TE-B 模块网络接入测试
产品概述 BC28 是一款超紧凑.高性能.低功耗的多频段 NB-IoT 无线通信模块,支持 B1/B3/B8/B5/B20/B28 频段.其尺寸仅为17.7mm×15.8mm ×2.0mm,能最大限度 ...
- GNSS中静态和动态的区别
在GNSS数据处理中,动态和静态是描述接收机状态的两个关键术语,下面介绍两者之间的区别: 区别(1)从GNSS接收机本身的运动状态来看: 动态模式:动态模式是指接收机处于移动载体上,如在车辆.飞机.船 ...
- Android4.2 Quectel EC20 R2.1模块移植
注意: 本文档不支持热插拔,本文使用GobiNET方式实现4G上网,并没使用PPPD模式. 1.内核部分的移植 1.1 usb串口驱动的修改 修改: autochips/kernel/drivers ...
最新文章
- 18-flutter的Future和FutureBuilder
- 聊聊高并发(二十五)解析java.util.concurrent各个组件(七) 理解Semaphore
- JS高级-JQ初识-元字符-正则表达式
- c语言 函数调用 传值调用 引用调用 传地址调用,C语言中的传值调用和引用调用...
- 随讲单片机与Arduino
- sql not exists用法_牛客网数据库SQL实战详细剖析(5160)(更新完结)
- 【转载】]基于RedHatEnterpriseLinux V7(RHEL7)下SPEC CPU 2006环境搭建以及测试流程 介绍、安装准备、安装、config文件以及运行脚本介绍...
- 01.学习笔记-linux操作系统常用命令
- AttributeError: module ‘matplotlib‘ has no attribute ‘image‘
- 关于java前端的相关讲解
- vb.net 实现编辑某列并回车后不换行,查询数据进行相关处理
- Ms08067联合360漏洞响应平台(SRC)送给白帽子20本“精选的10本安全好书”
- pdf.js 跨域 php,JavaScript_js跨域资源共享 基础篇,本文详细介绍了javascript跨域资 - phpStudy...
- c#日期时间的操作的函数总结
- 2行Python给图片加水印,太强了!
- python发送邮件群发软件_python使用tkinter写的邮件群发软件-python图形界面编程
- ​李宏毅机器学习——领域适应Domain Adaptation
- jQuery 之过滤选择器
- 梦泪的服务器是qq还是微信,梦泪发现微信区1奇特现象,赛季末分数远不如QQ区,看到1细节,懂了...
- 谢宁方法或谢宁DOE