第6章 库开发 -第2节 USB-4G移植(中兴ME3760移植)

ME3760 是一款Mini PCI-E接口的LTE 模块,支持LTE TDD band38(2.6GHz),band39(1.9GHz),band40(2.3GHz); LTE FDD band7(2.6GHz),向下兼容TD-SCDMA A频段(2.1GHz)和F频段(1.9GHz)以及GSM900MHz,GSM1800MHz. 支持最大100M/50Mbps的理论上下行数据传输速率.

6.1内核文件修改

1. 增加具体设备驱动
文件:linux-2.6.35.3/drivers/usb/serial/option.c
找到如下行:

static struct usb_device_id option_ids[] = {}

在其下添加内容:

{ USB_DEVICE(0x19d2, 0x0199) }

这里写图片描述
2. Usb 串口驱动过滤 NDIS 接口
由于 usb 串口跟 ndis 都属于非标准 cdc 设备,需要防止 ndis 口被 usb 串口驱动加载导致 ndis 驱动无法顺利完成加载。
文件linux-2.6.35.3/drivers/usb/serial/usb-serial.c
找到 usb_serial_probe 函数,在函数中找到如下行:

type = search_serial_device(interface);

在其前面添加如下内容:
这里写图片描述
3.复制源码
把官方驱动包里的usb/cdc_ether.c cdc_encap_ok.c cdc_encap_ok.h三个文件复制到内核linux-2.6.35.3/drivers/net/usb目录下。
【注意】内核源代码本来就修改过这个文件,则不宜直接覆盖,请注意保留原来的修改。
4.修改Makefile文件
在linux-2.6.35.3/drivers/net/usb/下的Makefile
找到如下行:

obj-$(CONFIG_USB_USBNET) += usbnet.o

在其下添加内容:

obj-m += cdc_encap.o

这里写图片描述
5.修改cdc_ether.c 文件
方式一:按照下图所示注释掉所有语句,在有if语句后面加;
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
方式二:
717行: (以717这一处为例修改)

devdbg (dev, "no rx skb");  

改成

netif_dbg(dev, timer, dev->net, "no rx skb");

【注】这都是调试信息,可以注释掉。
6.修改cdc_encap.c文件
添加如下红框中的头文件。

#include <linux/slab.h>

这里写图片描述

6.2编译内核

  1. 进入内核目录,执行 make menuconfig
  2. 依次进入 device drivers—>usb support—>usb serial converter support 将如下组件作为模块进行编译:USB driver for GSM and CDMA modems(添加usb转串口驱动)
    这里写图片描述
  3. 依次进入 device drivers—>Network device support—>usb Network Adapters 将如下组件作为模块进行编译:Mutil-purpose USB Networking Framework(添加Ndis驱动)
    这里写图片描述
  4. 重新编译并安装内核
$make uImage -j4
$make modules

5.加载模块
把drivers/net/usb/usbnet.ko cdc_encap.ko cdc_ether.ko三个模块复制到开发板上,然后按顺序加载,如下:

# insmod usbnet.ko   
# insmod cdc_encap.ko   
# insmod cdc_ether.ko

如果ME3760模块已经插在开发板上了,驱动安装成功后则会打印如下信息:

这里写图片描述
6.检查驱动
把ME3760模块插入开发板,执行如下命令:

$lsusb

这里写图片描述

>$ll /dev/ttyUSB*

这里写图片描述

$ ifconfig -a
can0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          NOARP  MTU:16  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:64 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

can1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          NOARP  MTU:16  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:64 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0      Link encap:Ethernet  HWaddr 00:04:00:00:00:00  
          inet addr:192.168.1.111  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:50 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8772 (8.5 KiB)  TX bytes:0 (0.0 B)

eth1      Link encap:Ethernet  HWaddr 00:04:00:00:00:01  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Base address:0x8000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

usb0      Link encap:Ethernet  HWaddr 26:BB:59:1C:0D:AA  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

usb1      Link encap:Ethernet  HWaddr AE:DE:12:C9:54:BD  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

【注】usb1是ME3760模块的网络名,不同模块可以不一样。

6.3 ME3760联网应用

2.3.1方式一:minicom拨号

步骤一:拨号获取IP地址

$minicom
(进入拨号,在拨号前需要设置minicom,关于minicom用法请看[minicom移植笔记-点击进入](https://blog.csdn.net/u013162035/article/details/80363681)])
AT+CFUN=0
AT+CGDCONT=1,"IP"
AT+CFUN=1
AT+CREG=1
AT+CEREG=1
AT+CGACT=1,1
AT+ZGACT=1,1
拨号成功后会返回如下信息。 ![这里写图片描述](https://img-blog.csdn.net/20180519215556996?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTMxNjIwMzU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 本4G网卡绑定在usb1上,因此需要映射到usb1上。 **步骤二:设置IP地址**
$ifconfig usb1 up

步骤三:设置网关

$ifconfig usb1 10.66.85.114
$route add default gw 10.66.85.114

步骤四:设置DNS

$vi /etc/resolve.conf

添加nameserver 8.8.8.8
这里写图片描述
【注】不添加DNS也可ping。
步骤五:测试

$ping www.baidu.com

成功后返回返回如下信息。
这里写图片描述

2.3.2方式二:microcom拨号

步骤一:拨号获取IP地址

$microcom -s 115200 /dev/ttyUSB0
(进入拨号)
AT+CFUN=0
AT+CGDCONT=1,"IP"
AT+CFUN=1
AT+CREG=1
AT+CEREG=1
AT+CGACT=1,1
AT+ZGACT=1,1
拨号成功后会返回如下信息。 ![这里写图片描述](https://img-blog.csdn.net/20180519215853501?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTMxNjIwMzU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 本4G网卡绑定在usb1上,因此需要映射到usb1上。 **步骤二:设置IP地址**
$ifconfig usb1 up

步骤三:设置网关

$ifconfig usb1 10.66.85.114
$route add default gw 10.66.85.114

步骤四:设置DNS

$vi /etc/resolve.conf

添加nameserver 8.8.8.8
这里写图片描述
【注】不添加DNS也可ping。
步骤五:测试

$ping www.baidu.com

成功后返回返回如下信息。
这里写图片描述

【注】microcom测试
microcom是在制作根文件系统时busybox里自带命令。-s指定波特率为115200,也可以在前面加 -t 7000(表示监听的时间为7000ms), 通过ctrl+x可以退出监听
使用串口工具向ME3760模块发送AT命令:

$ microcom -s 115200 /dev/ttyUSB0  

发送AT,返回OK
发送AT+CSCS=?,返回+CSCS: (“GSM”,”HEX”,”UCS2”)
则表示ME3760模块已经可以正常工作了。

【注1】usb驱动文件

本文提及usb驱动文件下载

【注2】移植环境

虚拟机:Ubuntu12.04
开发板:IMX283-A9
内核:linux-2.6.35(版本不同可能会导致移植不成功)
4G模块:中兴ME3760(如果是其他模块,要支持USB,才可采用此法移植)

猜你喜欢

转载自blog.csdn.net/u013162035/article/details/80378497