EC200S4GCat.1模组OpenWRT驱动的移植

EC200S4GCat.1模组OpenWRT驱动的移植

2023年6月26日发(作者:)

EC200S4GCat.1模组OpenWRT驱动的移植EC200S 4GCat.1模组OpenWRT驱动的移植EC200S 4GCat.1模组OpenWRT驱动的移植参考信息更新⽇志2020-09-25:创建⽂档,记录移植过程,EC200S Cat.1模组验证通过。1 说明硬件使⽤widora bit5.1,芯⽚为MT7688,内核版本3.18.29SDK路径:openwrt_widora内核⽂件在SDK中的位置:openwrt_widora/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7688/linux-3.18.29⼤致分为⼏步:1. 修改[KERNEL]/drivers/usb/serial下与USB虚拟串⼝相关的内容2. 修改[KERNEL]/drivers/net/usb下与USB⽹卡相关的内容3. 测试USB驱动是否正常⼯作4. 拷贝微调PPP脚本5. 修改启动脚本使开机配置ppp⽹卡6. 开机运⾏ppp脚本2 USB Serial源码修改2.1 添加VID与PID在 [KERNEL]/drivers/usb/serial/option.c中添加如下内容。其中《移远驱动源码》中提供的没有EC200S的PID“0x2C7C,0x6002”,我们⼿动添加进去。static const struct usb_device_id option_ids[] = {#if 1 //Added by Quectel { USB_DEVICE(0x2C7C, 0x6026) }, /* Quectel EC200 */ { USB_DEVICE(0x2C7C, 0x6120) }, /* Quectel UC200 */ { USB_DEVICE(0x2C7C, 0x6000) }, /* Quectel EC200/UC200 */ { USB_DEVICE(0x2C7C, 0x6002) }, /* Quectel EC200S */#endif2.2 添加零数据包机制内核版本⾼于2.6.34的在[KERNEL]/drivers/usb/serial/usb_wwan.c下添加如下内容,低与这个版本的参考《移远驱动⼿册》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 *)){......#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(0x2C7C)) urb->transfer_flags |= URB_ZERO_PACKET; }#endif2.3 添加重置恢复机制内核版本⾼于3.4的在[KERNEL]/drivers/usb/serial/option.c添加如下内容static struct usb_serial_driver option_1port_device = {...... .resume = usb_wwan_resume,#if 1 //Added by Quectel .reset_resume = usb_wwan_resume,#endif#endif};内核版本低于2.6.29的还需要增加⼤量URB的数量和容量,参考《移远驱动⼿册》3.2.4章节2.4 使⽤ECM或RNDIS内核版本⾼于2.6.30的在[KERNEL]/drivers/usb/serial/option.c中添加如下内容static int option_probe(struct usb_serial *serial, const struct usb_device_id *id){ struct usb_interface_descriptor *iface_desc = &serial->interface->cur_altsetting->desc; struct usb_device_descriptor *dev_desc = &serial->dev->descriptor;#if 1 //Added by Quectel if (serial->dev->or == cpu_to_le16(0x2C7C)) { __u16 idProduct = le16_to_cpu(serial->dev->uct); //Quectel EC200T's interface 0 can be used as USB Network device (ecm, rndis) if (serial->interface->cur_altsetting->faceClass != 0xFF) return -ENODEV; }#endif3 Net USB驱动源码修改3.1 添加VID与PID在 [KERNEL]/drivers/net/usb/qmi_wwan.c中添加如下内容static const struct usb_device_id products[] = {#if 1 //Added by Quectel {QMI_FIXED_INTF(0x2C7C, 0x6026, 4)}, /* Quectel EC200 */ {QMI_FIXED_INTF(0x2C7C, 0x6000, 4)}, /* Quectel EC200T */ {QMI_FIXED_INTF(0x2C7C, 0x6002, 4)}, /* Quectel EC200S */#endif4 修改编译配置选项进⼊SDK路径openwrt_widora下make menuconfig需要开启的配置如下Kernel modules ---> USB Support ---> -*- kmod-usb-core -*- kmod-usb-net -*- kmod-usb-net-cdc-ether <*> kmod-usb-net-cdc-mbim -*- kmod-usb-net-cdc-ncm <*> kmod-usb-net-cdc-subset -*- kmod-usb-net-qmi-wwan <*> kmod-usb-net-rndis <*> kmod-usb-ohci <*> kmod-usb-serial <*> kmod-usb-serial-option -*- kmod-usb-serial-wwan <*> kmod-usb-uhci <*> kmod-usb2Network ---> -*- chat <*> ppp <*> ppp-mod-pppoa <*> ppp-mod-pppoe <*> ppp-mod-pppol2tp <*> ppp-mod-pptp <*> ppp-mod-radius <*> ppp-multilink <*> pppdump <*> pppstats <*> ser2net <*> uqmi -*- wwanUtilities ---> <*> usb-modeswitch5 编译下载测试驱动5.1 USB端⼝识别修改完源码后可以 make -j8 V=s编译,编译完成下载到板⼦上则可以测试是否可以识别到USB。插⼊USB连接上EC200S,查看内核打印信息:[69572.640000] usb 1-1: new high-speed USB device number 84 using ehci-platform[69573.050000] usb 2-1: new full-speed USB device number 4 using ohci-platform[69573.260000] usb 2-1: not running at top speed; connect to a high speed hub[69573.290000] cdc_ether 2-1:1.0 usb0: register 'cdc_ether' at -1, CDC Ethernet Device, ae:0c:29:a3:9b:6d[69573.310000] option 2-1:1.2: GSM modem (1-port) converter detected[69573.310000] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB0[69573.320000] option 2-1:1.3: GSM modem (1-port) converter detected[69573.330000] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB1[69573.340000] qmi_wwan 2-1:1.4: bogus CDC Union: master=0, slave=0[69573.340000] qmi_wwan: probe of 2-1:1.4 failed with error -1[69573.350000] option 2-1:1.4: GSM modem (1-port) converter detected[69573.360000] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB2ls /dev 可以看到 ttyUSB0/ttyUSB1/ttyUSB2三个USB虚拟串⼝则代表USB端⼝识别成功了。其中ttyUSB0是调试串⼝,ttyUSB1是AT指令串⼝,ttyUSB2是ppp拨号端⼝。root@syniot:/opt/syniot# ls /如果只识别到了ttyUSB0、ttyUSB1,没有出现ttyUSB2则可能是因为完全使⽤了《移远驱动源码》中的驱动,其中有EC20/EC25的代码,会导致UC200&EC200的PPP⼝识别不到。所以建议完全安装本说明中的代码修改重新移植⼀次。5.2 AT指令测试可以使⽤microcom来连接ttyUSB1端⼝来测试AT指令。如果你的OpenWrt系统中没有microcom指令,则可以在编译OpenWrt系统时打开microcom的编译选项,BusyBox已经提供了microcom的编译。开启后重新编译即可拥有microcom,位置在make menuconfig中的:Base system ---> <*> busybox Miscellaneous Utilities ---> [*] microcom使⽤microcom连接串⼝ttyUSB1:microcom /dev/ttyUSB1输⼊测试AT指令:ATIAT+CSQAT+CGREG?AT+CPIN?AT+QNWINFOAT+CGDCONT?正常的返回类似下⾯:root@syniot:/dev# microcom /dev/ttyUSB1ATIQuectelEC200SRevision: EC200SCNAAR01A06M16OKAT+CGREG?+CGREG: 0,1OKAT+CPIN?+CPIN: READYOKAT+QNWINFO+QNWINFO: "FDD LTE","46000","LTE BAND 3",1300OKAT+CGDCONT?+CGDCONT: 1,"IP","3gnet","0.0.0.0",0,0,0,0,0,0OK6 拷贝与修改ppp拨号脚本6.1 ppp脚本说明原PPP脚本在参考信息中《移远PPP拨号脚本》中。注意不要在 windows 下编辑该⽬录下的⽂件、否则会使得这些⽂件变成 dos 格式。windows 的 dos 格式是指⽂件的每⾏以 rn 结尾,⽽ linux 的⽂件默认是以 n 结尾的。pppd 和 chat 不能解析 dos 格式的⽂件。⼯具 dos2unix 可以把 dos 格式的⽂件转成 linux 格式。有2种⽅法启动ppp拨号⽅式1: 拷贝 quectel-chat-connect quectel-chat-disconnect quectel-ppp 到 /etc/ppp/peers ⽬录下。并在 quectel-ppp ⾥修改你的串⼝设备名,pppd 拨号使⽤的 username,password。在 quectel-chat-connect ⾥修改你的 APN。APN/username/password 是从你的⽹络提供商那⾥获取的。然后使⽤下⾯的命令启动 ppp 拨号, 命令最后的 & 可以让 pppd 后台运⾏pppd call quectel-ppp &⽅式2:使⽤ 拨号,命令形式如下:./-up:pppd 在获取 ip 和 dns 之后,会⾃动调⽤这个脚本⽂件来设置系统的 DNS。嵌⼊式系统⼀般需要拷贝这个⽂件到 /etc/ppp ⽬录下。请确保该⽂件在你的系统⾥有可执⾏权限。quectel-ppp-kill:⽤来挂断拨号的,pppd必须被正常的挂断,否则可能会导致你下次ppp拨号失败。使⽤下⾯⽅式来调⽤这个脚本./quectel-ppp-kill6.2 ppp脚本移植与修改我们直接拷贝到镜像的⽂件系统中拷贝ip-up到openwrt_widora/package/base-files/files/etc/ppp下拷贝quectel-chat-connect、quectel-chat-disconnect、quectel-ppp、、quectel-ppp-kill到openwrt_widora/package/base-files/files/etc/ppp/peers赋予执⾏权限cd openwrt_widora/package/base-files/files/etc/ppp/peerschmod +x quectel-chat-connect quectel-chat-disconnect quectel-ppp quectel-ppp-kill脚本默认ppp端⼝为ttyUSB3,EC200系列使⽤的是ttyUSB2,修改默认串⼝。修改运营商APN设置,移动为cmnet、联通为3gnet、电信为ctnet。user与password为空# /etc/ppp/peers/quectel-ppp#Modem path, like /dev/ttyUSB3,/dev/ttyACM0, depend on your module, default path is /dev/ttyUSB3/dev/ttyUSB2 115200#Insert the username and password for authentication, default user and password are testuser "" password ""# /etc/ppp/peers/_DEVNAME=/dev/ttyUSB2QL_APN=cmnetQL_USER=QL_PASSWORD=# /etc/ppp/peers/quectel-chat-connect# OK AT+CGDCONT=1,"IP","3gnet",,0,0

修改为OK AT+CGDCONT=1,"IP","cmnet"6.3 添加ppp0⽹络节点调试的时候⼿动添加⽹络节点:# etc/config/network

添加config interface 'ppp0'

option ifname 'ppp0'

option proto '4g'

option apn 'cmnet'

option service 'umts'

option dialnumber '*99#' option device '/dev/ttyUSB2'注:联通apn:3gnet 电信apn:ctnet 移动apn:cmnet/cmwap联通dialnumber:3G为99# 电信:3G为#777 移动为:99*1# LTE为:*99#实际量产中还有其他⽅法添加⽹络节点,我这⾥只是⼿动⽤脚本追加到了"etc/config/network"⽂件中,配置启动执⾏这个脚本后重启。#!/bin/sh

#⾃⼰的脚本/opt/,配置启动执⾏⼀次(/etc/init/d),配置⽅法⾃⾏百度sleep 10sresult=`cat /etc/config/network | grep ppp0`if [ -z "$result" ]then echo "config interface 'ppp0'" >> /etc/config/network echo " option ifname 'ppp0'" >> /etc/config/network echo " option proto '4g'" >> /etc/config/network echo " option apn 'cmnet'" >> /etc/config/network echo " option service 'umts'" >> /etc/config/network echo " option dialnumber '*99#'" >> /etc/config/network echo " option device '/dev/ttyUSB2'" >> /etc/config/networkelse echo "ppp0 Already"fisleep 5spppd call quectel-ppp & #启动⾃动连接6.4 PPP拨号测试编译打包OpenWrt下载到开发板测试PPP拨号。⾸先连接4G模组EC200S,进⼊mt7688的OpenWrt系统中,以root权限运⾏:pppd call quectel-ppp过⼀会可以ppp进程的运⾏及⽹卡IP信息则可以认为联⽹成功了#

查看进程运⾏root@syniot:/opt# ps | grep ppp 1819 root 1600 S pppd call quectel-ppp 1958 root 1488 S grep ppp#

查看⽹卡状态root@syniot:/opt# ppp0 Link encap:Point-to-Point Protocol

inet addr:10.34.130.232 P-t-P:10.64.64.64 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:4 errors:0 dropped:0 overruns:0 frame:0 TX packets:4 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3

RX bytes:52 (52.0 B) TX bytes:58 (58.0 B).......看到了⽹卡的信息及IP状态,可以ping⼀下百度试试了,⼤功告成。相关资源下载

发布者:admin,转转请注明出处:http://www.yc00.com/web/1687751948a39296.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信