嵌入式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拨号的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式linux实现pppoe拨号上网

Linux系统下安装使用tftp

嵌入式linux。如何在/dev目录下手动创建这两个节点啊

嵌入式linux启动时运行的inittab文件

转:嵌入式linux启动时运行的inittab文件

嵌入式软件开发杂谈:Linux下最大能创建多少线程?