嵌入式linux系统下NDIS拨号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式linux系统下NDIS拨号相关的知识,希望对你有一定的参考价值。
一、USB端口信息
U8300C模块USB会枚举出6个逻辑端口,他们的枚举顺序、端口功能、端口名称如下表所示:
二、驱动集成
1.内核配置:
make menuconfig 到内核时:
Device Drivers --->
USB support --->
USB Network Adapters --->
<*> Multi-purpose USB Networking Framework
USB Serial Converter support --->
<M> USB Serial Converter support
[*] USB Generic Serial Driver
2.内核ndis驱动加入:
在linux-2.6.21.x/drivers/usb/目录下创建ndis_driver目录,
复制“U8300C/version2.13/ndis_driver/src”目录下所有源文件到新建的ndis_driver目录下。
修改ndis_driver/Makefile 文件,内容为:
obj-m += lc_ether.o
lc_ether-objs := qmi_oper.o qmi_util.o lc_cdc_ether.o
在linux-2.6.21.x/drivers/usb/Makefile 文件中添加内容:
obj-m += ndis_driver/
内核编译时会生成lc_ether.ko拷贝到开发板去。
三、拨号APP修改编译:
复制”U8300C\version2.13\ndis_app“(XP) 目录到 CB50A_SDK/source/user/目录下。
修改build.sh文件中的CROSS_COMPPILE=/opt/crosstool/mipsel-linux/bin/mipsel-linux-
注根据自己电脑上的编译路径改。
修改Makefile 中的install规则。到自己安装目录。
修改ndis_manager.c 文件中的udhcpc 支持:如下:
第一处:
194 if(current_status == NDIS_CONNECTING)//new connected to internet.
195 {
196 cprintf("connected to internet success, .\n");
197 system("/sbin/udhcpc -i wan0 -s /sbin/udhcpc.sh -p /var/run/udhcpc.pid&");//to get ip/dns/gatway
198 //system("dhclient wan0&");
199 }
第二处
278 }else
279 {
280 cprintf("ndis_get_status success.\n");
281 if(NDIS_CONNECTED==pipinfo.i32status){
282 cprintf("connected to internet success, .\n");
283 system("/sbin/udhcpc -i wan0 -s /sbin/udhcpc.sh -p /var/run/udhcpc.pid&");//to get ip/dns/gatway
284 break;
285 }
286 }
进入当前目录编译运行:sh build.sh ,生成ndis_manager、lib_ndis/libndis_dail.so、profile.ini拷贝到开发板。
关于EVDO和CDMA(电信3G)时查询信号强度时是不能用at+csq 命令,听说这个是电信3G的一个标准,需要用AT^HDRCSQ?命令查询。
四、USB串口驱动过滤NDIS接口
由于USB串口跟DNIS都属于非标准CDC设备,需要放置NDIS口被USB串口驱动加载而导致无法正常加载NDIS驱动,解决办法如下:
对于不用option直接用usb-serial.ko文件的用户需要在usb-serial.c中的
usb_serial_probe()中加入以下
/*************LONGSUNG **************************/
if ((le16_to_cpu(dev->descriptor.idVendor) == 0x1c9e) &&
(le16_to_cpu(dev->descriptor.idProduct) == 0x9b05)) {
if(interface->cur_altsetting->desc.bInterfaceNumber == 4){
printk(KERN_INFO"Discover the 4th interface for U8300C NDIS.\n");
mutex_unlock(&table_lock);
return -ENODEV;
}
}
生成usbserial.ko,modprobe usbserial vendor=0x1c9e product=0x9b05,不要加载option.ko,否则/dev/ttyUSB*无响应。
跳过4口留给NDIS,否则NDIS驱动加载是错误。
五、加载NDIS驱动
如果正常#ifconfig -a可以看到wan0这样一个网卡,#ifconfig wan0 up 起网卡
配置拨号文件 profile.ini
[profile]
apn=UNINET
usrname=
pwd=
auth=0
不同的运营商只修改apn;电信:CTNET,移动:CMNET,联通:UNINET。
六、AT命令测试
#cat /dev/ttyUSB1 &
#echo “AT+LCTSW” >/dev/ttyUSB1 //软件版本查询
SoftwareVersion: QA30002.1.3_MV11
InnerVersion: QA30002_4534_1.1.4_L0602_EFS2.0
AP: QA30002_4534_0.0.13_L0602_MV11
Ok
#echo “AT+CSQ” >/dev/ttyUSB1 //信号强度查询
+CSQ: 25,63
Ok
#echo “ATE0” >/dev/ttyUSB1
OK
#echo “AT+PSRAT” >/dev/ttyUSB1 //模块注册的网络
+PSRAT: LTE TDD
OK
#echo “AT+CREG?” >/dev/ttyUSB1 //注册信息
+CREG: 0,1
OK
#echo “AT+MODODREX?” >/dev/ttyUSB1 //网络优先级
+MODODREX: 11
OK
//AT+MODODREX=11 //网络优先级11表示(4G->3G->2G)
#echo “AT+COPS?” >/dev/ttyUSB1 //运营商查询
+COPS: 0,0,"CHINA MOBILE",7
OK
#echo “AT+CPIN?” >/dev/ttyUSB1 //sim卡是否就绪
+CPIN: READY
OK
#echo “AT+CIMI=?” >/dev/ttyUSB1 //sim卡是否就绪
OK
七、运行程序测试
以管理员权限进行NDIS拨号,ndis_manager -c
#ifconfig wan0
#ps -ef
#ping www.baidu.com
OK 到此NDIS拨号上网完成。
本文出自 “Linux_woniu” 博客,请务必保留此出处http://llu1314.blog.51cto.com/5925801/1965295
以上是关于嵌入式linux系统下NDIS拨号的主要内容,如果未能解决你的问题,请参考以下文章