一,首先是连接硬件,连接好后开机,进入980串口lsusb查看设备的vid和pid,成功后如下图。
这里遇到一个问题,设备上电后,lsusb没有设备出来,检查硬件连接也是正常的。
后面查看手册才知道,硬件设计上有个说明,没有采用2直接把PWRKEY直接下拉到地
所以我要根据EC200N的参考手册,给它一个上电时序才能正常开机。如下图,原理图找到PWRKEY和RESET根据上电时序控制gpio来实现上电,我暂时是在应用里面直接操作的。完成后再lsusb就会有设备的vid和pid打印出来了。
二,识别到设备的vid和pid后,就要它们加到usb驱动中的option.c中的USB_DEVICE中。
-
打开Liux 内核源码的drivers/usb/serial/option.c文件,找到option_ids数组,在数组中加入如下内容。
2,在drivers/usb/serial/option.c的option_probe函数中加入
3,在option_1port_device中加入
4,在\drivers\usb\serial\usb_wwan.c.c中的usb_wwan_setup_urb中加入。
5,以上4步我只添加修改了第1步,其他几个文件的修改,在我的驱动中已经默认加进去了。
三,接下来就是在内核文件夹中执行make menuconfig进行内核的配置。
1,打开
-> Device Drivers
-> [*] USB support
-> <*> USB Serial Converter support
-> <*> USB driver for GSM and CDMA modems
这个就是在linux内核中虚拟出/dev/ttyUSB0 ,/dev/ttyUSB1 /dev/ttyUSB2等等设备。
2,打开
-> Device Drivers
-> -*- Network device support
-> USB Network Adapters
-> -*- Multi-purpose USB Networking Framework
3,打开
-> Device Drivers
-> [*] USB support
-> <*> Support for Host-side USB
-> <*> USB Modem (CDC ACM) support
4,打开
-> Device Drivers
-> [*] Network device support
-> <*> PPP (point-to-point protocol) support
-> <*> PPP BSD-Compress compression
-> <*> PPP Deflate compression
-> [*] PPP filtering
-> <*> PPP MPPE compression (encryption)
-> [*] PPP multilink support
-> <*> PPP over Ethernet
-> <*> PPP support for async serial ports
-> <*> PPP support for sync tty ports
四,保存后重新编译内核烧录开机后出现以下打印说明成功。
这里又遇到一个麻烦,因为我是在系统开机后运行的EC200上电时序,出现这一步打印后去/dev下查看,发现没有出来ttyUSB0,ttyUSB1,ttyUSB2,但是在sys/class发现已经有了这几个设备文件。查了资料发现是开机mdev执行完之后,EC200上电没映射成对应的设备节点,所以执行mdev -s之后/dev就有了ttyUSB0,ttyUSB1,ttyUSB2。
mdev 是基于uevent_helper 机制的,或者直接配置uevent_helper为/sbin/mdev。这种只是在EC200上电时序没有加在驱动出现的问题,后面把上电时序加入驱动也就没这个问题了。
成功后
五,编译移植ppp拨号
下载ppp-2.4.4.tar.gz的源码后,在Ubuntu中交叉编译。./configure指定的CC不管用。所以就直接
make CC=arm-linux-gcc编译,编译完成后,把chat和pppd下载到nuc980的/sbin目录。
然后下载quectel-ec20t.tar.bz2,下载:https://download.youkuaiyun.com/download/qq_37788182/89112944
用移远的quectel-pppd.sh拨号
执行./quectel-pppd.sh /dev/ttyUSB2
成功后ifconfig会有ppp0网卡,直接ping 8.8.8.8,成功。