s5pv210-Linux驱动之ME3760
来源:互联网 发布:熊猫 知乎 编辑:程序博客网 时间:2024/05/17 01:16
一、开发环境
硬件平台:我用的是TQ210核心板,板载S5PV210芯片
软件平台:开发板移植的是Linux3.10.46内核,UBOOT移植的是2014.12版本
二、资源简介
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的理论上下行数据传输速率.
ME3760 模块的官方驱动可以在网上找,我也会上传到资源里。
三、移植步骤
(一)添加usb转串口驱动
1、配置内核
/linux-3.10.46$ make menuconfig<*> USB driver for GSM and CDMA modems Symbol: USB_SERIAL_OPTION [=y]Type : tristatePrompt: USB driver for GSM and CDMA modems Location: -> Device Drivers -> USB support (USB_SUPPORT [=y]) -> USB Serial Converter support (USB_SERIAL [=y])
2、添加设备信息
修改linux-3.10.46\drivers\usb\serial\option.c,在option_ids中添加一行,如下:
static const struct usb_device_id option_ids[] = {{ USB_DEVICE(0x19d2, 0x0199) },/* add by wzs */{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
3、usb串口驱动过滤EMC接口
修改\linux-3.10.46\drivers\usb\serial\usb-serial.c文件,在usb_serial_probe函数中添加如下几行:
int num_ports = 0;int max_endpoints;mutex_lock(&table_lock);/* add by wzs start */if ((le16_to_cpu(dev->descriptor.idVendor)== 0x19d2)&& (le16_to_cpu(dev->descriptor.idProduct)== 0x0199)){ if(1 ==interface->cur_altsetting->desc.bInterfaceNumber){ return -ENODEV; }}/* add by wzs end */type = search_serial_device(interface);if (!type) {mutex_unlock(&table_lock);dev_dbg(ddev, "none matched\n");return -ENODEV;}
(二)添加Ndis驱动
1、配置内核
/linux-3.10.46$ make menuconfig<M> Multi-purpose USB Networking FrameworkSymbol: USB_USBNET [=m]Type : tristatePrompt: Multi-purpose USB Networking Framework Location: -> Device Drivers -> Network device support (NETDEVICES [=y]) -> USB Network Adapters
2、复制源码
把官方驱动包里的cdc_ether.c cdc_encap_ok.c cdc_encap_ok.h三个文件复制到内核\linux-3.10.46\drivers\net\usb目录下
3、修改\linux-3.10.46\drivers\net\usb\Makefile文件,添加一行:
obj-m += cdc_encap.o
3、修改cdc_ether.c 文件
461行:netif_info(dev, "link speeds: %u kbps up, %u kbps down",改成netif_info(dev, timer, dev->net, "link speeds: %u kbps up, %u kbps down",
483行:devdbg(dev, "CDC: carrier %s",改成netif_dbg(dev, timer, dev->net, "CDC: carrier %s",
492行:devdbg(dev, "CDC: speed change (len %d)",改成netif_dbg(dev, timer, dev->net, "CDC: speed change (len %d)",
518行:deverr(dev, "CDC: unexpected notification %02x!",改成netdev_err(dev->net, "CDC: unexpected notification %02x!",
717行:devdbg (dev, "no rx skb");改成netif_dbg(dev, timer, dev->net, "no rx skb");
4、修改cdc_encap_ok.c文件
添加头文件
#include <linux/slab.h>
238行:.ioctl = cdc_encap_ioctl,改成.compat_ioctl = cdc_encap_ioctl,
263行:init_MUTEX(&encap->sem);改成sema_init(&encap->sem, 1);
5、编译内核和模块
/linux-3.10.46$ make uImage/linux-3.10.46$ make modules
6、加载模块
把drivers/net/usb/usbnet.ko cdc_encap.ko cdc_ether.ko三个模块复制到开发板上,然后按顺序加载,如下:
[root@$zjh: 35th_4g]# insmod usbnet.ko [root@$zjh: 35th_4g]# insmod cdc_encap.ko [root@$zjh: 35th_4g]# insmod cdc_ether.ko
注:卸载时要按照相反的顺序
cdc_ether 1-1.3:1.1: ZTE Ethernet Device: claiming interface 1usb 1-1.3: bad CDC descriptorscdc_ether 1-1.3:1.1 eth1: register 'cdc_ether' at usb-s5p-ohci-1.3, ZTE Ethernet Device, c6:8e:08:92:10:a9usbcore: registered new interface driver cdc_ether
7、检查驱动
把ME3760模块插入开发板,执行如下命令:
[root@$zjh: 35th_4g]# lsusb Bus 001 Device 002: ID 1a40:0101Bus 001 Device 001: ID 1d6b:0001Bus 001 Device 005: ID 19d2:0199[root@$zjh: 35th_4g]# ll /dev/ttyUSB*crw-rw---- 1 root root 188, 0 Jan 1 05:47 /dev/ttyUSB0crw-rw---- 1 root root 188, 1 Jan 1 05:48 /dev/ttyUSB1crw-rw---- 1 root root 188, 2 Jan 1 01:33 /dev/ttyUSB2[root@$zjh: 35th_4g]# ifconfig -aeth0 Link encap:Ethernet HWaddr 00:09:C0:FF:EC:48 inet addr:192.168.1.4 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:10881 errors:0 dropped:133 overruns:0 frame:0 TX packets:758 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2123172 (2.0 MiB) TX bytes:72340 (70.6 KiB) Interrupt:42 Base address:0x8000 eth1 Link encap:Ethernet HWaddr C6:8E:08:92:10:A9 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)lo Link encap:Local Loopback LOOPBACK MTU:65536 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)[root@$zjh: 35th_4g]#
如果命令返回信息是以上这样,表示ME3760模块已经驱动成功了
其中,eth1是ME3760模块的网络名
(三)测试
microcom是在制作根文件系统时busybox里自带命令。-s指定波特率为115200,也可以在前面加 -t 7000(表示监听的时间为7000ms), 通过ctrl+x可以退出监听
使用串口工具向ME3760模块发送AT命令:
[root@$zjh: 35th_4g]# microcom -s 115200 /dev/ttyUSB0
发送AT,返回OK
发送AT+CSCS=?,返回+CSCS: ("GSM","HEX","UCS2")
则表示ME3760模块已经可以正常工作了。
(四)ME3760联网应用
1、获取IP地址
[root@$zjh: 35th_4g]# microcom -s 115200 /dev/ttyUSB0
发送AT,返回OK
发送AT+CFUN=1,返回
+CREG: 2^MODE: 0+CEREG: 2+CEREG: 1^MODE: 17,9+CREG: 1发送AT+CEREG=1,返回OK
发送AT+CGREG? ,返回
+CGREG: 1,2
OK
发送AT+CEREG?,返回
+CEREG: 1,1
OK
发送,返回OK
发送AT+CGPADDR=1,返回
+CGPADDR: 1,"10.190.250.228"
OK
2、设置IP地址
[root@$zjh: 35th_4g]# ifconfig eth1 up[root@$zjh: 35th_4g]# ifconfig eth1 10.190.250.228
3、设置网关
[root@$zjh: 35th_4g]# route add default gw 10.0.0.1
4、设置DNS
把文件/etc/resolv.conf内容改成如下:
nameserver 8.8.8.8
5、PING外网
[root@$zjh: 35th_4g]# ping 61.135.169.121PING 61.135.169.121 (61.135.169.121): 56 data bytes64 bytes from 61.135.169.121: seq=0 ttl=50 time=836.940 ms64 bytes from 61.135.169.121: seq=1 ttl=50 time=35.580 ms64 bytes from 61.135.169.121: seq=2 ttl=50 time=69.405 ms^C--- 61.135.169.121 ping statistics ---3 packets transmitted, 3 packets received, 0% packet lossround-trip min/avg/max = 35.580/313.975/836.940 ms[root@$zjh: 35th_4g]# [root@$zjh: 35th_4g]# [root@$zjh: 35th_4g]# ping www.baidu.comPING www.baidu.com (14.215.177.39): 56 data bytes64 bytes from 14.215.177.39: seq=0 ttl=48 time=98.806 ms64 bytes from 14.215.177.39: seq=1 ttl=48 time=98.513 ms64 bytes from 14.215.177.39: seq=2 ttl=48 time=96.318 ms^C--- www.baidu.com ping statistics ---3 packets transmitted, 3 packets received, 0% packet lossround-trip min/avg/max = 96.318/97.879/98.806 ms
四、小结
官方提供的驱动包比较老,是Linux2.6内核的,如果你使用的内核版本比较新,可能还需要做其它修改。
官方驱动下载:http://download.csdn.net/download/wzs250969969/10155482
- s5pv210-Linux驱动之ME3760
- s5pv210-Linux驱动之USB鼠标
- s5pv210-Linux驱动之USB键盘
- s5pv210-Linux驱动之SD卡插拨识别
- s5pv210-Linux驱动之RTL8189WIFI模块
- s5pv210-Linux驱动之安装wpa_supplicant
- [S5PV210 Linux字符驱动之PWM蜂鸣器驱动
- S5Pv210 Linux 驱动接口
- s5pv210-Linux驱动之USB-HOST主机控制器之EHCI
- s5pv210-Linux驱动之USB-HOST主机控制器之OHCI
- s5pv210-Linux驱动之SD卡主机控制器
- s5pv210-Linux驱动之SD卡理论篇
- s5pv210-Linux驱动之MMC/SD/SDIO区别
- Android linux adc驱动(s5pv210)
- Android linux PWM驱动(s5pv210)
- s5pv210开发板linux摄像头v4l2驱动
- s5pv210开发板linux ac97 alsa驱动
- s5pv210开发板linux mtd驱动 Nandflash
- js在前端获取在本地上传图片的尺寸
- iOS 验证手机号、身份证号的正则
- 在java中,OOA是什么?OOD是什么?OOP是什么?
- 经典线程同步 互斥量Mutex
- 为什么在神经网络中要使用交叉熵而不是均方差作为损失函数
- s5pv210-Linux驱动之ME3760
- android studio 升级3.0
- 关于 startActivityForResult
- oracle--17.触发器
- 功耗问题研究——定时唤醒机制实际效果
- 怎样提升机器学习:特征工程的奇淫巧技
- 《数字技术》连载9: 第2章 数字器件 第4节 HTL 门电路
- 台大机器学习corsera资料
- xml解析之dom4j解析