嵌入式linux 平台下网络服务器(3G+PPP+BOA+ARM) 一、华为3G模块EM770W在LINUX 下的驱动1. EM770W为华为3G WCDMA模块,支持HSPA(HSPA data rate - 7.2 Mbps DL / 2 Mbps UL),更适合于无线视频服务器和监控器。EM770W 接口为mini PCIE,52个引脚,引脚中对外数据接口包含一个全串口UART1,一个四线串口UART2,一个USB2.0。EM770W 与ARM 芯片连接有两种方式:一种是通过UART1,速度只能达到115.200KBPS,这与HSPA 速率明显跟不上,一般不用此方式进行连接,如果和MCU连接进行小量数据传输可以用此方式。第二种方式是通过USB和ARM芯片连接,此方式适合大量数据传输,速率更快。2. EM770W在LINUX 下的驱动在较新版本的LINUX 内核(LINUX-2.6.18 以上)里已经有了EM770W 的驱动,需在内核增加支持,修改配置如下:在linux 内核目录下:make ARCH=arm menuconfig
然后重新编译内核,增加驱动后在ARM 开发板上通过USB 接入EM770W,系统识别出USB 设备,将EM770W虚拟成三个串口设备,节点为/dev/ttyUSB0,/dev/ttyUSB1,/dev/ttyUSB2。如果使用较早的内核而不支持“USB driver for GSM and CDMA modems”的话,可以选择Usb Generic SerialDriver,但是需要把Usb Driver的PID和VID设置成华为的ID(EM700/EM770W 的VID: 0x12d1 PID: 0x1001)
ID 更改步骤:在linux 内核目录下vi drivers/usb/serial/option.c在里面定义两个宏(EM770W的VID: 0x12d1 PID: 0x1001):#define EM770W_OPTION_VENDOR_ID 0x12d1#define EM770W_OPTION_PRODUCT_COLT 0x1001增加到结构体中static struct usb_device_id option_ids[] = { { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },…{ USB_DEVICE(EM770W_OPTION_VENDOR_ID , EM770W_ OPTION_PRODUCT_COLT) },}修改完成后重新编译内核就可以驱动EM770W 了。到此3G模块驱动增加完成,可以进行下一步的操作。二、3G模块在linux下PPP 拨号上网1. 为了使用ppp 方式进行拨号上网,需要linux 内核支持ppp,需要在内核选项里将ppp支持选上,然后重新编译内核即可2. 使用命令pppd call script 的方式拨号:1) 下载ppp-dev-2.4.4.tar.gz(用此软件为了交叉编译后得到pppd和chat 两个可执行文件),步骤如下:(使用arm-linux-3.4.4 编译)tar zxvf ppp-dev-2.4.4.tar.gzcd ppp-2.4.4./configuremake CC=/usr/local/arm/3.4.4/bin/arm-linux-gcc编译后将pppd 目录里的pppd 可执行文件和chat 目录下的chat 可执行文件复制到ARM 开发板根文件系统/usr/sbin/目录下。2) 配置ppp:#/etc/ppp/gprs-connect-chat# chat script for HuaWei EM770W 3G module.TIMEOUT 15ABORT "DELAYED"ABORT "BUSY"ABORT "ERROR"ABORT "NO DIALTONE"ABORT "NO CARRIER"TIMEOUT 40'' \rATOK ATS0=0OK ATE0V1OK AT+CGDCONT=1,"IP","UNINET"OK ATDT*99***1#CONNECT ''#/etc/ppp/gprs-disconnect-chatABORT OKABORT BUSYABORT DELAYEDABORT "NO ANSWER"ABORT "NO CARRIER"ABORT "NO DIALTONE"ABORT VOICEABORT ERRORABORT RINGINGTIMEOUT 12"" \\k\\k\\k\\d+++ATH "NO CARRIER-AT-OK" ""#/etc/ppp/chap-secrets#client server secret IP address"uninet" * "uninet" *#/etc/ppp/pap-secrets#client server secret IP address"uninet" * "uninet" *#/etc/ppp/peers/gprs# This is pppd script, used Huawei EM770W 3G Module# Usage: root>pppd call gprs/dev/ttyUSB0115200crtsctsmodemdebugnodetachusepeerdnsnoipdefaultdefaultrouteuser "uninet"0.0.0.0:0.0.0.0connect '/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat'#disconnect '/bin/chat -v -f /etc/ppp/gprs-disconnect-chat'使用命令:pppd call gprs三、WEB 服务器移植(BOA)1、下载Boa源码下载地址: 下载boa-0.94.13.tar.gz,下载后解压编译(注意:必须用cross-2.95.3编译)tar zxvf boa-0.94.13.tar.gz./configure –host=arm-linux CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc完成后生成Makefile,然后修改Makefile:CC = /usr/local/arm/2.95.3/bin/arm-linux-gccCPP = /usr/local/arm/2.95.3/bin/arm-linux-gcc –E修改完成直接make/usr/local/arm/2.95.3/bin/arm-linux-strip boa (去除调试信息,减小体积)将生成的boa可执行文件复制到开发板根文件系统/usr/sbin/下。Boa 需要在/etc 目录下建立一个boa 目录,里面放入Boa 的主要配置文件boa.conf。在Boa 源码目录下已有一个示例boa.conf,可以在其基础上进行修改2、ScriptAlias的修改修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/为ScriptAlias /cgi-bin/ /var/www/cgi-bin/这是在设置CGI 的目录,你也可以设置成别的目录。比如用户文件夹下的某个目录。3、ServerName的设置修改#ServerName 为ServerName 注意:该项默认为未打开,执行Boa 会异常退出,提示“gethostbyname::No such file or directory”,所以必须打开。其它默认设置即可。你也可以设置为你自己想要的名字。比如我设置为:ServerNametekkaman2440此外,还需要:通常可以从linux主机的/etc目录下将mime.types 文件复制开发板/etc目录下。创建日志文件所在目录/var/log/boa创建HTML文档的主目录/var/www创建CGI脚本所在录/var/www/cgi-bin