标题:
Linux下3G模块驱动加载方法
[打印本页]
作者:
look_w
时间:
2017-10-25 00:22
标题:
Linux下3G模块驱动加载方法
模块型号:中兴
MC2716
内核版本:
linux-2.6.36
加载过程如下:
1
、模块
ID
号添加
进入内核代码“
/linux-2.6.36/
driver/usb/serial”目录,打开“option.c”文件,查看是否已经定义了此模块产品的设备
ID
信息,并且这些信息
是否已经添加到“ static struct usb_device_id option_ids[]”结构体中。
如果代码中没有模块产品设备
ID
信息,则在代码中增加模块产品设备
ID
信息的定义,并添加到
“static struct usb_device_id option_ids[]”结构体中。如以下代码红色字体:
Option.c文件
产品设备
ID
信息的定义
:
/* QCMD PRODUCTS */
#define QCMD_VENDOR_ID 0x1c9e
#define QCMD_PRODUCT_U6300V 0x9603
#define QCMD_PRODUCT_U6300 0x9000
/* ZTE PRODUCTS */
#define ZTE_VENDOR_ID 0x19d2
#define ZTE_PRODUCT_MF628 0x0015
#define ZTE_PRODUCT_CDMA_TECH 0xfffe
#define ZTE_PRODUCT_MF210 0x0117 //20110127 add
#define ZTE_PRODUCT_MC2716 0xffed //20110516 add
把产品型号添加到“
static struct usb_device_id option_ids[]
”结构体中:
static struct usb_device_id option_ids[] = {
.........................................................................................
.........................................................................................
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) },
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) },
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF210) }, //20110127
{ USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2716) }, //20110516
{USB_DEVICE(QCMD_VENDOR_ID,QCMD_PRODUCT_U6300V)},//2011021
{ USB_DEVICE(QCMD_VENDOR_ID,QCMD_PRODUCT_U6300)},//20110215
{ } /* Terminating entry */
};
2
、添加
USB
驱动
回到根目录/linux-2.6.36/
下
,执行“make menuconfig”命令,修改内核编译配置,进入以下配置菜单配置相关选项:
进入菜单
Device Drivers --->
USB support --->
USB Serial Converter support --->
图
3.3 USB
驱动配置菜单图
选上“
USB driver for GSM and CDMA modems
”和“
USB Generic Serial Driver
”两个配置选项。
图
3.4 USB
驱动选项图
重新编译内核后下载到设备上,进入系统后在
/dev
目录下会看到生成的
/ttyUSB0~/ttyUSB3
的
4
个设备节点。
3
、优化模块
USB
驱动
把中兴提供的
zte.ev.c
和
zte_ev.h
拷到内核目录
/dirvers/usb/serial
下,修改该目录下
generi.c
文件,在
int usb_serial_generic_open
函数中添加执行
zte_ev_usb_serial_init
()函数。在
usb_serial_generic_close
函数中添加执行
zte_ev_usb_serial_exit
()函数。修改该目录下的
makefile
文件,把
zte_et.o
添加进去编译。
4
、应用程序的使用
(
1
)
各
USB
端口的作用
ttyUSB0
用于
moderm
ttyUSB1
用于发
AT
指令
ttyUSB2
用于
VoUSB
ttyUSB3
用于
Debug
(
2
)
pppd
的拨号脚本文件中使用
ttyUSB0
进行拨号。
5
、使用
PPPD
拨号中遇到的问题
(
1
)
找不到
USB
接口
现象:拔号时找不到
ttyUSB0
,设备重启。
解决方法:拔号前运行
mdev
命令重新生成设备节点。
实现:在初始化
gpio
之后添加
mdev -s
命令。
(
2
)
多次拔号不成功
现象:
MC2716
模块拔号成功后再次拔号发
AT
指令时回应的是乱码。
解决方法:每次重新拔号前给模块发
ATH
指令挂断,然后再开始拔号。因为拔号打开的是
/ttyUSB0
,发
+ATH
回不到命令端、指令无效,所以需打开
ttyUSB1
给模块发
ATH
指令挂断电话。
实现:在根文件系统
/etc/ppp
目录下添加挂断电话的脚本配置文件
disgprschat
。给模块复位时添加断开
pppd
连接的处理,运行
PPPD
进程:
pppd /dev/ttyUSB1 115200 connect 'chat -f /etc/ppp/gprs-disconnect-chat' user pppuser
。
(
3
)
出现找不到设备现象
现象:
AT
无回应,提示无设备,但
/dev
目录有下有
ttyUSB0
,出现这种情况以后,重拔多次都不成功,无法恢复。现象如下图所示:
解决方法:测试过程中发现出现以上问题后,运行
mdev -s
命令提示以下信息:
在模块复位处理中添加对
/sys/class/tty/ttyUSB0/device
目录下的文件判断,如果该目录下的文件不存在则对设备发重启命令。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0