1 说明
本文内容来源于调试hi3518ev300的过程中总结的经验。EC20及开发包购买自深圳市时讯捷通讯有限公司。
2 使用USB HOST功能
参考文档:Hi3516E V200R001C01SPC011\Hi3516E V200R001C01SPC011\ReleaseDoc\zh\01.software\board\OSDRV\外围设备驱动 操作指南.doc->2 USB 2.0 DRD操作指南。
海思SDK包里面默认配置了大部分的USB HOST功能,内核配置时需要修改一个地方:
Device Drivers->USB support->DesignWare USB3 DRD Core Support->DWC3 Mode Selection选择”Host only mode”,SDK默认配置为Dual Role mode(这个模式下不能自动识别USB设备)。
以下是自动识别USB设备,挂载USB设备的日志截图:

3 EC20/EC25驱动移植与调试
3.1 驱动编译进内核(kernel)
参考文档:《Quectel_WCDMA<E_Linux_USB_Driver_User_Guide_V1.8.pdf》->3.2. USB Serial Driver for UCxx/EC2x/EGxx/EP06/EM06/BG96/AG35、3.6. Configure Kernel to Support PPP、4 Power Management、5 Test the Module
按照参考文档更改内核文件,
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- menuconfig
选中Device Drivers->USB support->USB Serial Converter support及其子选项USB driver for GSM and CDMA modems为‘*’
选中Device Drivers->Network device support->PPP (point-to-point protocol) support及其子选项为‘*’,如果缺少这个选中操作会出现类似如下错误,

make ARCH=arm CROSS_COMPILE=arm-himix100-linux-
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- uImage
生成的内核文件(uImage)已支持拨号上网功能。
烧入内核文件到板端,启动之后拔插EC20/EC25模块会出现打印信息,如下分别是EC20、EC25的打印,


3.2 驱动编译成模块(ko)
参考文档:《Quectel_WCDMA<E_Linux_USB_Driver_User_Guide_V1.8.pdf》->3.2. USB Serial Driver for UCxx/EC2x/EGxx/EP06/EM06/BG96/AG35、3.6. Configure Kernel to Support PPP、4. Power Management、5. Test the Module
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- menuconfig
选中Device Drivers->USB support->USB Serial Converter support为’*’,其子选项USB driver for GSM and CDMA modems为‘M’,如果子选项USB driver for GSM and CDMA modems为‘*’则在加载ko文件时出现如下错误:

选中Device Drivers->Network device support->PPP (point-to-point protocol) support及其子选项为‘*’,如果缺少这个选中操作会出现类似如下错误,

make ARCH=arm CROSS_COMPILE=arm-himix100-linux- M=`pwd`/drivers/usb/serial obj-m=option.o modules
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- M=`pwd`/drivers/usb/serial obj-m=usb_wwan.o modules,会输出如下警告,不会产生影响,

make ARCH=arm CROSS_COMPILE=arm-himix100-linux- M=`pwd`/drivers/usb/serial obj-m=qcserial.o modules
在内核根目录\drivers\usb\serial目录下生成option.ko、usb_wwan.ko、qcserial.ko。
make ARCH=arm CROSS_COMPILE=arm-himix100-linux-
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- uImage
烧入内核,将生成的ko文件拷贝至板端,启动板端之后不会自动创建/dev/ttyUSB*设备文件,依次加载usb_wwan.ko、qcserial.ko、option.ko(后面两个ko依赖前面一个ko)会自动创建/dev/ttyUSB*设备文件,如下所示,

3.3 移植libcrypt
https://sourceforge.net/projects/libcrypt/files/latest/download
pppd可执行程序依赖crypt库文件,如果没有该文件执行时会报如下错误,

修改makefile中的相关变量(CC、CPP、AR),
由于板端/lib文件夹下有crypto共享库,所以先删除它们,rm -rf lib/libcrypt.so.0 /lib/libcrypt-0.9.33.2.so,将libcrypt.so拷贝至板端/lib目录下,并创建链接文件libcrypt.so.0(ln -s libcrypt.so libcrypt.so.0)。
3.4 移植ppp
https://download.samba.org/pub/ppp/
解压之后进入目录,执行./configure、make CC=arm-himix100-linux-gcc之后即可生成pppd、chat可执行程序。
将pppd、chat放入板端的/usr/sbin目录下,如果放入/bin/目录下可能会遇到如下错误:

这是因为板端/usr/sbin目录下已有chat可执行文件且环境PATH的值中/usr/sbin在/bin之前。
创建/etc/ppp(mkdir -m777 /etc/ppp)、/etc/ppp/peers(mkdir -m777 /etc/ppp/peers),将以下压缩包的文件放入/etc/ppp/peers中,
要保证这些文件为linux格式而非windows文件格式,否则可能会出错。
3.5 其他修改
执行拨号操作之前需要创建/var/lock目录(mkdir /var/lock -p),否则会遇到如下错误,

如果没有/var/run目录则也需要创建该目录(mkdir /var/run -p)。
3.6 拨号上网
在完成上述操作之后进入/etc/ppp/peers,执行pppd call quectel-ppp &,即可完成拨号入网,获取到IP地址,如下图所示,


此时还不能ping通www.baidu.com,需要在/etc/resolv.conf中追加域名解析才行(echo "nameserver 114.114.114.114" >> /etc/resolv.conf)。
如果想断开网络再重新拨号,执行/etc/ppp/peers/quectel-ppp-kill &,待网络断开之后即可重新执行pppd call quectel-ppp &拨号上网。
3.7 使用经验
网上有说不通运营商的SIM卡,拨号时使用的APN不一样,移动用”cmnet”,联通用”3gnet”,电信用”ctnet”。笔者使用移动SIM卡,使用”cmnet”、”3gnet”、”ctnet”皆可拨号成功上网。
3.8 未插卡的表现

3.9 使用AT命令查看4G模块的IMEI
参考《Quectel_WCDMA<E_Linux_USB_Driver_User_Guide_V1.8.pdf》->2 Products Overview,

可以看到/dev/ttyUSB2字符设备用来执行AT命令,可以将执行结果保存在临时文件中,cat /dev/ttyUSB2 > /tmp/IMEI &,echo -e "AT+GSN\r\n" > /dev/ttyUSB2,如下图所示,

查看SIM卡的ICCID(echo -e "AT+QCCID\r\n" > /dev/ttyUSB2),查看SIM卡的CNUM(echo -e "AT+CNUM\r\n" > /dev/ttyUSB2,物联网卡一般为空)。




