EC20 linux驱动 Gobinet 拨号

 最近新入手一块板子,里面Gobinet 和 usbserial 这些都是模块编insmod插入进去的,虽然提供了源码但是还是看不明白什么意思,于是对这块就有了兴趣,因为公司有和移远有合作,就要来了他们的Linux源码(本身也是开源的)研究了一下,发现其实很简单,主要参考移远官方的文件《Quectel_WCDMA&LTE_Linux_USB_Driver_User_Guide_V1.7.pdf》下面我就结合这个文档给大家再捋一遍。

=======================================================================


一 、USB Serial

 如果你用的是ec20**********并且需要USB串口的启动,请细度此章否则直接跳过。。。。


1.1 添加VID和PID

VID和PID其实就相当于USB硬件的识别ID系统也是通过他们来找到你的EC20设备的,修改Kernel中文件来添加,方法如下


注意:如果其他的usb设备也用到了这些资源的话就把冲突的地方删掉,比如在[KERNEL]/drivers/usb/serial/qcserial.c中和[KERNEL]/drivers/net/usb/qmi_wwan.c文件中都有对(0x05c6, 0x9215)ID的重复描述,官方文档是让删掉的,我没有删试了没事,想来应该是我的板卡上没有这些设备的原因。

1.2添加 Zero Packet Mechanism

通过USB协议的要求,你需要在bulkout传输添加加工零包的机制(直接翻译过来的照着做就可以了)。

如果你的Linuxkernel版本新于2.6.34,在文件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);
  #if 1 //Added by Quectel for Zero Packet
  if (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;
   i

  • 19
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值