本帖最后由 将军问鼎 于 2017-3-3 16:07 编辑
一、开发平台
ARM: NUC972
linux: ubuntu 14.04
内核版本: linux-3.10.x
交叉编译器: arm-linux-4.3.2
3G/4G模块: quectel(移远) EC20
二、操作流程
1、将通讯模块插到 ARM 或者 linux(PC) 上,使用 lsu*** 命令查看 设备的 VID 和 PID:
2、进入内核目录下, driver/u***/serial/ 编辑 op tion.c 文件 添加 刚才的设备 VID 和 PID:
在这里,我为了 保持格式,使用了 宏定义
3、回到 内核目录下,/linux-3.10.x/ 开始配置内核:
- Device Drivers --->
- USB support --->
- USB Serial Converter support --->
- <*> USB driver for GSM and CDMA modems
- Network device support --->
- <*> PPP (point-to-point protocol) support ( 将其弹出的选项也都选上)
复制代码
保存设置,然后开始编译:
这两步需要的时间稍微长一些,耐心等待每一步的完成, make install ./ 表示在当前目录下生成 内核
正常来讲,这两步执行完后,就可以将生成的内核文件下载到 开发板执行,但是,我所使用的开发板资料中要求在 内核的开头加入启动信息,不知道为什么,也不愿意去探究,待日后慢慢理解吧,学习过程中留一些疑问是好的现象,如果碰到问题就去深究,很容易跑偏,所以在此不深究,如果你的开发手册没有要求这一步,大可略过:
这一步中需要 用到 mkimage ,这个工具的安装方式,网友请自行百度 (偷偷告诉你,用:apt-get install ...)
然后,在内核文件目录下,写一个脚本,就是 .sh 文件,内容是 :
- arm-linux-objcopy -O binary vmlinux vmlinux.bin
- mkimage -A arm -O linux -T kernel -S crc32 -a 0x7fc0 -e 0x8000 -d vmlinux.bin uImage.bin
- cp uImage.bin /home/witluo
- rm /home/Jackliu/nfsshare/uImage.bin
- cp uImage.bin /home/Jackliu/nfsshare
复制代码
其中的目录,网友也可自行更改,
生成内核文件后,就执行这个脚本,然后在 /home/Jackliu/ 目录下,就有一个可用的 uImage.bin 文件下载到开发板即可。
完成,下载步骤,开发板开机后,
插入 3G/4G 模块 会在 /dev 目录下生成 5 个设备节点:
恭喜你,驱动开始工作了,现在已经完成 80%了,加油!
接下来这一步很关键,在 /etc 目录下新建ppp 文件夹,在ppp 目录下 新建 peers 文件夹 ,在 /var 目录下新建 lock run 两个文件夹,当然别忘了,修改文件夹的权限,使用 chmod ....... ,这里我就不做了,节省地方
- # cd /etc/
- # mkdir ppp
- # cd ppp/
- # mkdir peers
- # cd /var/
- # mkdir lock
- # mkdir run
复制代码
然后添加,相关的 网络配置文件,我使用的是,ec20 官方资料提供的 几个文件:
当然,我查到网上也有,使用 wcdma 等文件的,这个大家自行百度,我使用的是 三网通,所以选择官方的操作方式:
接下来就是见证奇迹的时刻:
- ~ # quectel-pppd.sh
- quectel-pppd options in effect:
- devname /dev/ttyUSB3 # (default)
- apn 3gnet # (default)
- user user # (default)
- password passwd # (default)
- ~ # pppd options in effect:
- debug # (from command line)
- nodetach # (from command line)
- dump # (from command line)
- noauth # (from command line)
- user user # (from command line)
- password ?????? # (from command line)
- /dev/ttyUSB3 # (from command line)
- 115200 # (from command line)
- lock # (from command line)
- connect ''chat -s -v ABORT BUSY ABORT "NO CARRIER" ABORT "NO DIALTONE" ABORT ERROR ABORT "NO ANSWER" TIMEOUT 30 "" AT OK ATE0 OK ATI\;+CSUB\;+CSQ\;+CPIN?\;+COPS?\;+CGREG?\;\&D2 OK AT+CGDCONT=1,\"IP\",\"3gnet\",,0,0 OK ATD*99# CONNEC
- # (from command line)
- disconnect chat -s -v ABORT ERROR ABORT "NO DIALTONE" SAY "\nSending break to the modem\n" "" +++ "" +++ "" +++ SAY "\nGood bay\n" # (from command line)
- nocrtscts # (from command line)
- modem # (from command line)
- novj # (from command line)
- novjccomp # (from command line)
- ipcp-accept-local # (from command line)
- ipcp-accept-remote # (from command line)
- noipdefault # (from command line)
- ipcp-max-configure 30 # (from command line)
- defaultroute # (from command line)
- usepeerdns # (from command line)
- noccp # (from command line)
- abort on (BUSY)
- abort on (NO CARRIER)
- abort on (NO DIALTONE)
- abort on (ERROR)
- abort on (NO ANSWER)
- timeout set to 30 seconds
- send (AT^M)
- expect (OK)
- AT^M^M
- OK
- -- got it
- send (ATE0^M)
- expect (OK)
- ^M
- ATE0^M^M
- OK
- -- got it
- send (ATI;+CSUB;+CSQ;+CPIN?;+COPS?;+CGREG?;&D2^M)
- expect (OK)
- ^M
- ^M
- Quectel^M
- EC20F^M
- Revision: EC20CEFDR02A07M4G^M
- ^M
- SubEdition: V03^M
- ^M
- +CSQ: 25,99^M
- ^M
- +CPIN: READY^M
- ^M
- +COPS: 0,0,"CHN-UNICOM",7^M
- ^M
- +CGREG: 0,1^M
- ^M
- OK
- -- got it
- send (AT+CGDCONT=1,"IP","3gnet",,0,0^M)
- expect (OK)
- ^M
- ^M
- OK
- -- got it
- send (ATD*99#^M)
- expect (CONNECT)
- ^M
- ^M
- CONNECT
- -- got it
- Script ''chat -s -v ABORT BUSY ABORT "NO CARRIER" ABORT "NO DIALTONE" ABORT ERROR ABORT "NO ANSWER" TIMEOUT 30 "" AT OK ATE0 OK ATI;+CSUB;+CSQ;+CPIN?;+COPS?;+CGREG?;&D2 OK AT+CGDCONT=1,"IP","3gnet",,0,0 OK ATD*99# CONNECT'' finished (pid 1058), status = 0x0
- Serial connection established.
- using channel 6
- Using interface ppp0
- Connect: ppp0 <--> /dev/ttyUSB3
- sent [LCP ConfReq id=0x1 ]
- rcvd [LCP ConfReq id=0x0 ]
- sent [LCP ConfAck id=0x0 ]
- rcvd [LCP ConfAck id=0x1 ]
- rcvd [LCP DiscReq id=0x1 magic=0xd1e91b1f]
- rcvd [CHAP Challenge id=0x1 <7ae6e17cc3ca65a0bf9f18bf471bce06>, name = "UMTS_CHAP_SRVR"]
- sent [CHAP Response id=0x1 <97e1fb1b7301b472a6cc317ab1eeccb4>, name = "user"]
- rcvd [CHAP Success id=0x1 ""]
- CHAP authentication succeeded
- CHAP authentication succeeded
- sent [IPCP ConfReq id=0x1 ]
- rcvd [IPCP ConfReq id=0x0]
- sent [IPCP ConfNak id=0x0 ]
- rcvd [IPCP ConfNak id=0x1 ]
- sent [IPCP ConfReq id=0x2 ]
- rcvd [IPCP ConfReq id=0x1]
- sent [IPCP ConfAck id=0x1]
- rcvd [IPCP ConfAck id=0x2 ]
- Could not determine remote IP address: defaulting to 10.64.64.64
- local IP address 10.107.55.175
- remote IP address 10.64.64.64
- primary DNS address 113.106.88.4
- secondary DNS address 112.95.235.4
- Script /etc/ppp/ip-up started (pid 1062)
- Script /etc/ppp/ip-up finished (pid 1062), status = 0x0
复制代码
出现了好多打印信息,然后ping 一下试试,
使用 ifconfig 可以看到 ppp0 的 ip 地址等信息,
移植到此结束。
|