手机版
你好,游客 登录 注册
背景:
阅读新闻

Linux下3G卡片在开发板上的详细解决方法(适用于大多数3G卡片)

[日期:2011-03-15] 来源:Linux社区  作者:罗国辉 [字体: ]

四. 交叉编译3G卡片驱动

1. 编译 3G模块的驱动option.ko

在内核源码包中找到usb的3G驱动文件 driver//usb/serial/option.c在其中加入3G卡片的 HUAWEI_VENDOR_ID 0x12D1和HUAWEI_PRODUCT_E1750 0x1446。然后修改Kconfig将option编译成模块。将编译生成的option.ko下载到开发板中并使用insmod加载。

五. 加载驱动

1. 挂载usb虚拟文件系统:mount -t usbfs usbfs /proc/bus/usb/

2. 弹出3G卡片的cdrom: eject /dev/cdroms/cdrom0

3. 现在就可以使用usb_modeswitch –W –c ~/usb_modeswitch.conf切换3G卡片的模式了。此时会出现一些信息,你会看到转换成3G模式后的几个串口信息,ttyUSB0, ttyUSB1, ttyUSB2,如下:

option 1-1:1.0: Option 3G data card converter detected
usb 1-1: Option 3G data card converter now attached to ttyUSB0
option 1-1:1.1: Option 3G data card converter detected
usb 1-1: Option 3G data card converter now attached to ttyUSB1
option 1-1:1.2: Option 3G data card converter detected
usb 1-1: Option 3G data card converter now attached to ttyUSB2

如果没有使用udev,就不会自动生成这些结点,所以需要手动创建这些字符节点。

mknod /dev/usb/ttyUSB0 c 188 0

mknod /dev/usb/ttyUSB1 c 188 1

mknod /dev/usb/ttyUSB2 c 188 2

此时你可以在/dev/usb/tts下面找到生成了3个节点1,2,3.如果在PC上面使用发行版,一般都会使用udev做/dev下面的节点,这样子就可以直接在/etc/udev/rules.d/下面添加相应的设备信息和处理就可以了,但是由于开发板上并没有udev,它会生态太多设备节点,对嵌入式开发资源有较大浪费,这里,根据提示信息说明driver在X1地址处找到了Y1设备,它在/dev下面的节点叫Z1,所以此时我们需要手动创建。我的意思就是说这个节点本身已经注册了相应的ioctl了,只是设备节点没有生成而以,所以这时手动创建是完全没有问题的。

4. 使用串口的测试工具发送AT指令测试几个串口是否可用。

六. 交叉编译pppd拨号工具,并编写拨号脚本

1. 交叉编译pppd拨号工具(这里不详细讲解,可参考后续文章的详细说明)

2. 编写拨号脚本,与GPRS的拨号脚本类似。

A. 联通WCDMA-HSDPA:

(1)wcdma:

debug

nodetach

lock

/dev/ttyUSB0

115200

user "card"

password "card"

crtscts

show-password

usepeerdns

noauth

noipdefault

novj

novjccomp

noccp

defaultroute

ipcp-accept-local

ipcp-accept-remote

connect '/usr/sbin/chat -s -v -f chat-wcdma-connect'

disconnect '/usr/sbin/chat -s -v -f chat-wcdma-disconnect'

(2) chat-wcdma-connect:

TIMEOUT 5

ABORT 'NO CARRIER'

ABORT 'ERROR'

ABORT 'NO DIALTONE'

ABORT 'BUSY'

ABORT 'NO ANSWER'

'' \rAT

OK \rATZ

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

OK-AT-OK ATDT*99#

CONNECT \d\c

(3) chat-wcdma-disconnect

ABORT "BUSY"

ABORT "ERROR"

ABORT "NO DIALTONE"

SAY "\nSending break to the modem\n"

'' "\K"

'' "+++ATH"

SAY "\nGoodbay\n"

B. 移动TD-CDMA

(1)td:

debug

logfile /var/log/pppd.log

lock

/dev/ttyUSB0

115200

user "card"

password "card"

crtscts

connect '/usr/sbin/chat -v -t3 -f td-connect-chat'

disconnect '/usr/sbin/chat -s -v -f td-disconnect-chat'

show-password

usepeerdns

noauth

noipdefault

novj

novjccomp

noccp

defaultroute

ipcp-accept-local

ipcp-accept-remote

(2) td-connect-chat:

ABORT 'NO CARRIER'

ABORT 'ERROR'

ABORT 'NO DIALTONE'

ABORT 'BUSY'

ABORT 'NO ANSWER'

'' \rATZ

OK-AT-OK ATD#777

CONNECT \d\c

(3) td-disconnect-chat:

ABORT "BUSY"

ABORT "ERROR"

ABORT "NO DIALTONE"

SAY "\nSending break to the modem\n"

'' "\K"

'' "+++ATH"

SAY "\nGoodbay\n"

C. 电信CDMA1x

(1) cdma1x:

debug

nodetach

lock

/dev/ttyUSB0

115200

user "card"

password "card"

crtscts

show-password

usepeerdns

noauth

noipdefault

novj

novjccomp

noccp

defaultroute

ipcp-accept-local

ipcp-accept-remote

connect '/usr/sbin/chat -s -v -f cdma1x-connect-chat'

disconnect '/usr/sbin/chat -s -v -f cdma1x-disconnect-chat'

(2) cdma1x-connect-chat:

TIMEOUT 5

ABORT 'NO CARRIER'

ABORT 'ERROR'

ABORT 'NO DIALTONE'

ABORT 'BUSY'

ABORT 'NO ANSWER'

'' \rATZ

OK \rAT\^PREFMODE=2

OK-AT-OK ATD#777

CONNECT \d\c

(3) cdma1x-disconnect-chat:

ABORT "BUSY"

ABORT "ERROR"

ABORT "NO DIALTONE"

SAY "\nSending break to the modem\n"

'' "\K"

'' "+++ATH"

SAY "\nGoodbay\n"

D. 电信CDMA2000-EVDO

(1) evdo

debug

nodetach

lock

/dev/ttyUSB0

115200

user "card"

password "card"

crtscts

show-password

usepeerdns

noauth

noipdefault

novj

novjccomp

noccp

defaultroute

ipcp-accept-local

ipcp-accept-remote

connect '/usr/sbin/chat -s -v -f evdo-connect-chat'

disconnect '/usr/sbin/chat -s -v -f evdo-disconnect-chat'

(2)evdo-connect-chat

TIMEOUT 5

ABORT 'NO CARRIER'

ABORT 'ERROR'

ABORT 'NO DIALTONE'

ABORT 'BUSY'

ABORT 'NO ANSWER'

'' \rATZ

OK-AT-OK ATD#777

CONNECT \d\c

(3)evdo-disconnect-chat

ABORT "BUSY"

ABORT "ERROR"

ABORT "NO DIALTONE"

SAY "\nSending break to the modem\n"

'' "\K"

'' "+++ATH"

SAY "\nGoodbay\n"

3. 使用pppd拨号 :pppd file td(wcdma/evdo/cdma1x)

4. 此时将会使用脚本中设置的端口进行拨号,如果成功后会获得IP地址,电信的3G卡片获取的是外网IP地址,而其它则是获取的一个内网IP,将获取到的DNS添加到/etc/resolv.conf.中,并使用route添加一条默认路由,ping一下外网的地址,如果能够ping通,则说明完成了本篇的工作了,电信,移动,联通有的网络会禁ping,所以ping不通,所以这果,就需要使用自己的测试工具,发送tcp/udp包,确定是否成功完成本篇工作。

七. 可参考文章:

1. http://www.linuxidc.com/Linux/2011-03/33431.htm

2. http://www.linuxidc.com/Linux/2011-03/33432.htm

后记:很多朋友给我发邮件讨论一些问题,但是很多网友根本没有严格按照我文中讲的方法进行一步一步的操作,有的跳过了一些步骤,有些使用了软件的最新版本,这里我说明一下,我上面使用方法都是只限于我使用的软件版本,如果你使用最新的版本,可能你需要自己进行调试,本文只能作为参考 ,对于最新的版本我没有测试过,所以如果你想节约时间,请严格使用我文章各软件版本。当你的工作陷入问题的时候,请不要急于找人帮助,而是先确定问题,然后再重新仔细地读我的文章,如果你完全按照我的文章来做,不应该会出现一些问题的。在此谢谢大家的关注!

linux
相关资讯       Linux教程 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款