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

4G模块使用的SIMTECH

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

1.

编译内核

◇ 大容量存储驱动

> Device Drivers >

USB support

make

ARCH=arm menuconfig配置USB驱动:

USB Mass Storage support

[*] USB Mass Storage verbose debug

Realtek Card Reader support

[*] Realtek Card Reader autosuspend support

Datafab Compact Flash Reader support

◇ USB驱动

> Device Drivers >

USB support

Inventra 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

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

SLIP (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/ttyUSB5

1)

/dev/ttyUSB0-diag port for output developing

messages

2)

/dev/ttyUSB1- NMEA port for GPS NMEA data output

3)

/dev/ttyUSB2-AT port for AT commands

4)

/dev/ttyUSB3-Modem port for ppp-dial

5)

/dev/ttyUSB4-audio port

6)

/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:9001

Bus

002 Device 002: ID 058f:6387

Bus

001 Device 001: ID 1d6b:0002

Bus

002 Device 001: ID 1d6b:0002

5.

交叉编译PPP

6.

拨号脚本设置

root@am335x-evm:/etc/ppp#

vi gprs-connect-chat

#Chat

script for China Mobile, used SIMCOM sim4100 TD

module.

TIMEOUT 15

ABORT

"DELAYED"

ABORT

"BUSY"

ABORT

"ERROR"

ABORT

"NO DIALTONE"

ABORT

"NO CARRIER"

TIMEOUT 40

''

\rAT

OK

ATS0=0

OK

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

#

This is pppd script for China Mobile, used SIMCOM SIM7100

Module

#

Usage: root>pppd call gprs

#Interface should be used is the interface which

connects physics interface of S

/dev/ttyUSB3

115200

crtscts

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'

6.

拨号

root@am335x-evm: pppd call

gprsdial

6.

测试

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

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

domain

test.com

search

www.test.com test.com

nameserver 202.96.128.86

nameserver 202.96.128.166

nameserver #定义DNS服务器的IP地址

domain #定义本地域名

search #定义域名的搜索列表

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

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

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

ameserver 114.114.114.114

nameserver 8.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 for China

Mobile, used SIMCOM SIM7100 Module

# Usage: root>pppd call

gprs

#Interface should be used is the

interface which connects physics interface of 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 15

seconds

abort on (DELAYED)

abort on (BUSY)

abort on (ERROR)

abort on (NO DIALTONE)

abort on (NO CARRIER)

timeout set to 40

seconds

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 =

0x0

Serial connection

established.

using channel 1

Using interface ppp0

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 auth is possible

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 03 2f]

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 to 10.64.64.64

local  IP

address 10.19.25.49

remote IP address

10.64.64.64

primary  DNS

address 211.136.112.50

secondary DNS address

211.136.150.66

Script /etc/ppp/ip-up started

(pid 1639)

Script /etc/ppp/ip-up finished

(pid 1639), status = 0xff

怎么在Linux内核模块加打印,在ARM-linux上实现4G模块PPP拨号上网相关推荐

  1. linux 串口4g ppp,在ARM-linux上实现4G模块PPP拨号上网

    原标题:在ARM-linux上实现4G模块PPP拨号上网 在ARM平台上实现 的 ,参考网上的资料和自己的理解,从一无所知到开发完成花了一周多.最后看到ARM板ping通www.baidu.com时甚 ...

  2. linux怎么使用4g模块的网络,在ARM-linux上实现4G模块PPP拨号上网(示例代码)

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

  3. linux下GPRS模块ppp拨号上网

     交叉编译器:arm-linux-gcc-4.5.4 Linux内核版本:Linux-3.0 主机操作系统:Centos 6.5 开发板:FL2440 GPRS:SIM900A 在开发SIM900 ...

  4. linux内核模块加载命令

    目录 一,内核相关的命令 1.lsmod 列出已经加载的内核模块: 2.modinfo 查看模块信息: 3.modprobe 挂载新模块以及新模块相依赖的模块 4.rmmod 移除已挂载模块: 5.d ...

  5. i.MX6系列加载华为ME901s-821模块使用PPP拨号上网

    i.MX6系列加载华为ME901s-821模块使用PPP拨号上网 PPP协议 内核中添加PPP协议支持 内核USB驱动支持 交叉编译PPP 拨号 PPP协议 PPP(点到点协议)是为在同等单元之间传输 ...

  6. Linux系统下通过PPP拨号上网

    Linux/Android系统通过PPP拨号上网 嵌入式系统经常需要具备无线上网的功能,但在有的应用场景中无法使用wifi,这时可以通过GPRS模块上网.GPRS模块是基于AT命令进行控制的.对于单片 ...

  7. Linux通过安卓上网,Linux/Android系统通过PPP拨号上网

    嵌入式系统经常需要具备无线上网的功能,但在有的应用场景中无法使用wifi,这时可以通过GPRS模块上网.GPRS模块是基于AT命令进行控制的.对于单片机这类没有复杂操作系统的平台来说,往往要通过应用程 ...

  8. linux系统调用的封装格式,ARM Linux系统调用的原理

    ARM Linux系统调用的原理ARM Linux系统调用的原理 操作系统为在用户态运行的进程与硬件设备进行交互提供了一组接口.在应用程序和硬件之间设置一个额外层具有很多优点.首先,这使得编程更加容易 ...

  9. 嵌入式基于Linux电机控制,基于嵌入式arm+linux平台的直流电机调速控制系统.pdf

    2012--2013 学年第 二 学期 物电 学院期末考试卷 嵌入式系统与应用 学号 : 姓名 : 班级 : 成绩: 评语: 装 订 (考试题目及要求) 嵌入式大作: 采用实验箱上的电位器作为信号输入 ...

最新文章

  1. VII python面向对象
  2. 八大排序算法的 Python 实现
  3. 国外程序员整理的 C++ 资源大全
  4. 计算最长公共数字串个数
  5. jQuery 操作 CSS
  6. 第一个JDK 10(18.3)候选版本(内部版本43)展示了新的版本控制方案
  7. Oracle数据库卸载
  8. linux怎么安装32电脑上,linux – 如何在Ubuntu上安装mingw32?
  9. iOS中用到的唯一标示符
  10. Leetcode每日一题:860.lemonade-change(柠檬水找零)
  11. Prometheus is an open source monitoring
  12. 开源jeecms,jeebbs学习笔记4——从jo_user表看持久层设计
  13. 【语言处理与Python】1.3计算语言:简单的统计
  14. 推荐一款免费开源的javascript电子表格:x-sheet
  15. 三菱触摸屏通讯错误_三菱触摸屏(人机界面)常见问题解析
  16. 注册测绘师考试(个人总结)—工程测量、地籍测量、房产测量、界线测量
  17. 2022 DSCTF首届数字空间安全攻防大赛
  18. win 10iis php7,win10下设置IIS、安装php7.2
  19. 基于python随机产生英文单词,句子,段落
  20. python dataframe取行_如何获取pandas DataFrame的最后N行?

热门文章

  1. 获得自定义的所有相簿
  2. C语言中的while循环语句
  3. VC中的CRect类
  4. Springboot企业报销审批系统设计与实现 计算机毕设源码44362
  5. JavaScript中的基本语法结构
  6. 【真题解析】系统集成项目管理工程师 2021 年下半年真题卷
  7. NVIDIA GPU A100 Ampere(安培) 架构深度解析
  8. nodejs中forEach和普通循环区别
  9. 【1009】FatMouse‘ Trade
  10. 英语语法检查,改写,翻译和总结神器:wordvce AI