内核:需要有以下模块:option usbserial usbstorage

主要是要在编译内核的时候选中

[*] Network device support  --->

<*>   PPP (point-to-point protocol) support

<*>     PPP BSD-Compress compression

<*>     PPP Deflate compression

[*]     PPP filtering

<*>     PPP MPPE compression (encryption)

[*]     PPP multilink support

<*>     PPP over Ethernet

<*>     PPP support for async serial ports

<*>     PPP support for sync tty ports

[*] USB support  --->

<*>     USB Modem (CDC ACM) support

[*] USB support  --->

<*>   USB Serial Converter support  --->

<*>   USB driver for GSM and CDMA modems

修改linux-2.6.21.x/drivers/usb/serial/option.c

#define HUAWEI_WENDIR_ID 0x12d1

#define HUAWEI_PRODUCT_ECxx 0x14ef

{USB_DEVICE(HUAWEI_WENDIR_ID,HUAWEI_PRODUCT_ECxx)} /*HUAWEI  xxx*/

#make modules                       //编译外挂模块

#make modules_install            //安装模块

#usbserial.ko,option.ko

模块编译完后应将其复制到开发板上,并执行以下命令,否则会报找不到modules.dep

#depmod –a                    //创建模块的链接

#modprobe usbserial.ko

# modprobe option.ko

软件4个:libusb、usb_modeswitch、pppd、usb-modeswitch-data(交叉编译)

#lsusb、usb_modeswitch、(lib文件夹)、chat、pppd等移植到开发板。

这个数据包包含了usb_modeswitch所有支持的3G上网卡的配置文件。

1.在开发板上USB口插入3G上网卡。

2.在开发板上输入lsusb会出现以下结果,说明开发板与3G上网卡硬件物理上连接成功,记下12d1:14ef这个数字,后边用。

# lsusb

Bus 004 Device 002: ID 12d1:14ef HUAWEI XXXX(省略若干)

这里若无lsusb命令,可以查看/proc/bus/usb/devices下的响应设备信息。其中:

#cat /proc/bus/usb/devices

Vendor=12d1 ProdID=14ef

3.编辑usb_modeswitch目录下的usb_modeswitch.conf文件

# T-Mobile NL (Huawei xxx)

#

# Contributor: Alex Hermann

DefaultVendor= 0x12d1

DefaultProduct=0x14ef

TargetVendor= 0x12d1

TargetProduct= 0x1506

MessageContent="55534243123456780000000000000011062000000100000000000000000000"

CheckSuccess=5

4.执行usb_modeswitch将3G上网卡U盘模式转换为modem模式

#./usb_modeswitch -c /etc/usb_modeswitch/usb_modeswitch.conf

Looking for target devices ...

No devices in target mode or class found

Looking for default devices ...

found matching product ID

adding device

Found device in default mode, class or configuration (1)

Accessing device 003 on bus 001 ...

Getting the current device configuration ...

OK, got current device configuration (1)

Using first interface: 0x00

Using endpoints 0x08 (out) and 0x87 (in)

Inquiring device details; driver will be detached ...

Looking for active driver ...

OK, driver found ("usb-storage")

OK, driver "usb-storage" detached

SCSI inquiry data (for identification)

-------------------------

Vendor String: HUAWEI

Model String: Mass Storage

Revision String: 2.31

-------------------------

USB description data (for identification)

-------------------------

Manufacturer: HUAEI TECHNOLOGIES

Product: HUAWEI Mobile

Serial No.: not provided

-------------------------

Setting up communication with interface 0

Using endpoint 0x08 for message sending ...

Trying to send message 1 to endpoint 0x08 ...

OK, message successfully sent

Resetting response endpoint 0x87

Could not reset endpoint (probably harmless): -145

Resetting message endpoint 0x08

Could not reset endpoint (probably harmless): -19

Device is gone, skipping any further commands

Checking for mode switch (max. 20 times, once per second) ...

Searching for target devices ...

Found target device, now opening

Found correct target device

Mode switch succeeded. Bye.

屏幕会显示一堆模式转换信息,之后会显示成功

检查是否转换成功,执行lsusb,发现14ef变为1506,表示转换成功。

5.查看/dev下是否有一下设备节点

#ls /dev/ttyUSB*

#/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3 /dev/ttyUSB4

这里根据切换后的提醒,建立相应的设备节点。

6.硬件问题都解决了,开始拨号吧:(电信的拨号脚本,联通、移动的应该会变化,请google)

第一个文件:wcdma (路径/etc/ppp/peer/)

/dev/ttyUSB0

115200

nodetach

user "card"

password "card"

crtscts

show-password

usepeerdns

noauth

noipdefault

novj

novjccomp

noccp

defaultroute

ipcp-accept-local

ipcp-accept-remote

connect 'chat -s -v -f /etc_ro/ppp/chat/wcdma-connect-chat'

disconnect 'chat -s -v -f /etc_ro/ppp/chat/disconnect-chat'

第二个文件:wcdma-connect-chat (路径/etc/ppp/chat/)

ABORT 'NO CARRIER'

ABORT 'ERROR'

ABORT 'NO DIALTONE'

ABORT 'BUSY'

ABORT 'NO ANSWER'

'' \rAT

OK \rATZ

OK \rAT+CGDCONT=1,"IP","cmnet",,0,0

OK-AT-OK ATDT*99***1#

CONNECT \d\c

电信脚本

TIMEOUT 5
ABORT "DELAYED"
ABORT "BUSY"
ABORT "ERROR"
ABORT "NO DIALTONE"
ABORT "NO CARRIER"
""   AT
"OK-+++\c-OK" ATH0
TIMEOUT 40
""   AT
OK  ATDT#777
CONNECT ""

第三个文件:disconnect-chat

ABORT "BUSY"

ABORT "ERROR"

ABORT "NO DIALTONE"

SAY "/nSending break to the modem/n"

'' "/K"

'' "+++ATH"

SAY "/nGoodbye/n"

执行脚本拨号测试

#pppd call   gprs

abort on (NO CARRIER)

abort on (ERROR)

abort on (NO DIALTONE)

abort on (BUSY)

abort on (NO ANSWER)

send (^MAT^M)

expect (OK)

^MT^M^M

OK

-- got it

send (^MATZ^M)

expect (OK)

^M

^MATZ^M^M

OK

-- got it

send (^MAT+CGDCONT=1,"IP","cmnet",,0,0^M)

expect (OK)

^M

^MAT+CGDCONT=1,"IP","cmnet",,0,0^M^M

OK

-- got it

send (ATDT*99***1#^M)

expect (CONNECT)

^M

ATDT*99***1#^M^M

CONNECT

-- got it

send (\d)

Serial connection established.

Using interface ppp0

Connect: ppp0 <--> /dev/ttyUSB0

CHAP authentication succeeded: Welcome!!

CHAP authentication succeeded

Could not determine remote IP address: defaulting to 10.64.64.64

local  IP address 10.109.28.39

remote IP address 10.64.64.64

primary   DNS address 211.137.130.18

secondary DNS address 211.137.130.20

这时代表已经拨号成功,通过ifconfig命令可以看到有个ppp0,说明大功告成了

尝试ping www.baidu.com,应该就通了。

7.PPPD脚本分享

1. CHAT脚本
一个简单的chat脚本有下面的结构:
"" AT
OK ATDT dialnumber
CONNECT ""
一个chat脚本都是由字符串对来组成的。前面的字符串都是期望获取的串,紧跟的是发送的字符串。这个脚本每一项的具体含义是这样的:
1)   MODEM期望空字符串。这句话的意思直接理解就是MODEM不管收到什么字符串,先发出字符串AT;
2)   期望收到“OK”字符串,然后发送字符串“ATDT dialnumber”
3)   如果收到“CONNECT”,就不再发送,认为数据链路已建立连接。
这样的chat脚本是最简单的,如果需要进行超时控制,就可以加入如下字段:
TIMEOUT 10
如果要增加对特殊情况的处理,就加入下面字段:
ABORT BUSY   
ABORT NO ANSWER
ABORT RINGING
这三行语句的意思是:如果收到字符串“BUSY”、“NO ANSWER”、“RINGING”就退出执行。
所以在考虑到各种特殊情况下,配置一个PPP连接的CHAT脚本就可以像下面这样:
TIMEOUT 30
ABORT BUSY   
ABORT NO ANSWER
ABORT RINGING
"" AT
OK ATDT dialnumber
CONNECT ""

2.OPTIONS脚本
OPTIONS脚本的内容,为PPP连接指定了连接使用的设备、使用的控制字符传输速率、指定了硬件加速、溢出控制等。
例如下面的options脚本:
ttyS0 ---- 指定连接使用的设备,例如:ttyS0、ttyS1等
57600 ---- 设置连接使用的控制字符传输速率,可以设置为57600、115200等
debug ---- 如果需要加入调试信息,就加入参数debug
logfile /var/ ppplog ---- 将连接过程中的信息输入到某个文件中
mtu 1500
-detach
noipdefault ---- 不使用默认IP就可以加入参数noipdefault
defaultroute
usepeerdns ---- 使用服务器端协商的DNS就可以设置参数usepeerdns
lcp-echo-failure 4 ---- 当连续4次没有收到发出的LCP回声请求时,就认为服务器端已不再响应,就退出执行。这里的失败次数可以灵活来决定。
-ccp ---- 不使用压缩控制协议
-vj ---- 关掉式IP头压缩
-chap ---- 不使用chap鉴权
-mschap-v2 ---- 不使用mschap鉴权
user
hide-password
connect "/usr/bin/chat -v -t6 -f /var/ chat" ---- 制定了要使用的chat脚本的位置。加上参数-v 告诉 chat命令将其所有的输出/入拷贝到系统记录里(通常是 /var/log/messages)。-t 6 指定了执行chat该命令的时间为6s。chat脚本的位置可以位于/etc/目录下,也可以位于/var下,这个可以更加需要灵活设置。

persist --- 永久链接(自动重拨)

crtscts --- 告诉ppp使用modem的硬件流量控制

modem --- 使ppp使用DCD信号来判断连接是否正常,有无掉线现象

deflate --- 使pppd使用defalte压缩方式

idle --- 设置了一个时间限制,当在300秒的时间内没有数据传送,就断开连接

lock --- 则创建一个锁定文件,其他程序在发现存在这个文件后,就能得知相应的串口已经被使用。

demond --- 参数告诉pppd停留在后台,监视网络数据,一旦有要求就立即进行连网,超时后就断开连接,但pppd仍然停留在后台等待下次数据传送

本文转自 Linux_woniu 51CTO博客,原文链接:http://blog.51cto.com/linuxcgi/1965298

嵌入式Linux下3G无线上网卡的驱动相关推荐

  1. 南京邮电大学嵌入式系统开发实验5:嵌入式Linux下LED报警灯驱动设计及编程

    实验5  嵌入式Linux下LED报警灯驱动设计及编程 一.实验目的 理解驱动本质,掌握嵌入式Linux系统下驱动开发相关知识,包括端口寄存器访问.接口函数编写.和文件系统挂接.注册及相关应用编程等知 ...

  2. 嵌入式linux下3G上网卡移植

    传统3G上网卡几乎都采用modem形式,支持usb插口.通过usb指令转串口指令发给modem实现modem初始化并实现上网. 由此可以考虑在linux下实现usb指令到串口指令转换的驱动以驱动mod ...

  3. 嵌入式linux pcie网卡配置,嵌入式Linux下PCIE数据采集卡驱动开发

    目录 5.4 中断 (34) 5.4.1 Linux中断处理架构 (34) 5.4.2 Linux中断编程 (34) 5.5 本章小结 (35) 第六章PCIE高速数据采集卡驱动程序开发 (36) 6 ...

  4. 嵌入式Linux下彩色LCD驱动的设计与实现

    嵌入式Linux下彩色LCD驱动的设计与实现 转载 摘要:本文介绍了如何在嵌入在开发彩色LCD显示驱动的方法,并对Linux中的显示驱动程序结构和框架作一介绍. 长期以来,在常见的掌上电脑(PDA)等 ...

  5. 嵌入式linux进行视频监控,嵌入式Linux下的视频监控解决方案

    原标题:嵌入式Linux下的视频监控解决方案 在嵌入式工控板上接一个摄像头进行视频监控,看起来比较容易实现,但往往是"理想很丰满.现实很骨感".历经千辛万苦效果却不是很理想,本文就 ...

  6. gsm基于linux程序,基于嵌入式Linux下GSM模块的短信收发系统设计

    摘要:移动通信中的短消息业务以其方便.可靠和价廉得到了广泛应用,本文在嵌入式Linux系统中,通过西门子MC35模块,实现了短信收发系统,该系统采用PDU短信模式,能支持中文短信.程序设计采用异步事件 ...

  7. 嵌入式linux查看usb设备驱动程序,嵌入式Linux下USB驱动程序的设计

    嵌入式Linux下USB驱动程序的设计 usb概念:  USB(Universal Serial Bus)即通用串行总线,是一种全新的双向同步传输的支持热插拔的数据传输总线,其目的是为了提供一种兼容不 ...

  8. (Linux无线网卡WIFI上网 三 )嵌入式Linux下的WIFI使用

    导航 (Linux无线网卡WIFI上网 一 )USB-WIFI驱动移植 (Linux无线网卡WIFI上网 二 )WPA_SUPPLICANT--Linux下的wifi管理工具移植 (Linux无线网卡 ...

  9. linux内置usb3.0驱动,基于嵌入式Linux的USB3.0视频驱动的改进

    作 者:孙红[1,2] 秦守文[1] Sun Hong , Qin Shouwen (1. School of Optical--Electrical and Computer Engineering ...

最新文章

  1. 如何避免操作系统中多线程资源竞争的互斥与同步?
  2. SQL语句大全,所有的SQL都在这里
  3. Centos-移动文件或目录-mv
  4. java的语法结构_Java中的语法规范语法结构
  5. hdu-3790-最短路径问题(dijkstra算法)
  6. java中逗号怎么加_Java中如何将字符串从右至左每三位加一逗号
  7. Android清理设备内存具体完整演示样例(二)
  8. mysql 3_mysql3
  9. MachineLearning(5)-去量纲:归一化、标准化
  10. php和java 2017_Php与java的区别
  11. java 下载管理_Java多线程文件下载管理器详解
  12. Costomize Print Output
  13. FPGA数字信号处理(十七)多级CIC滤波器Verilog设计
  14. curl安装的docker卸载
  15. 微信小程序SEO排名优化
  16. linux卸载小企鹅输入法,Linux(FC)小企鹅输入法的安装
  17. android 信息添加附件功能,网易邮箱Android新版 添加附件可直接预览
  18. 5个可用提高Godaddy主机速度的第三方CDN加速服务商
  19. 手机可以模拟NFC卡片吗?项目中如何解决不能模拟NFC Tag UID的问题
  20. 数学之美之分形——C++及OpenCV实现Julia集和Mandelbrot集绘制

热门文章

  1. 打造一款有趣的Android万能播放器之msysgit安装 github项目上传 修改 window中同步本地项目到github远程仓库
  2. 天创速盈简述怎样提升拼多多权重,这些方式更有效
  3. 游戏服务端开发-好友系统
  4. 严重性代码说明项目文件行禁止显示状态错误项目 Common 的 NuGet 包还原失败: 找不到“X.X.X”版本的程序包“XXXXXX”。
  5. linux下xl2tpd安装
  6. 【无标题】归生气啦我想你了老婆不行
  7. 计算机语言各领域,香港大学计算机专业介绍
  8. 四次元新浪微博客户端Android源码
  9. Pyqt5实现计时器功能
  10. 在自定义Shader中应用Unity全局光照