linux WCDMA的资料
首先必须让开发板识别上网卡,因此,要修改usb_modeswitch.conf,但usb_modeswitch并没有带有E1750的配置文件,不像EC169那么方便#E1750DefaultVendor= 0x12d1;DefaultProduct= 0x1446TargetVendor= 0x12d1TargetProduct= 0x1001MessageContent=
首先必须让开发板识别上网卡,因此,要修改usb_modeswitch.conf,但usb_modeswitch并没有带有E1750的配置文件,不像EC169那么方便 #E1750 TargetVendor= 0x12d1 然后是ppp拨号下的配置 /nfs/etc/ppp/peers/wcdma ttyUSB0 接着是chat ECHO ON ABORT "BUSY" ABORT "NO ANSWER" ABORT "ERROR" TIMEOUT 20 "" AT OK AT+CGDCONT=1,"IP","3gnet",,0,0 OK ATDT*99# CONNECT |
折腾了一番通过几种USB上网卡在Linux下上WCDMA,在此记录一下:
通用配置文件:
/etc/ppp/peers/wcdma :
/dev/ttyACM0
460800
connect '/etc/ppp/chat-wcdma'
noauth
usepeerdns
noipdefault
defaultroute
----
注意,其中的/dev/ttyACM0 是串口设备,后面描述。
/etc/ppp/chat-wcdma
#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
exec /usr/sbin/chat -v \
ECHO ON \
ABORT 'BUSY' \
ABORT 'NO ANSWER' \
ABORT 'ERROR' \
TIMEOUT 20 \
'' 'AT' \
OK AT+CFUN=6 \
OK 'AT+CGDCONT=1,"IP","3gnet",,0,0' \
OK 'ATDT*99#' \
CONNECT
其中的3gnet 就是联通WCDMA上网需要的APN啦。 CFUN=6是让索爱MD-400只工作在WCDMA网络下。相应地CFUN=5就只工作再GSM/GPRS/EDGE下, CFUN=1就是全自动选择
拨号连接时,用
pppd call wcdma
即可。你可以自己设置IP伪装NAT等等事宜。
以上是用索尼爱立信MD-400上网卡设置的,如果你用的是华为E1750, 那么设备名就换成/dev/ttyUSB0 即可。
无论是索爱MD400还是华为E1750, 都需要小工具 usb_modeswitch 1.0.2 切换其倒霉的USB工作状态,详细的介绍和下载可以去这里看看: http://www.draisberghof.de/usb_modeswitch/
如果是电信的天翼CDMA2000 EV-DO 3G, 测试了一下华为EC1260,基本区别不大,注意以下几点:
1, 2.6.19之后的核心有专门对付EC1260的代码, 插进去直接就令其工作在Modem模式,你会看到有/dev/ttyUSB0设备,可以不需要usb_modeswitch的帮助。低版本核心可能还离不开。
2, EVDO没有APN的概念,上面的/etc/ppp/chat-wcdma 脚本改成这样即可:
[root@pxi4g ppp]# cat chat-evdo
#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
exec /usr/sbin/chat -v \
ECHO ON \
ABORT 'BUSY' \
ABORT 'NO ANSWER' \
ABORT 'ERROR' \
TIMEOUT 20 \
'' 'AT' \
OK 'ATDT#777' \
CONNECT
也就是说,直接拨特殊号码#777即可。 peers/wcdma文件可以不改。
3G卡片在开发板上的详细解决方法(适用于大多数3G卡片) Anson Luo(罗国辉) 一. 环境 1. 开发板内核:linux kernel 2.6.14 2. 3G卡片:HUAWEI E1750 二. 相关工具与库文件下载 1. usb_modeswitch-1.0.6.tar.bz2(http://www.draisberghof.de/usb_modeswitch/) 建议下载较新版本,如果怕麻烦就下载与我一样的版本,下同。 Usb_modeswitch是对USB设备的工作模式进行转换一种万能工具,当然这种宝贝,只有在linux下才能体现其巨大的作用。随着移动通信,无线通信的发展,越来越多的设备被制作成USB接口,像一些无线网卡,3G数据卡等等。这些设备的厂家一般都会提供windows 下驱动,这些设备在第一次插上机子的时候,它们处于CDROM+闪存模式,可以从中提供驱动程序安装驱动,在驱动程序安装完成后,驱动会转换成3G模式,此时就会出现usb modem设备,目前的3G卡片全都是这样,这就是所谓的“ZeroCD”。 而在linux下我们可没有那么好的待遇,厂家一般不会给我们提供linux下面的驱动,而目前的内核还不能自动识别并驱动。所以我们需要用usb_modeswitch这个工具来进行模式转换,设备模式依赖usb-storage和usbserial模式,所以,在开发板上需要有这两种模块的支持,设备并能够正常工作于这两种模式下。 2.usb_modeswitch-current_data.tar.bz2(http://www.draisberghof.de/usb_modeswitch/) 这个包里包括提供给UDEV的驱动设备信息,和很多设备使用usb_mdoeswitch进行转换模式时需要配置的参数。下载它用于参考。 3. libusb-1.0.6.tar.bz2 (http://sourceforge.net/projects/libusb/files/libusb-1.0/) Libusb才是我们的真正骨干力量,提供给usb_modeswitch一套系统API,所以,自然usb_modeswitch这个包工头要想工作,肯定不能离开libusb这个工人为其服务。 4.libusb-compat-0.1.3.tar.bz2 (http://www.linuxfromscratch.org/blfs/view/svn/general/libusb-compat.html) libusb分为0.1和1.0两年版本,而1.0版本与0.1有较大的不同,并不向下兼容,必须依赖libusb-compat。 三. 交叉编译usb_modeswitch 1. 交叉编译 libusb A. 解压并进入libusb-1.0.6目录,建立子目录install用于存放最后生存的库文件与头文件。 [Anson@libusb-1.0.6]# mkdir install B. 配置并生成Makefile文件 [Anson@libusb-1.0.6]#./configure --build=i686-linux --host=arm-linux --prefix=/home/Anson/libusb-1.0.6/install C. [Anson@libusb-1.0.6]#make D. [Anson@libusb-1.0.6]# make install 2. 设置PKG_CONFIG_PATH环境变量,以使我们后面的编译能够顺利找到libusb库 A.设置环境变量 [Anson@libusb-1.0.6]# export PKG_CONFIG_PATH=/home/Anson/libusb-1.0.6/install/lib/pkgconfig:$PKG_CONFIG_PATH B.查看是否设置正确 [Anson@libusb-1.0.6]#echo $PKG_CONFIG_PATH 3. 交叉编译lib_compat 与上面编译libusb的方法类似: A.[Anson@libusb-compat-0.1.3]#.mkdir install B . [Anson@libusb-compat-0.1.3]#./configure --build=i686-linux --host=arm-linux --prefix=/home/Anson/libusb-compat-0.1.3/install C. [Anson@libusb-compat-0.1.3]#make D. [Anson@libusb-compat-0.1.3]#make install
A.修改Makefile文件 修改STRIP和CC选项为: STRIP = arm-xxx-linux-strip CC = arm-xxx-linux-gcc B. 可以将上面的libusb和libusb-compat的库和头文件拷贝到交叉编译器的lib和include目录下,或者直接加上编译选项指令库的路径即可如下: INCLUDEDIR = /home/anson//libusb-1.0.6/install/include/libusb-1.0 LIBDIR = /home/anson/libusb-1.0.6/install/lib $(PROG): $(OBJS) $(CC) $(CCFLAGS) -I $(INCLUDEDIR) -L $(LIBDIR) -o $(PROG) $(OBJS) 这里的usb.h就是libusb-compat目录下的,如果没有usb.h,usb_modeswitch是编译不过去的。 C. make
DefaultVendor= 0x12d1 DefaultProduct= 0x1446 TargetVendor = 0x12d1 TargetProduct= 0x1001 MessageContent="55534243000000000000000000000011060000000000000000000000000000" MessageEndpoint=0x01 CheckSuccess=5 HuaweiMode=0 (特别注意这个参数,我在开发板上的麻烦就出在这个参数上面)
6. 将上面生成的libusb动态库拷贝到开发板的库目录下,将上面生成的usb_modeswitch可执行程序和usb_modeswitch.conf配置文件下载到开发板某目录下。 四. 交叉编译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 如果没有使用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
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"
(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'
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
ABORT "ERROR" ABORT "NO DIALTONE" SAY "\nSending break to the modem\n" '' "\K" '' "+++ATH" SAY "\nGoodbay\n"
(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'
ABORT 'NO CARRIER' ABORT 'ERROR' ABORT 'NO DIALTONE' ABORT 'BUSY' ABORT 'NO ANSWER' '' \rATZ OK-AT-OK ATD#777 CONNECT \d\c
ABORT "ERROR" ABORT "NO DIALTONE" SAY "\nSending break to the modem\n" '' "\K" '' "+++ATH" SAY "\nGoodbay\n"
4. 此时将会使用脚本中设置的端口进行拨号,如果成功后会获得IP地址,电信的3G卡片获取的是外网IP地址,而其它则是获取的一个内网IP,将获取到的DNS添加到/etc/resolv.conf.中,并使用route添加一条默认路由,ping一下外网的地址,如果能够ping通,则说明完成了本篇的工作了,电信,移动,联通有的网络会禁ping,所以ping不通,所以这果,就需要使用自己的测试工具,发送tcp/udp包,确定是否成功完成本篇工作。 七. 可参考文章: 1. http://blog.chinaunix.net/u3/106318/showart_2110454.html 2. http://blog.chinaunix.net/u3/106318/showart_2102540.html 3.http://topic.csdn.net/u/20100513/15/dd3a4f01-e361-4e78-837e-c158b70b0214.html 4.http://blog.csdn.net/seven407/archive/2009/12/01/4904877.aspx
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ipromiseu/archive/2010/01/07/5154004.aspx |
更多推荐
所有评论(0)