Yocto开发笔记之《驱动调试-华为3G模块》(QQ交流群:519230208)

QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样

========================================================

参考:
http://blog.csdn.net/yel617/article/details/5602934 http
://wenku.baidu.com/link?url=v96wCcrz8oYObkMTiPa55OyWxg35MhHF4L7voiDhKhtNPCB3uJhvNshz9UVUgpo4BTWmJE_4AhcAoW5oVOmtxr_NHYxb8ev0VKCpGwCSq1m http://blog.csdn.net/suntao222/article/details/8930744
http://wandering.blog.51cto.com/467932/354562
http://blog.chinaunix.net/uid-9525959-id-3998519.html

一 上网模块需要内核编译配置  《Guide to Kernel Driver Integration ......

  修改源文件,修改内核配置项等,详细参考3G模块手册。

二 交叉编译一些工具(参考 《Yocto Project Application Developer's Guide》):

将以下内容添加到根目录的Makefile文件中:

CC=arm-poky-linux-gnueabi-gcc -m32 -march=i586 --sysroot=/opt/poky/1.8/sysroots/x86_64-pokysdk-linux
LD=arm-poky-linux-gnueabi-ld --sysroot=/opt/poky/1.8/sysroots/x86_64-pokysdk-linux
CFLAGS=-O2 -pipe -g -feliminate-unused-debug-types
CXXFLAGS=-O2 -pipe -g -feliminate-unused-debug-types

change to :

CC=arm-poky-linux-gnueabi-gcc --sysroot=/home/summer/test-yocto/qemuarm
LD=arm-poky-linux-gnueabi-ld --sysroot=/home/summer/test-yocto/qemuarm
CFLAGS=-O2 -pipe -g -feliminate-unused-debug-types
CXXFLAGS=-O2 -pipe -g -feliminate-unused-debug-types

# ./configure

# make

PPP

1. 下载代码:https://ppp.samba.org/
2. 编译代码:  http://blog.csdn.net/lanyou1900/article/details/40185259
3. 编译成功后将编译生成的chat,pppd,pppdump等命令拷贝到板子文件系统的/usr/sbin目录下边去

USB(我的环境里以下功能都包含了,以下仅用来参考)

libusb-1.0.9 (用于编译usb-modeswitch-2.0.1)
http://sourceforge.net/projects/libusb/postdownload?source=dlp

usb-modeswitch-2.0.1 (用于切换网卡的模式)
http://www.draisberghof.de/usb_modeswitch/#download

usb-modeswitch-data-20130807 (用于切换时指定切换的型号)
http://www.draisberghof.de/usb_modeswitch/#download

三 编写拨号脚本

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

1. 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'

2. chat-wcdma-connect

TIMEOUT 5
ABORT 'NO CARRIER'
ABORT 'ERROR'
ABORT 'NODIALTONE'
ABORT 'BUSY'
ABORT 'NO ANSWER'
''  
AT
OK  
ATZ
OK 
AT+CGDCONT=1,"IP","3GNET",,0,0
OK-AT-OK ATDT*99#
CONNECT dc

3. chat-wcdma-disconnect

ABORT"ERROR"
ABORT "NODIALTONE"
SAY"
Sending break to the modem
"
'' "K"
''"+++ATH"
SAY"
Goodbay
"

 

四 添加DNS信息

# vi /etc/resolv.conf       // 加入以下内容, 如果已经存在,替换成以下内容
  nameserver 202.99.160.68
  nameserver 202.99.166.4

或者,替换成
nameserver 1.2.4.8
nameserver 210.2.4.8


// TOBEDO : 重启开发板,dns信息被冲掉

五 检测ppp0网络是否能够使用

# Ping –I ppp0 www.baidu.com  // 能够ping通就表示3G卡移植驱动成功

出现错误,域名不能ping通,ip可以

root@imx6ulevk:~# ping www.baidu.com
ping: bad address 'www.baidu.com'

六 测试模块状态

# lsusb   // 查看usb连接状态
Bus 001 Device 005: ID 12d1:1c25 Huawei Technologies Co., Ltd. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 

# netstat -nr
# dmesg

cdc_ether 1-1:2.0 eth2: register 'cdc_ether' at usb-ci_hdrc.1-1, CDC Ethernet Device, 00:1e:10:1f:00:00
usbcore: registered new interface driver option
usbcore: registered new interface driver cdc_ether
usbserial: USB Serial support registered for GSM modem (1-port)
option 1-1:2.2: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
option 1-1:2.3: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
option 1-1:2.4: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
usb 1-1: USB disconnect, device number 3
cdc_ether 1-1:2.0 eth2: unregister 'cdc_ether' usb-ci_hdrc.1-1, CDC Ethernet Device
option1 ttyUSB0: GSM modem (1-port) converter now disconnected from ttyUSB0
option 1-1:2.2: device disconnected
option1 ttyUSB1: GSM modem (1-port) converter now disconnected from ttyUSB1
option 1-1:2.3: device disconnected
option1 ttyUSB2: GSM modem (1-port) converter now disconnected from ttyUSB2
option 1-1:2.4: device disconnected
usb 1-1: new full-speed USB device number 4 using ci_hdrc
usb 1-1: new high-speed USB device number 5 using ci_hdrc
cdc_ether 1-1:2.0 eth2: register 'cdc_ether' at usb-ci_hdrc.1-1, CDC Ethernet Device, 00:1e:10:1f:00:00
option 1-1:2.2: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
option 1-1:2.3: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
option 1-1:2.4: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
# dmesg | grep -in ppp   // 查看ppp连接状态cat /dev/ttyUSB0 &
# echo AT+CGMI > /dev/ttyUSB0   // 查询厂商相关信息
# echo AT+CSQ > /dev/ttyUSB0  // 查询信号,顺带还可以让你知道SIM卡相关的是否正常
# #netstat -nal   // 查看网络连接状态
# ifconfig -a   

 Attention:

USB线的选择直接影响到能否正常识别模块

附录:

一 插上USB 3G模块显示的log

root@imx6ulevk:/mnt# usb 1-1: new high-speed USB device number 2 using ci_hdrc
usb 1-1: new high-speed USB device number 3 using ci_hdrc
cdc_ether 1-1:2.0 eth2: register 'cdc_ether' at usb-ci_hdrc.1-1, CDC Ethernet Device, 00:1e:10:1f:00:00
usbcore: registered new interface driver option
usbserial: USB Serial support registered for GSM modem (1-port)
option 1-1:2.2: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
option 1-1:2.3: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
option 1-1:2.4: GSM modem (1-port) converter detected
usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2

二 lsusb显示的log

root@imx6ulevk:/mnt# lsusb
Bus 001 Device 003: ID 12d1:1c25 Huawei Technologies Co., Ltd. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

三 ls /dev/ppp显示的log

root@imx6ulevk:/mnt# ls /dev/ppp
/dev/pp

四 手动拨号的错误log

root@imx6ulevk:~# timeout set to 5 seconds
abort on (NO CARRIER)
abort on (ERROR)
abort on (NODIALTONE)
abort on (BUSY)
abort on (NO ANSWER)
send (^MAT^M)
expect (OK)
^M
OK
 -- got it

send (^MATZ^M)
expect (OK)
^M
^M
OK
 -- got it

send (^MAT+CGDCONT=1,"IP","3GNET",,0,0^M)
expect (OK)
^M
^MAT+CGDCONT=1,"IP","3GNET",,0,0^M^M
OK
 -- got it

send (ATDT*99#^M)
expect (CONNECT)
^M
ATDT*99#^M^M
CONNECT
 -- got it

send (d)
Script /usr/sbin/chat -s -v -f /etc/ppp/peers/chat-wcdma-connect finished (pid 902), status = 0x0
Serial connection established.
Couldn't set tty to PPP discipline: Invalid argument
expect (ABORT"ERROR")
^C

 看起来像拨号成功的log

root@imx6ulevk:~# pppd call wcdma &
[1] 844
root@imx6ulevk:~# timeout set to 5 seconds
abort on (NO CARRIER)
abort on (ERROR)
abort on (NODIALTONE)
abort on (BUSY)
abort on (NO ANSWER)
send (^MAT^M)
expect (OK)
^MAT^M^M
OK
 -- got it

send (^MATZ^M)
expect (OK)
^M
^MATZ^M^M
OK
 -- got it

send (^MAT+CGDCONT=1,"IP","3GNET",,0,0^M)
expect (OK)
^M
^MAT+CGDCONT=1,"IP","3GNET",,0,0^M^M
OK
 -- got it

send (ATDT*99#^M)
expect (CONNECT)
^M
ATDT*99#^M^M
CONNECT
 -- got it

send (d)
Script /usr/sbin/chat -s -v -f /etc/ppp/peers/chat-wcdma-connect finished (pid 845), status = 0x0
Serial connection established.
using channel 1
Using interface ppp0
Connect: ppp0 <--> /dev/ttyUSB0
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x38c54823> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <accomp> <pcomp> <asyncmap 0x0> <mru 1500> <magic 0x545> <auth chap MD5>]
No auth is possible
sent [LCP ConfRej id=0x1 <auth chap MD5>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x38c54823> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x2 <accomp> <pcomp> <asyncmap 0x0> <mru 1500> <magic 0x545>]
sent [LCP ConfAck id=0x2 <accomp> <pcomp> <asyncmap 0x0> <mru 1500> <magic 0x545>]
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
rcvd [IPCP ConfReq id=0x1]
sent [IPCP ConfNak id=0x1 <addr 0.0.0.0>]
rcvd [IPCP ConfNak id=0x1 <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
sent [IPCP ConfReq id=0x2 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
rcvd [IPCP ConfReq id=0x2]
sent [IPCP ConfAck id=0x2]
rcvd [IPCP ConfNak id=0x2 <addr 10.74.89.144> <ms-dns1 120.80.80.80> <ms-dns2 221.5.88.88>]
sent [IPCP ConfReq id=0x3 <addr 10.74.89.144> <ms-dns1 120.80.80.80> <ms-dns2 221.5.88.88>]
rcvd [IPCP ConfAck id=0x3 <addr 10.74.89.144> <ms-dns1 120.80.80.80> <ms-dns2 221.5.88.88>]
Could not determine remote IP address: defaulting to 10.64.64.64
local  IP address 10.74.89.144
remote IP address 10.64.64.64
primary   DNS address 120.80.80.80
secondary DNS address 221.5.88.88

ifconfig -a

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:10.74.89.144  P-t-P:10.64.64.64  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:5 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:68 (68.0 B)  TX bytes:80 (80.0 B)

netstat -nr

root@imx6ulevk:~# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 ppp0
10.64.64.64     0.0.0.0         255.255.255.255 UH        0 0          0 ppp0

error

root@imx6ulevk:~# ping -I ppp0 www.baidu.com
ping: bad address 'www.baidu.com'

success

root@imx6ulevk:~# ping 202.108.23.237
PING 202.108.23.237 (202.108.23.237): 56 data bytes
64 bytes from 202.108.23.237: seq=0 ttl=52 time=1515.208 ms
64 bytes from 202.108.23.237: seq=2 ttl=52 time=75.742 ms
原文地址:https://www.cnblogs.com/alanfang/p/5052006.html