海思3G模块开发

一、开发环境

环境详细
3G模块ZTE MF190(中兴)
SIM中国联通3G
嵌入式Linux内核 Linux (none) 3.0.8
开发环境Ubuntu10.10

二、开发步骤

修改内核配置,并重新编译

内核配置增加usb转串口的驱动,配置成模块。

内核配置增加ppp协议支持

重新编译烧写内核

编译usb_modeswitch交叉编译usb_modeswitch,并把可执行文件和配置文件拷贝到开发板上
编译ppp和编译拨号脚本文件交叉编译ppp,并把可执行文件和配置文件拷贝到开发板上
验证usb转串口是否成功这部很关键,如果转串口没有成功或者使用的不是ttyUSB0会使后面的ppp拨号不成功。
运行pppdpppd call wcdma-call

三、详细开发步骤 

1、内核中增加usb转串口的驱动,配置成模块。增加ppp协议支持。重新交叉编译并下载到开发板上。

1.1 增加ppp协议支持

  清除内核配置文件:make ARCH=arm CROSS_COMPILE=arm-linux- clean

CROSS_COMPILE=arm-linux- 这个要根据自己arm编译器的名字

  配置内核:make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig

进入Device Drivers-->

Network device support-->

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

选择所有的PPP协议

 

ppp协议配置完成


1.2、增加usb转串口的驱动模块,编译为模块

使其选中对USB转串口的支持

进入Device Drivers-->USB support-->USB Serial Converter support 选中USB Deiver for GSM and CDMA Modems

 

 


到此3G卡驱动已经添加完

注:本人这里把USB转串口驱动配置成模块,看个人需求也可配置成编译到内核中。

 

接着要修改option.c文件,在linux-3.0.y/drivers/usb/serial目录下,然后找到

static const struct usb_device_id option_ids[] = {

}向这里面增加我们的3G模块设备信息,(有可能你的设备信息已经存在)

本人的3G设备信息添加如下:

#define ZTE_VENDOR_ID          0x19d2 //代码中已经定义  厂家ID
#define ZTE_PRODUCT_MF190      0x2000 //本人3G模块的设备ID
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF190) },

解释这两个参数的意义:

 ZTE_VENDOR_ID:厂家ID(这是中兴厂家的ID号)

 ZTE_PRODUCT_MF190:本人3G模块设备ID

那么如何得知这两个ID号呢?

3G设备插入开发板上使用 lsusb 命令就可看到两个ID

# lsusb

Bus 001 Device 001: ID 1d6b:0002

Bus 002 Device 001: ID 1d6b:0001

Bus 001 Device 002: ID 19d2:2000

 

到这里所有内核的配置都完成。

重新编译内核make ARCH=arm CROSS_COMPILE=arm-linux- uImage

编译模块:make ARCH=arm CROSS_COMPILE=arm-linux- modules 

//因为本人把驱动配置成模块所以这里需要编译模块。在linux-3.0.y/drivers/usb/seria目录下会出现三个驱动模块

 

把这三个驱动复制到开发板上,本人复制开发板路径/lib/modules/3.0.8/serial

在系统启动脚本中添加驱动加载,在/etc/init.d/rcS中添加下面几行

insmod /lib/modules/3.0.8/seria/usbserial.ko maxRSize=16384 maxWSize=512 maxISize=64  ##设置缓冲大小,挺高速度。
nsmod /lib/modules/3.0.8/seria/usb_wwan.ko
nsmod /lib/modules/3.0.8/seria/option.ko

加载完驱动后/dev目录下出现ttyUSB0 ttyUSB1 ttyUSB2那么恭喜你usb转串口已经成功。

 

问题:

(1)、加载完驱动后/dev目录下没有出现ttyUSB0 ttyUSB1 ttyUSB2

查看设备:

cat /proc/devices 

 

如果没有ttyUSB那么加载驱动有问题,查看option.c文件添加的设备ID是否有错误

如果有ttyUSB跳到(问题解决一


2、测试转出的串口是否可用

使用Linux串口代码进行测试。本人测试代码链接:http://download.csdn.net/detail/lin_jianbin/8339773

分别打开串口ttyUSB0 ttyUSB1 ttyUSB2

发送字符串数据“AT\r\n”  或者十六进制数据 0x41 0x54 0x0D 0x0A 如果接收到数据为OK表示成功

测试出成功的设备比如ttyUSB0 后面配置需要使用到。(不是所有的设备都是使用ttyUSB0发送和接收数据的)所以这需要测试

 

3、交叉编译pppd,移植

下载路径:ftp://ftp.samba.org/pub/ppp/

本人下载的是ppp-2.4.5.tar.gz

解压:tar -zvxf ppp-2.4.5.tar.gz

进目录:cd ppp-2.4.5

配置:./configure        生成Makefile文件

编译:make CC=arm-liunx-gcc AR=arm-liunx-ar LD=arm-liunx-ld STRIP=arm-liunx-strip

成功后会在pppd目录下生成可执行文件pppdchat目录下生成可执行文件chat

 

创建拨号的配置文件

/etc.ppp/目录下创建文件 wcdma-chat 内容如下:

TIMEOUT 15

ABORT 'NO CARRIER'

ABORT 'ERROR'

ABORT 'NO DIALTONE'

ABORT 'BUSY'

ABORT 'NO ANSWER'

"" 'AT'

OK 'ATDT*99#'

CONNECT

 

/etc.ppp/目录下创建文件 disconnect-chat 内容如下:

ABORT "BUSY"

ABORT "ERROR"

ABORT "NO DIALTONE"

SAY "/nSending break to the modem/n"

'' "/K"

'' "+++ATH"

SAY "/nGoodbye/n"

 

/etc.ppp/目录下创建文件 wcdma-call 内容如下:

debug

lock

nodetach

/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 -v -t3 -f /etc/ppp/chat/wcdma-connect'

disconnect '/usr/sbin/chat -s -v -f /etc/ppp/chat/disconnect'


pppd配置参数可参考:

http://blog.csdn.net/hens007/article/details/7255455

这里的配置文件是针对联通3G卡的,如果需要支持其他的SIM卡可更改这些配置。

 

移植:

/pppd/pppd  拷贝到开发板 /usr/sbin

/chat/chat   拷贝到开发板 /usr/sbin

/etc.ppp/目录下的文件 chap-secrets  options pap-secrets 拷贝到开发板 /etc/ppp目录下

/etc.ppp/目录下的文件 wcdma-chat disconnect-chat  拷贝到开发板 /etc/ppp/chat目录下

/etc.ppp/目录下的文件 wcdma-call  拷贝到开发板 /etc/ppp/peers目录下

 

到这里开发板移植完毕可到开发板上进行拨号:

#pppd call wcdma-call

Script /usr/sbin/chat -v -t3 -f /etc/ppp/chat/wcdma-connect finished (pid 891), status = 0x0

Serial connection established.

using channel 1

Using interface ppp0

Connect: ppp0 <--> /dev/ttyUSB2

sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xfd880529> <pcomp> <accomp>]

rcvd [LCP ConfReq id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0x2bdc467> <pcomp> <accomp>]

sent [LCP ConfAck id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0x2bdc467> <pcomp> <accomp>]

rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0xfd880529> <pcomp> <accomp>]

sent [LCP EchoReq id=0x0 magic=0xfd880529]

rcvd [LCP DiscReq id=0x1 magicdc467]

rcvd [CHAP Challenge id=0x1 <ca68bc26a4b9831b18cc10657e6fc731>, name = "UMTS_CHAP_SRVR"]

sent [CHAP Response id=0x1 <606f317e42edafc7e3653ea6b>, name = "card"]

rcvd [LCP EchoRep id=0x0 magic=0x2bdc467 fd 88 05 29]

rcvd [CHAP Success id=0x1 ""]

CHAP authentication succeeded

CHAP authentication succeeded

sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]

rcvd [IPCP ConfNak id=0x1 <ms-dns1 10.11.12.13> <ms-dns2 10.11.12.14> <ms-wins 10.11.12.13> <ms-wins 10.11.12.14>]

sent [IPCP ConfReq id=0x2 <addr 0.0.0.0> <ms-dns1 10.11.12.13> <ms-dns2 10.11.12.14> <ms-wins 10.11. <ms-wins 10.11.12.14>]

rcvd [IPCP ConfReq id=0x0]

sent [IPCP ConfNak id=0x0 <addr 0.0.0.0>]

rcvd [IPCP ConfRej id=0x2 <ms-wins 10.11.12.13> <ms-wins 12.14>]

sent [IPCP ConfReq id=0x3 <addr 0.0.0.0> <ms-dns1 10.11.12.13> <ms-dns2 10.11.12.14>]

rcvd [IPCP ConfReq id=0x1]

sent [IPCP ConfAck id=0x1]

rcvd [IPCP ConfNak id=0x3 <addr 10.30.208.139> <ms-dns1 218.104.128.106> <ms-dns66>]

sent [IPCP ConfReq id=0x4 <addr 10.30.208.139> <ms-dns1 218.104.128.106> <ms-dns2 58.22.96.66>]

rcvd [IPCP ConfAck id=0x4 <addr 10.30.208.139> <ms-dns1 218.104.128.106> <ms-dns2 58.22.96.66>]

Could not determine remote IP address: defaulting to 10.64.64.64

Cannot determine ethernet addresxy ARP

local  IP address 10.30.208.139

remote IP address 10.64.64.64

primary   DNS address 218.104.128.106

secondary DNS address 58.22.96.66

 

拨号成功

 

问题解决一

方法一:手动创建设备结点

mknod /dev/ttyUSB0 c 188 0    

//188即使主设备号 如上的cat /proc/devices 可以得知。为次设备号。

mknod /dev/ttyUSB1 c 188 1    

mknod /dev/ttyUSB2 c 188 2    

测试创建的设备结点是否可用:

这种方法只能实现简单的测试,更为准确的测试最好用自己写的串口代码测试。

# cat /dev/ttyUSB0    

cat: can't open 'ttyUSB0': No such device //表示设备结点不可用 只能用方法二。

 

方法二:使用usb_modeswitch

usb_modeswitch是对USB设备的工作模式进行转换usb工作模式:usb存储模式,usb serial模式。

我们要把3G模块转为usb serial模式。

参考文章:http://blog.csdn.net/lin_jianbin/article/details/42520419

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本季课程在开发板上移植USB WIFI模块(套装附带的MT7601模块),工作在ap模式下,并且用电脑通过WIFI去连接开发板实现主机和开发板的无线网络局域网通信,这样就可以用WIFI网络取代板载ethernet有线网络方式来进行调试和局域网视频预览。现在很多的视频摄像头产品都要求支持无线网络连接功能,本季课程主要是针对这方面开发技术讲解的。随着通信行业发展,网速越来越快,网络也从文本时代发展越过语音时代到了现在视频时代,“优酷、爱奇艺”、“微视频”、“直播”等的出现也是视频逐步成为主流媒体的证据和表现。航拍、视频监控、刷脸过关检测、汽车ADAS系统等应用也是视频在主流行业中的应用,因此视频的采集、编解码、传输、识别等技术变得越来越有价值,涌现出了“海康威视”、“大华股份”、“深圳英飞拓”等一批明星企业,名扬海内外,动辄市值几百亿。同时在芯片级,国产华为海思HI35XX系列视频编解码方案也逐步取代进口芯片(如TI、安霸)成为主流方案。视频行业技术含量高、难度大、学习周期长、发展变化快而资料少,因此行业比较缺人、工资较高。如海康威视,普通高校硕士研究生应届进入年薪普遍高于15-20万,在嵌入式linux领域也算高工资技术方向了。本项目是朱老师及其团队推出的一个嵌入式linux领域重量级企业级实战项目,选用华为海思HI3518E方案,结合OV9712/AR0130 Sensor实现图像采集和H.264编码压缩,并通过ethernet和WIFI,以socket实时流和RTSP等方式,实现720P/960P高清视频传输。本项目共分11季,从海思SDK开发环境搭建,到sample程序讲解、SDK中API函数解析,到H.264编解码、RTSP流媒体传输、MP4文件打包,到图像IQ调试、图像识别等视频领域高阶内容,可以说从零基础入手,对图像采集、编解码、网络传输、图像存储和识别做了全方位的详细讲解和代码分析,是目前市面上**一套系统讲解图像和视频技术的视频课程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值