本文转载自:http://blog.csdn.net/hanmengaidudu/article/details/17028383

一 开发环境简介

内容

说明

3G模块

华为EM820W(WCDMA)

3G SIM卡

中国联通3G卡

嵌入式Linux版本

linux-2.6.37

主机开发环境

Ubutun 10.04

 

二 主要步骤

1

向linux内核中添加3G模块驱动(USB转串口的option驱动)和ppp网络协议的支持

2

交叉编译ppp-2.4.4源代码

将拨号上网所需的两个应用程序pppd和chat拷贝到开发板/usr/sbin文件夹下,

编写ppp拨号脚本wcdma、wcdma-chat-connect、wcdma-chat-disconnect并存放在/etc/ppp/peers目录下。将DNS写入到/etc/resolv.conf文件中

3

执行“pppd call wcdma”命令进行拨号

三 配置3G模块驱动和ppp网络协议栈

首先进入make menuconfig界面

1 配置3G模块驱动

图 1

如图1首先选择Device Drivers

图2

如图2进入USB support

图 3

进入USB support之后一直往下直到找到图3并选择USB转串口

图4

最后选择USB driver for GSM and CDMA modems到此3G卡驱动已经添加完毕

主要是添加了driver/usb/serial/option.c和driver/usb/serial/usb_wwan.c

两个文件,尽管驱动添加了,但是这仅仅只是一个usb转串口驱动,并不能作为网络设备直接使用,此时就需要ppp网络协议的支持,他将ttyUSB*等设备模拟成网络设备使用也即(/dev/ttyUSB0<---->ppp0)

2 添加ppp协议

同样也是进入make menuconfig界面

图5

首先同样也是进入驱动配置界面Device Drivers

图6

如图6选择网络设备支持

图7

如图7选择ppp

到这一步驱动和协议就都已经配置成功了接下来就是编译下载到板子

登入到linux, dmesg查看内核打印信息

图8

同时查看/dev/目录下已经创建了

/dev/ttyUSB0,/dev/ttyUSB1,/dev/ttyUSB2,/dev/ttyUSB3,/dev/ttyUSB4,/dev/ttyUSB5

/dev/ppp等7个设备文件表明内核正确识别了EM820W3G模块

四 编写ppp拨号脚本

由于该拨号脚本需要使用chat,pppd,等命令,所以需要下载ppp-2.4.4

下载成功之后首先便是编译

1 编译 ppp-2.4.4

./configure

Make CC=arm-none-linux-gnueabi-gcc

编译成功后将编译生成的chat,pppd,pppdump等命令拷贝到板子文件系统的/usr/sbin目录下边去

2 编写拨号脚本

在板子文件系统/etc/ppp/peers目录下边创建三个文件如下

wcdma,chat-wcdma-connect,chat-wcdma-disconnect

wcdma配置文件内容

debug

nodetach

/dev/ttyUSB0

115200

usepeerdns

noauth

noipdefault

novj

novjccomp

noccp

defaultroute

ipcp-accept-local

ipcp-accept-remote

connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/chat-wcdma-connect'

disconnect '/usr/sbin/chat -s -v -f/etc/ppp/peers/chat-wcdma-disconnect'

wcdma-chat-connect配置文件内容

TIMEOUT 5

ABORT 'NO CARRIER'

ABORT 'ERROR'

ABORT 'NODIALTONE'

ABORT 'BUSY'

ABORT 'NO ANSWER'

''  \rAT

OK  \rATZ

OK \rAT+CGDCONT=1,"IP","3GNET",,0,0

OK-AT-OK ATDT*99#

CONNECT \d\c

wcdma-chat-disconnect配置文件内容

ABORT"ERROR"

ABORT "NODIALTONE"

SAY"\nSending break to the modem\n"

'' "\K"

''"+++ATH"

SAY"\nGoodbay\n"

创建好拨号脚本之后就是正式拨号了

pppd call wcdma&

(加上&符号主要是因为拨号成功后,程序会一直执行不退出,所以采用后台运行的方式执行,假如有多个3G卡可能就会产生多个ttyUSB*的设备文件,同时会需要多个wcdma文件此时可以采用pppd call wcdma1来为3G模块1进行ppp拨号),pppd call wcdma是作用是建立协议,并生成网络接口ppp0

拨号成功会出现如下图所示打印

图9

出现上图9的打印后在/etc/resocv.conf中间添加DNS地址vi /etc/resolv.conf,加入内容:

nameserver 202.99.160.68

nameserver 202.99.166.4

使用ifconfig –a查看是否有ppp0的网络设备

最后测试ppp0网络设备是否能够使用

Ping –I ppp0 www.baidu.com

能够ping通就表示3G卡移植驱动成功

到此阶段3G卡驱动已经移植完毕

五 调试

在移植该驱动时候出现过诸多问题

1 pppd call wcdma调用失败

root@cz:~# pppd call wcdma&

timeout set to 5 seconds

abort on (NO CARRIER)

abort on (ERROR)

abort on (NO DIALTONE)

abort on (BUSY)

abort on (NO ANSWER)

send (^MAT^M)

expect (OK)

AT^M^M

OK

-- got it

send (^MATZ^M)

expect (OK)

^M

ATZ^M^M

OK

-- got it

send(^MAT+CGDCONT=1,"IP","3GNET",,0,0^M)

expect (OK)

^M

AT+CGDCONT=1,"IP","3GNET",,0,0^M^M

ERROR

-- failed

Failed (ERROR)

Connect script failed

调用AT+CGDCONT=1,"IP","3GNET",,0,0^M^M

这个指令失败,为了测试串口(命令发送通道)能否正常使用

在chat-wcdma-connect中间添加几个其他的AT命令

比如 OK \rAT+CGMI (厂家认证请求,返回模块厂家信息)

OK \rAT+CGSN (查看产品 IMEI 序列号)

然后在调用pppd call wcdma&发现加上去的那几条AT命令都能正常执行

这说明很可能是EM820W模块没有正确识别SIM卡

后来我又添加了OK \rAT+CSQ指令(查看网络信号质量)发现会调用失败

得出初步结论凡是涉及到SIM卡相关的AT指令都会调用失败,相反其他都能成功执行,这说明板子与EM820W模块之间是能够正确交互数据的,

同时由于EM820W没能识别SIM卡导致相关指令执行失败

后来请教了相关人员,说我的测试方法不正确,我是利用pppd程序来判断某些命令是否能够正常执行,这样就不能排除pppd程序是否能够解析该命令所带来的干扰,所以改为使用一个更为纯粹的办法来进行测试了

Cat/dev/ttyUSB0&

echo “AT+CGSN”> /dev/ttyUSB0

echo “AT+CGMI”> /dev/ttyUSB0

echo “AT+CSQ”  > /dev/ttyUSB0

观察串口得到的response与pppd call wcdma一样

所以还是觉得EM820W没能正确识别SIM卡(不过以后测试还是需要选用正确的方法)

测试SIM卡电路的5根信号线不管是否有SIM卡,5根线各自表现都是一样的,这说明却是没有识别SIM卡,而且SIM_VCC和SIM_RESET的时序一样,这和网上贴出的时序不一样如下图所示,很明显复位信号要比VCC慢半拍

图10

图10

硬件工程师此时修改了电路,在SIM_RESET线上加了一个大电容,增加了些许延时

然后调用ppd call wcdma&

发现拨号成功了,同时使用ifconfig –a 命令出现了一个ppp0的网络设备

接着使用ping –I  ppp0 www.baidu.com进行测试,发现网络不通

哎 问题挺多

2 网络不通

网络不通的问题从一开始就觉得肯定与卡没有关系了,很有可能是网络本身的问题,为了排除以太网口eth0的干扰我进行了如下测试

Ifconfig eth0 down

pppd call wcdma&

Ifconfig eth0 up

Ping –I www.baidu.com

经过上面的折腾居然网络也通了,神奇。

上网查询说是双网卡造成的路由问题

果然在ppp0不通的时候route命令发现路由表如下

# route
     Kernel IP routing table
        Destination    Gateway        Genmask           Flags Metric Ref    UseIface
        10.64.64.64    *                255.255.255.255  UH     0     0        0 ppp0
        192.168.7.0    *                255.255.255.0     U       0     0        0 eth0
        default        192.168.7.1    0.0.0.0              UG     0     0        0 eth0

ppp0通的时候路由表如下

# route
       Kernel IProuting table
      Destination    Gateway        Genmask           Flags Metric Ref    Use Iface
      10.64.64.64      *                255.255.255.255   UH   0      0        0ppp0
      192.168.7.0      *                255.255.255.0      U      0     0        0 eth0
      default             *                0.0.0.0             U      0     0        0 ppp0

由上面可以知道ppp0不通因为默认的路由是eth0的,这肯定不通啊

六 注释

android 3G移植【转】的更多相关文章

  1. Android——4.2 - 3G移植之路之 AT 通信 (四)

    在前文Android--4.2 - 3G移植之路之 reference-ril .pppd 拨号上网 (三)中分析了3G连接网络的流程,当中有说道通过AT指令建立连接, 在这里记录一下3G中的AT通信 ...

  2. Android——4.2 - 3G移植之路之 APN (五)

    APN,这东西对于刚接触的人来说并非那么好理解.对于3G移植上网不可缺少,这里记录一下. 撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/detail ...

  3. 第一章 Android系统移植与驱动开发概述

    本书第一章首先简单概要地介绍了关于Android系统移植和驱动开发的相关内容. 所谓“移植”是指为特定的自己的设备,如手机定制Android的过程.自己开发一些程序(移植)装载在设备上,使得Andro ...

  4. 浅谈Android系统移植、Linux设备驱动

    一.Android系统架构 第一层:Linux内核 包括驱动程序,管理内存.进程.电源等资源的程序 第二层:C/C++代码库 包括Linux的.so文件以及嵌入到APK程序中的NDK代码 第三层:An ...

  5. 第一章:Android系统移植与驱动开发概述

    Android是基于Linux内核的,与Linux内核没有太大的区别,只是增加了一些自己独有的驱动,随着Android发布版本的不断升级,他所使用的Linux内核也在不断升级,以适应新的安卓版本,为他 ...

  6. 第一章Android系统移植与驱动开发概述--读书笔记

    以前,初步学习过嵌入式Linux驱动开发的基础课程,对于驱动开发可以说是有了一点点微末的基础吧.首先我们要对Android嵌入式系统有一个初步的认识,Android系统发展到今天已经具备了完善的架构. ...

  7. Android——程序移植 相关知识总结贴

    android 移植笔记有感 http://www.apkbus.com/android-11842-1-1.html   Android振动器系统结构和移植和调试 http://www.apkbus ...

  8. cocos2dx android版本移植时的Error format not a string literal and no format arguments解决方案

    原文地址 : http://www.cnblogs.com/hhuang2012/p/3336911.html cocos2dx android版本移植时的Error format not a str ...

  9. 将 Android 应用移植到 BlackBerry PlayBook 上

    美国西部时间18号早上,也就是我们的19号凌晨,BlackBerry DevCon活动隆重举行,PlayBook 2.0开发测试版随之发布.PlayBook 2.0的一个重要功能就是支持Android ...

随机推荐

  1. java IO流 内容整理

    在java中,对数据的输入和输出操作以流的方式进行.(注:对文件的操作用io.File类,但不能对文件中的内容进行操作) 一.IO流的分类: 按数据流的方向不同,可以分为输入流和输出流: 按处理数据的 ...

  2. Nginx的初识

    今日刚接触了解到Nginx的反向代理,正向代理,并发,集群,同个站点不同域名的解析访问等等. 1.反向代理:Nginx充当一个桥接的作用,对用户和服务端进行链接,进行服务端的代理,这样有什么好处: a ...

  3. assert.deepStrictEqual()

    assert.deepStrictEqual(actual, expected[, message]) 一般情况下等同于 assert.deepEqual(),但有两个例外.首先,原始值是使用全等运算 ...

  4. Python Pandas库的学习(三)

    今天我们来继续讲解Python中的Pandas库的基本用法 那么我们如何使用pandas对数据进行排序操作呢? food.sort_values("Sodium_(mg)",inp ...

  5. HUAS Summer Contest#4 D题 DP

    Description Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的 ...

  6. 使用java发送电子邮件

    经常在账号绑定邮箱或找回密码时,邮箱会收到一条验证邮件,好奇用代码该怎么发送邮件,看到了许多相关的博客,实现步骤都写的很详细,今天照着其他博客的步骤也确实实现了代码发送邮件,在这里重新记录下步骤,加深 ...

  7. DD & E-app

    DD & E-app 企业内部开发的E应用 前端 demo https://github.com/open-dingtalk docs https://open-doc.dingtalk.co ...

  8. java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.login_jsp

    背景:SpringBoot的项目配置了对jsp的支持,走控制器就报这个错误.相关配置如下: <!-- JSP BEGIN --> <dependency> <groupI ...

  9. HDU 4416 (后缀自动机)

    HDU 4416 Good Article Good sentence Problem : 给一个串S,和一些串T,询问S中有多少个子串没有在T中出现. Solution :首先对所有的T串建立后缀自 ...

  10. 洛谷—— P3370 【模板】字符串哈希

    P3370 [模板]字符串哈希 题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的想好好 ...