我们这段时间作了一个基于arm开发板和开源linux的3G模块,给大家作个参考。3G选用的是华为的EC1261,USB接口,现在市面上的基本都是USB口,据说可以直接去掉在USB modem的USB转串口等模块,直接通过GPIO口来控制3G模块,但是由于我们这资源有限,实现不了那么复杂的工作,所以就直接用了华为的产品了,而没有去找更加基础的芯片。
USB网卡内部结构比较复杂,它们大部分都包括modem,USB转串口模块,存储模块,读卡器模块,所以linux内核需要添加的东西也比较多。USB主机控制器有3种规格:OHCI(Open Host Controller Interface)、UHCI(Universal Host Controller Interface)和EHCI(Enhanced Host Controller Interface),OHCI驱动程序用来为非PC系统上以及带有SiS和ALi芯片组的PC主板上的USB芯片提供支持。UHCI驱动程序多用来为大多数其他PC主板(包括Intel和Via)上的USB芯片提供支持。EHCI由USB 2.0规范所提出,它兼容OHCI和UHCI。UHCI的硬件线路比OHCI简单,所以成本较低,但需要较复杂的驱动程序,CPU负荷稍重。我们这里使用的是OHCI。
言归正传,我们来介绍第一步。重新编译Linux内核,我们需要在内核里添加如下模块:
Device Drivers=>
USB support=>
[*] Suppon for Host-side USB
[*] USB device filesystem
[*] USB device class-devices
[*] OHCI HCDsupport
[*] USB Mass Storage Support
USB Serial Convelter suppor -->
[*] USB driver for GSM and CDMA modems
SCSI device support=>
[*]SCSI device support
[*] SCSI disk support
[*] Probe all LUNs on each SCSI device
HDI Devices=>
[*] USB Human Interface Devices support
[*] /dev/hiddev raw HID device support
Network device support=>
PPP(point—to—point protoco1)support
PPP support for async serial ports
PPP suppo rt for sync tty ports
PPP Deflate compression
PPP BSD —Compress compression
PPP MPPE compress compression(encryp—tion)
PPP over Ethernet
PPP over 12TP
内核配置就这样了,但是别急,还没完呢。当你碰到一个内核并不支持的新设备后,只需要把该Dongle 3G接口的Vendor ID和Product ID添加到linux-2.6.x/drivers/usb/serial/optionc中的option_ids[]数组即可。顺便说下,每个USB设备都有Vendor ID和Product ID,但不一定唯一哦,Vendor ID是设备商ID,比如华为和中兴都有各自的Vendor ID。Product ID是他们旗下产品的ID,这个就不一定唯一了。
然后开始编译内核,编译好了之后把内核下载进去,插上USB网卡,还要进行如下操作:
mount -t usbfs usbfs /proc/bus/usb/
然后运行命令cat /proc/bus/usb/devices 可以获得设备信息。如果没有devices文件的话说明你的配置有问题。呵呵。另外在dev下应该出现sr0文件。
下面是第二步,把3G网卡由存储模式转为 modem模式
部分网卡可以直接通过eject命令弹出,转换成modem模式,但是大部分都不行。 大家不用担心,有一个叫usb-modeswitch的软件可以帮我们解决这个问题。
不知大家第二步进行的怎么样,下面就是第三步了,也就是最后一步 PPP拨号
下载PPP套件。本文选用其版本PPP-2.4.1。在终端中执行#tar zxvf PPP-2.4.4.tar.gz命令,将PPP-2.4.4.tar3gz解压至/opt目录,进入此目录后执行./configure命令,再执make CC=arm-linux-gcc命令编译char、PPpd、pppdump、pppstats,将生成的可执行文件拷贝到开发板的/bin目录下。
下面这一步比较难,也就是配置文件问题。不详述了,直接引用。
我要补充的一点是最好在
/etc/resolv.conf 里直接加上一句 nameserver 8.8.8.8
如果要用的话最好严格按照我说的作哦。