在ARM平台上实现4G模块的PPP拨号上网,参考网上的资料和自己的理解,从一无所知到开发完成花了一周多。最后看到ARM板ping通www.baidu.com时甚是高兴,现将此过程整理如下。当然,除此之外要做的工作还有很多。

4G模块使用的SIMTECH 的SIM7100C,SIM7100C带有UART和USB接口,在考虑速度上我们使用USB接口和ARM进行通信。所以向linux内核添加3G模块的驱动(USB转串口驱动)和PPP协议的支持,然后编译内核并下载到开发板。

工作量主要包括两部分,一般在模块厂商Guide中都会有:

Linux驱动层的支持

模块启停脚本调试

1. 编译内核

◇ 大容量存储驱动

> Device Drivers >USB support

make ARCH=arm menuconfig配置USB驱动:USB Mass Storage support

[*] USB Mass Storage verbose debugRealtek Card Reader support

[*] Realtek Card Reader autosuspend support Datafab Compact Flash Reader support

◇ USB驱动

> Device Drivers >USB supportInventra Highspeed Dual Role Controller (TI, ADI, ...)

MUSB Mode Selection (Dual Role mode)--->

Platform Glue Layer (TI DSPS platforms) --->MUSB DMA mode (Disable DMA (always use PIO))--->

USB Serial Converter support --->[*] USBGeneric Serial Driver USBdriver for GSM and CDMA modems

◇ PPP驱动

> Device Drivers >Network device support PPP (point-to-point protocol) support PPP BSD-Compress compressionPPP Deflate compression

[*] PPP filteringPPP MPPE compression (encryption)

[*] PPP multilink supportPPP over Ethernet PPP support forasync serial ports PPP support forsync tty portsSLIP (serial line) support

[*] CSLIP compressed headers

2. 交叉编译libusb

下载usblib库和libusb-compat

root@zhaoxc-VBox:/opt/usb-tools/libusb-1.0.20# mkdir install

configure: error:"udev support requested but libudev not installed"(解决:添加--disable-udev)

root@zhaoxc-VBox:/opt/usb-tools/libusb-1.0.20# ./configure --host=arm-none-linux-gnueabi --prefix=/opt/usb-tools/libusb-1.0.20/install --disable-udev

root@zhaoxc-VBox:/opt/usb-tools/libusb-1.0.20# make

root@zhaoxc-VBox:/opt/usb-tools/libusb-1.0.20# make install

root@zhaoxc-VBox:/opt/usb-tools/libusb-1.0.20# export PKG_CONFIG_PATH=/opt/usb-tools/libusb-1.0.20/install/lib/pkgconfig:$PKG_CONFIG_PATH

root@zhaoxc-VBox:/opt/usb-tools/libusb-1.0.20# echo $PKG_CONFIG_PATH

编译libusb-compat:

root@zhaoxc-VBox:/opt/usb-tools/libusb-compat-0.1.5# ./configure --host=arm-none-linux-gnueabi --prefix=/opt/usb-tools/libusb-compat-0.1.5/install

root@zhaoxc-VBox:/opt/usb-tools/libusb-compat-0.1.5# make

root@zhaoxc-VBox:/opt/usb-tools/libusb-compat-0.1.5# make install

将生成的libusb-1.0.20和libusb-compat-0.1.5下的库文件复制到ARM板上的linux的/lib下面即可。

3. 交叉编译4G模块驱动

交叉编译GobiSerial.c(ARCH=arm CC=arm-none-linux-gnueabi-gcc),得到GobiSerial.ko。复制到ARM板安装驱动

#insmod GobiSerial.ko

4. 查看驱动运行状况

插上4G模块,虚拟出6个ttyUSB,它们分别是:

root@am335x-evm:/# ls /dev/ttyUSB*

/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3 /dev/ttyUSB4 /dev/ttyUSB51) /dev/ttyUSB0-diag port foroutput developing messages2) /dev/ttyUSB1- NMEA port forGPS NMEA data output3) /dev/ttyUSB2-AT port forAT commands4) /dev/ttyUSB3-Modem port for ppp-dial5) /dev/ttyUSB4-audio port6) /dev/ttyUSB5-Virtual Net card

插上U盘,提示设备运行:

[75097.986054] usb 2-1: New USB device found, idVendor=058f, idProduct=6387[75097.993167] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3[75098.000689] usb 2-1: Product: Mass Storage

[75098.004995] usb 2-1: Manufacturer: Generic

[75098.009342] usb 2-1: SerialNumber: AC3DF2EE

[75098.024341] usb-storage 2-1:1.0: USB Mass Storage device detected

[75098.049922] scsi0 : usb-storage 2-1:1.0

lsusb命令查看结果:

Bus 001 Device 002: ID 1e0e:9001Bus002 Device 002: ID 058f:6387Bus001 Device 001: ID 1d6b:0002Bus002 Device 001: ID 1d6b:0002

5. 交叉编译PPP

6. 拨号脚本设置

root@am335x-evm:/etc/ppp# vi gprs-connect-chat

#Chat scriptforChina Mobile, used SIMCOM sim4100 TD module.

TIMEOUT15ABORT"DELAYED"ABORT"BUSY"ABORT"ERROR"ABORT"NO DIALTONE"ABORT"NO CARRIER"TIMEOUT40

''\rAT

OK ATS0=0OK ATE0V1

OK AT+CGDCONT=1,"IP","CMNET"OK AT+CGEQREQ=1,2,128,384,,,0,,,,,,

OK ATDT*99*1#

CONNECT

root@am335x-evm:/etc/ppp/peers# vi gprsdial

#/etc/ppp/peers/gprsdial

# Thisis pppd script forChina Mobile, used SIMCOM SIM7100 Module

# Usage: root>pppd call gprs

#Interface should be usedis the interface which connects physics interfaceof S/dev/ttyUSB3115200crtscts

modem

#noauth

debug

nodetach

#hide-password

usepeerdns

noipdefault

defaultroute

user"cmnet"

0.0.0.0:0.0.0.0#ipcp-accept-local

#ipcp-accept-remote

#lcp-echo-failure 12#lcp-echo-interval 3#noccp

#novj

#novjccomp

#persist

connect'/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat'#disconnect'/bin/chat -v -f /etc/ppp/gprs-disconnect-chat'

7. 拨号

root@am335x-evm: pppd call gprsdial

8. 测试

拨号之后进行测试,发现可以ping通ip但是无法ping通域名。这需要设置/etc/resolv.conf来添加DNS解析服务器的地址

文件/etc/resolv.conf配置DNS客户,它包含了主机的域名搜索顺序和DNS服务器的地址,每一行应包含一个关键字和一个或多个的由空格隔开的参数。下面是一个例子文件:

domain test.com

search www.test.com test.co

nameserver202.96.128.86nameserver202.96.128.166nameserver #定义DNS服务器的IP地址

domain #定义本地域名

search #定义域名的搜索列表

sortlist #对返回的域名进行排序

主要是nameserver关键字,如果没指定nameserver就找不到DNS服务器,其它关键字是可选的。

我这里只设置了两个DNS,如下:

nameserver 114.114.114.114nameserver8.8.8.8

参考文档:

How to use the SIM7100 module in Linux.pdf

------------------------------------------我是分割线---------------------------------------------

2016.11.25对以上部分脚本进行了补充注释,更方便理解【作者:从入门到放弃】

PPP协议的三组件包括PPP协议的封装方式、LCP协议和NCP协议。拨号成功需要一个建立过程,需要拨号双方根据协议规则进行的多个交互过程。

拨号配置的注释如下:

#/etc/ppp/peers/gprsdial

# This is pppd script forChina Mobile, used SIMCOM SIM7100 Module

# Usage: root>pppd call gprs

#Interface should be usedis the interface which connects physics interfaceof SIM7100 Module./dev/ttyUSB3 //Modem port for ppp-dial

115200 //通信波特率

crtscts //接口带硬件流控

modem //使用数据机控制线路。这个选项是默认的。硬体流控,pppd将等待CD信号。

#noauth //不需要对方验证自己

debug //把调试信息输出到/var/log/messages

nodetach //不后台运行,默认是后台运行的

#hide-password //写log内容时不包括密码字符串,这个参数是默认的

usepeerdns //选中这个选项,从对方请求两个DNS地址. 对方提供的地址传给文件/etc/ppp/ip-up中的环境变量DNS1和DNS2,将环境变量USEPEERDNS设置成1. 而且pppd将创建一个文件/etc/ppp/resolv.conf file,其中一个或两个服务器行包括由对方提供的地址。

noipdefault //关闭在没有指定本地IP位址时所进行的预设动作,这是用来由从主机名称决定(如果可能的话)本地IP位址。加上这个选项的话,彼端将必须在进行IPCP协商时(除非在指令行或在选项档中明确地指定它)提供本地的IP地址。

defaultroute //当 IPCP 协商完全成功时, 增加一个预设递送路径到系统的递送表,将彼端当作闸道器使用。这个项目在 ppp 连线中断後会移除。

user "cmnet" //设置由对方验证本地系统的用户名。

0.0.0.0:0.0.0.0#ipcp-accept-local //加上这个选项的话,pppd将会接受彼端对於本地IP位址的意见,即使本地的IP位址已经在某个选项中指定。

#ipcp-accept-remote //加上这个选项的话,pppd将会接受彼端对於它的IP位址的意见,即使远端的IP位址已经在某个选项中指定。

#lcp-echo-failure 12 //如果有给这个选项,那麽如果传送n个LCP回应要求没有接收到有效的LCP回应回覆的话pppd将会推测彼端是死掉的。如果发生这种情形,pppd将会终结该连线。这个选项的使用要求一个非零的lcp-echo-interval参数值。这个选项可以用在硬体数据机控制线路无法使用的情况下当实际连线被中断之後(e.g.,数据机已经挂断)终结 pppd的执行。

#lcp-echo-interval 3 //如果有给这个选项,pppd每秒将会送出一个LCP回应要求(echo-request)封包(frame)给彼端。在Linux系统下,回应要求在n秒内没有从彼端接收到封包时会被送出。一般彼端应该以传送一个回应回覆(echo-reply)来反应该回应要求。这个选项可以与lcp-echo-failure选项一起使用来侦测不再连线的彼端。

#noccp //关闭压缩控制协议协商。若对方有漏洞会被来自PPPD的压缩控制协议协商请求干扰的情况下,需要设置该选项。

#novj //选中这个选项,将关闭双方的Van Jacobson形式TCP/IP报文头压缩

#novjccomp //选中这个选项,将关闭Van Jacobson形式TCP/IP报文头压缩中的连接ID压缩。Pppd将忽略来自Van Jacobson形式压缩TCP/IP报文头中的连接ID字节,也不要求对方这样作。

#persist //连接中断后不退出,而是重新打开连接。

connect '/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat' //[博文作者:从入门到放弃]

#disconnect '/bin/chat -v -f /etc/ppp/gprs-disconnect-chat'

正常拨号的过程打印输出:

timeout set to 15seconds

abort on (DELAYED)

abort on (BUSY)

abort on (ERROR)

abort on (NO DIALTONE)

abort on (NO CARRIER)

timeoutset to 40seconds

send (^MAT^M)

expect (OK)

AT^M^M

OK--got it

send (ATS0=0^M)

expect (OK)^M

ATS0=0^M^M

OK--got it

send (ATE0V1^M)

expect (OK)^M

ATE0V1^M^M

OK--got it

send (AT+CGDCONT=1,"IP","CMNET"^M)

expect (OK)^M^M

OK--got it

send (AT+CGEQREQ=1,2,128,384,,,0,,,,,,^M)

expect (OK)^M^M

OK--got it

send (ATDT*99*1#^M)

expect (CONNECT)^M^M

CONNECT--got it

Script/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat finished (pid 1633), status = 0x0Serial connection established.using channel 1Usinginterfaceppp0

Connect: ppp0 /dev/ttyUSB3

Warning- secret file /etc/ppp/pap-secrets has world and/or group access

sent [LCP ConfReq id=0x1]

rcvd [LCP ConfReq id=0x0]

No authispossible

sent [LCP ConfRej id=0x0]

rcvd [LCP ConfAck id=0x1]

rcvd [LCP ConfReq id=0x1]

sent [LCP ConfAck id=0x1]

sent [CCP ConfReq id=0x1]

sent [IPCP ConfReq id=0x1]

rcvd [LCP DiscReq id=0x2 magic=0x451b7dc9]

rcvd [LCP ProtRej id=0x3 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 032f]

Protocol-Reject for 'Compression Control Protocol' (0x80fd) received

rcvd [IPCP ConfReq id=0x0]

sent [IPCP ConfNak id=0x0]

rcvd [IPCP ConfRej id=0x1]

sent [IPCP ConfReq id=0x2]

rcvd [IPCP ConfReq id=0x1]

sent [IPCP ConfAck id=0x1]

rcvd [IPCP ConfNak id=0x2]

sent [IPCP ConfReq id=0x3]

rcvd [IPCP ConfAck id=0x3]

Could not determine remote IP address: defaulting to10.64.64.64local IP address10.19.25.49remote IP address10.64.64.64primary DNS address211.136.112.50secondary DNS address211.136.150.66Script/etc/ppp/ip-up started (pid 1639)

Script/etc/ppp/ip-up finished (pid 1639), status = 0xff

pppd启动模块,会自动在/etc/ppp下面建立resolv.conf文件,里面有对应的DNS解析服务器,此可以取代/etc/resolv.conf中的4G模块DNS

linux配置4g网络命令_[4G]Linux平台上实现4G通信相关推荐

  1. linux终端刷新网络命令,在Ubuntu Linux操作系统中重新启动网络的方法

    你使用的是基于Ubuntu的Linux操作系统,然而有时似乎无法连接到网络,其实简单的重启可以修复一些问题.在本文中将介绍在Ubuntu和其他Linux发行版中重新启动网络的方法,以便你可以使用任何适 ...

  2. linux 查找py文件命令_在 Linux 中如何从命令行查找 VirtualBox 版本

    如果你想知道如何在 Linux 中从命令行查找 VirtualBox 版本,可以采用以下几种方法. -- Sk(作者) 我使用 Oracle VirtualBox 和 KVM 虚拟化程序 测试不同的 ...

  3. linux扩展磁盘空间命令_在Linux上监视磁盘空间– SQL Server DBA的有用命令

    linux扩展磁盘空间命令 In this article, we will explore the different Linux commands related to the disk spac ...

  4. linux配置4g网络命令_树莓派移动网络连接(配置4G网卡)

    1.识别上网卡 使用命令lsusb,如果能够识别则可以继续往下. 2.安装网卡驱动程序 上网卡一般都会带有2个功能,一个是虚拟光驱,用来安装驱动程序:另一个是进行网络连接的modem. 在Linux下 ...

  5. linux配置4g网络命令_【树莓派】树莓派移动网络连接(配置4G网卡)

    1.识别上网卡 使用命令lsusb,如果能够识别则可以继续往下. 2.安装网卡驱动程序 上网卡一般都会带有2个功能,一个是虚拟光驱,用来安装驱动程序:另一个是进行网络连接的modem. 在Linux下 ...

  6. centos6重启网络命令_虚拟机-linux系统中图形界面和命令行界面切换

    linux系统中图形化界面和命令行界面之间的切换可以分为两种,临时性切换和永久性切换. 临时性切换即切换后只对本次生效,系统重启后界面还是默认界面. 永久性切换即切换后系统开机后永远处于的界面. 临时 ...

  7. linux tcp 丢包命令_在Linux下实现测试TCP和UDP的丢包检测!

    在Linux下实现测试TCP和UDP的丢包检测! 疯狂の猿猴 • 2020 年 12 月 11 日 前言 本人平时基本上都是win,一下子转战到linux,有点不习惯! 因此做个记录,便于以后自己查阅 ...

  8. linux打开txt文件命令_「linux命令详解」lsof命令解析,教你一步打开所有文件

    专注分享C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协 ...

  9. linux刷新本地dns命令_在Linux/Windows/Mac上刷新DNS缓存的方法

    刷新dns缓存让你可以得到新的域名解析.当你无法正确访问一个新注册的域名时就可以刷新dns缓存试试.刷新dns缓存非常简单,任何时候都以进行.但是不同的系统,Windows.Mac OS和Linux上 ...

  10. linux自动锁屏命令_自制Linux终端锁屏工具

    很多时候我们不能一直守护在自己的电脑旁边,而且有些文件并不想让别人知道.那么这时候来个锁屏,是再合适不过的了.今天分享一个自制的锁屏工具,如下. 准备 •操作系统 : 我这里是ElementaryOS ...

最新文章

  1. uml 类图_UML 类图
  2. Java黑皮书课后题第7章:7.27(相同的数组)如果两个数组list1和list2的内容相同,认为相同(不是完全相同)。编写一个测试程序,提示用户输入两个整数列表,然后显示这两个列表是否相同
  3. ubuntu19.10 安装搜狗输入法
  4. mpvue微信小程序动画_入门微信小程序
  5. C++类对象排序operator重载操作
  6. 2020年生活服务业新业态和新职业从业报告
  7. python-format格式化专题介绍1909
  8. mysql索引的概念和作用_索引的基本概念及作用
  9. Qt与Matlab混合编程细节总结
  10. html+英文什么字体好看的,10个非常漂亮的英文字体分享
  11. Windows 11 Insider Preview Build 25247.1000(rs_prerelease)更新内容
  12. usb摄像头android录像软件,USB摄像头app
  13. Apache Geronimo 监控
  14. 360抢票 网站维护中 你的登录被踢了!
  15. 微信开发工具无法支持vue文件
  16. 前端如何修改网页的标题栏图标和名称
  17. 统计学三大相关系数之Pearson相关系数、Spearman相关系数
  18. 爆笑的虫子机器人_《爆笑虫子Larva》全集目录
  19. JS判断字符串中的内容是否为纯数字
  20. web项目设计与开发——DBHelper

热门文章

  1. 中国的程序员培训是不是有问题
  2. JavaScript里函数中的this
  3. python酒店管理系统案例
  4. vscode跳转返回快捷键
  5. 02时态(2):一般现在时、疑问句主语相同的句子
  6. 支付宝支付接口的使用
  7. ESXI6.7集成net55-r8168网卡驱动,支持部分PC
  8. 加勒比海盗海盗不雅镜头_土豆,海盗和……编程?
  9. 王道数据结构代码---第五章:二叉树(重要)
  10. foxmail连接163邮箱服务器,win10系统下foxmail绑定或添加163邮箱的方法