nuc977 添加EC20 4G 网卡

news/2025/1/15 18:01:15/

参考了手册和网上的文章。做下记录。

内核版本:linux-3.10

1. Add VID and PID

/drivers/usb/serial/option.c添加:

static const struct usb_device_id option_ids[] = {
#if 1 //Added by Quectel
{ USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */
{ USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */
{ USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */
{ USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */
{ USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
#endif

然后在/drivers/usb/serial/qcserial.c /drivers/usb/serial/qcserial.c两个文件中注释掉如下语句

{USB_DEVICE(0x05c6, 0x9215)}, /* Acer Gobi 2000 Modem device (VP413) */

网上说是由于历史的原因,导致VID和PID重复了。

2. Add the Zero Packet Mechanism
 

static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,int endpoint,int dir, void *ctx, char *buf, int len,void (*callback) (struct urb *))
{struct usb_serial *serial = port->serial;struct urb *urb;urb = usb_alloc_urb(0, GFP_KERNEL);     /* No ISO */if (urb == NULL) {dev_dbg(&serial->interface->dev,"%s: alloc for endpoint %d failed.\n", __func__,endpoint);return NULL;}/* Fill URB using supplied data. */usb_fill_bulk_urb(urb, serial->dev,usb_sndbulkpipe(serial->dev, endpoint) | dir,buf, len, callback, ctx);//ADD bye sky 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;}//===return urb;
}

3. Add Reset Resume

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,#if 1 //Added by Quectel
.reset_resume = usb_wwan_resume,
#endif#endif
};

4. Use GobiNet or QMI WWAN

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;
……
#if 1 //Added by Quectel
//Quectel UC20's interface 4 can be used as USB Network device
if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) &&
serial->dev->descriptor.idProduct == cpu_to_le16(0x9003)
&& serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
return -ENODEV;
//Quectel EC20's interface 4 can be used as USB Network device
if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) &&
serial->dev->descriptor.idProduct == cpu_to_le16(0x9215)
&& serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
return -ENODEV;
//Quectel EC21&EC25&EC20 R2.0's interface 4 can be used as USB Network device
if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)
&& serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
return -ENODEV;
#endif
/* Store device id so we can use it during attach. */
usb_set_serial_data(serial, (void *)id);
return 0;
}

5.Enable CONFIG_USB_SERIAL_OPTION

重新烧写内核,然后将模块连接到USB HOST上。 重新上电稍等一下就可以检测到模块了。

在dev下发现: 

用AT命令测试下:

cat /dev/ttyUSB2 &
echo "AT\r\n" >/dev/ttyUSB2

如果可以看到有数据返回,那就表明驱动已将OK了。硬件连接也没有问题了。。

 

6. GobiNet Driver for UC20/EC20/EC21/EC25/EC20 R2.0

下一步就是:GobiNet Driver for UC20/EC20/EC21/EC25/EC20 R2.0

类似这样的效果,会创建一个eht1的网卡设备。

将一些代码文件拷贝到“[KERNEL]/drivers/net/usb/目录下,代码来自官网,或者网上找找。

修改目录下的[KERNEL]/drivers/net/usb/Makefile文件 加入:

然后重新编译内核,并烧写内核。

上电后加载的驱动信息:

然后输入ifconfig -a查看

7 . Test GobiNet

编译quectel-CM

make CROSS-COMPILE=arm-linux-

 


http://www.ppmy.cn/news/300033.html

相关文章

i.MX6/i.MX7 EIM总线驱动-异步通信

i.MX6/i.MX7平台,支持EIM(External Interface Module)总线扩展。在实际项目中,大部分使用该总线和FPGA通信比较多,我们这里以与FPGA为例实现该驱动。 i.MX6是使用较多的一个,我们以i.MX6为例进行分析。我手上的芯片型号是i.MX6D。 我们实现的功能是:使用EIM的16根数据线…

实习笔试准备(3)

1 第三题 1.1 题目描述 给定一个迷宫,找到最快从起点到达重点的路径所需要的步数。 假设迷宫如下,假定左上角坐标为(0, 0),右下角坐标为(3, 2) 1 0 -1 1 -2 0 -1 -3 2 2 0 0 -2是迷宫的起点,坐标为(0, 1) -3是迷宫的终点&a…

收音机调谐拉线维修

好久没更新博客了,因为实在是太忙啦~刚忙完搬家的事情,今天正好有空,就给大家来点干货。 事情是这样的,笔者手头有一个袖珍机械调谐收音机,型号为德生R1012,FM/MW/SW1-8/TV 12Bands收音机,虽然是…

一台老式收音机——飞乐牌251-1(交流电子管)

飞乐牌251-1收音机 (交流电子管) 它已经在我们家里无声无息地躺了二十多年了,记得我最后一次去拆它是高中毕业那年,之后再也没有去捣鼓过。前几年老妈嫌它占地方,扔前问我要不要收留这个劳什子,我如获至宝。但是我也只是让它换了个…

44、RDA5807收音机实验

文章目录 1、特点2、控制接口3、状态转换4、实验目的5、原理图6、代码实现1、特点 RDA5807 芯片研发而成的新一代数字调频收音机模块,主要应用于 MP3/MP4 媒体播放机,具有比传统模拟制式收音机模块更突出的性能表现,音质更清晰, 噪音极少,功耗更低,集成度高,对炬力、瑞芯…

乐歌升降桌怎么选,哪个型号比较好

随着时代的发展,人们坐在电脑桌前的时间越来越多,常常一天十几个小时一动不动,久而久之就必须要安排一台升降桌来辅助办公,不然颈椎、腰椎等身体部位真的受不了。 乐歌升降桌的型号其实不是很多,选购时尤其要注意的地…

kafka集群报错找不到broker

一、问题描述 某次用户反馈,kafka消费这边消息失败,报错消费者被踢出消费组或broker状态异常无法连接,后实际验证端口确实不通 现场测试验证,报错:报错:Failed to find brokers to send ListGroups……fi…

Git GitLab 使用及规范

Git 基本操作 Git安装配置及基本使用 从官网下载安装包,手动完成安装。打开Git Bash命令行工具,执行命令ssh-keygen -t rsa -C Email-Addresss生成一个密钥对。登录到GitLab,点击右上角你的用户头像,点击Edit Profile settings&…