Air720系列4G模块在Linux设备上的RNDIS网卡使用

吴永 合宙Luat 昨天


大家好~本文将介绍在Linux系统下,如何使用Air720的RNDIS功能进行上网。Air720正常启动后,通过USB连接到Linux设备上,驱动正常加载后会产生一个可以联网的RNDIS网卡


在使用RNDIS功能之前,请确保模块固件版本为AT版本,且版本号为:

AirM2M_720_V296_LTE_AT_NAND及以后版本。


以下代码内容建议横屏查看,或在PC端打开本文链接。





1


当做普通网卡设备即插即用




由于Air720模块内置了自动拨号技术(支持全球大部分运营商),所以只要网络可用的情况下无需对模块进行任何设置就可以正常使用RNDIS网卡。对于不太懂通信和AT的用户来说最简单不过了。

1.1  通过USB连接Air720模块和Linux设备

目前Linux大部分发行版本都已经默认支持RNDIS驱动了,只要通过USB连接Air720模块就可以直接使用,模块开机后就会在Linux设备端看到新的网卡,如下图:

注意:

  • i. 每个设备的ethx可能不一样,插入Air720模块后增加的网卡即为RNDIS网卡,地址为192.168.0.x

  • ii. 如果没能正常识别网卡,可以通过dmesg命令参看一下USB驱动加载情况,下图是RNDIS驱动加载正常的情况(请点击放大查看):

  • iii. 如果Linux设备还不支持RNDIS驱动,可以通过重新配置并编译内核来加入RNDIS驱动。详见本文第二部分:二、内核修改(非必需)


1.2  RNDIS功能测试

  • step 1:禁用本地网卡

  •      i.  sudo ifconfig eth0 down

  • step 2:使能模块网卡

  •      i.  sudo ifconfig eth3 down

  • 使能之后最好再通过ifconfig再次确认一下。

  • step 3:联网测试



2


内核修改(非必需)




Linux内核修改只针对如下情况,才需要修改:

i. Linux没有打开RNDIS网卡驱动

ii. 需要使用AT指令(打开ttyUSB设备




2.1  增加rndis设备驱动(配置内核)

对于较老版本或者嵌入式设备默认可能关闭了RNDIS驱动,我们以Linux-3.13为例,描述如何打开Linux自带的RNDIS驱动:

  • step 1:

  •      i.  cd <your kernel directory>


  • step 2:

  •      i.  make menuconfig



  • step 3:

  • ENALBE USB_NET_RNDIS_HOST


make

将编译好的内核重新下载到设备

2.2 ttyUSB设备驱动修改(如果需要发AT)

step 1:

参考Air720模块Linux USB驱动以及PPP拨号说明【一、修改驱动(1-3 节部分)】。


step 2:

为了禁止驱动将usb M0,M1加载为ttyUSB设备,需要将usb serial 驱动部分做如下修改(请横屏查看):


For Linux Kernel Version newer than 2.6.30
File: [KERNEL]/drivers/usb/serial/option.c

  1. static int option_probe(struct usb_serial *serial,

  2.                        const struct usb_device_id *id)

  3. {

  4.        struct usb_interface_descriptor *iface_desc =

  5.                                &serial->interface->cur_altsetting->desc;

  6.        struct usb_device_descriptor *dev_desc = &serial->dev->descriptor;

  7. /* Never bind to the CD-Rom emulation interface */

  8.        if (iface_desc->bInterfaceClass == 0x08)

  9.        i       return -ENODEV;

  10. //+add by airm2m for Air72x

  11.        if(dev_desc->idVendor == cpu_to_le16(0x1286) &&

  12.           dev_desc->idProduct == cpu_to_le16(0x4e3d) &&

  13.           iface_desc->bInterfaceNumber <= 1)

  14.                return -ENODEV;

  15. //-add by airm2m for Air72x

  16. /*

  17.         * Don't bind reserved interfaces (like network style="box-sizing: border-box; list-style-type: decimal;">         * the same class/subclass/protocol as the serial interfaces.  Look at

  18.         * the Windows driver .INF files for reserved interface numbers.

  19.         */

  20.        if (is_blacklisted(

  21.                iface_desc->bInterfaceNumber,

  22.                OPTION_BLACKLIST_RESERVED_IF,

  23.                (const struct option_blacklist_info *) id->driver_info))

  24.                return -ENODEV;


For Linux Kernel Version older than 2.6.31
File: [KERNEL]/drivers/usb/serial/option.c

  1. static int option_startup(struct usb_serial *serial)

  2. {

  3.    int i, j, err;

  4.    struct usb_serial_port *port;

  5.    struct option_port_private *portdata;

  6.    u8 *buffer;

  7.    dbg("%s", __func__);

  8. //+add by airm2m for Air72x

  9.    if(serial->dev->descriptor.idVendor == cpu_to_le16(0x1286) && serial->dev->descriptor.idProduct == cpu_to_le16(0x4e3d)

  10.        && serial->interface->cur_altsetting->desc.bInterfaceNumber <= 1)

  11. {

  12.        return -ENODEV;

  13. }

  14. //-add by airm2m for Air72x

  15. ...

  16. }

2.3 ttyUSB设备测试 (如果需要发AT)

加入ttyUSB设备驱动支持后,Air720模块会提供如下设备:



测试AT指令可以用minicom等工具,运行命令sudo minicom -D /dev/ttyUSB0测试结果如下:




Air720系列4G模块在Linux设备上的RNDIS网卡使用说明就讲到这里了,感谢大家对合宙Luat的关注与支持~


合宙商城活动持续进行中,多样福利等你来领取,点击本公众号菜单“合宙商城”或识别下图二维码即可直达商城:





更多福利,敬请期待



Luat相关教程文章:
Luat系列官方教程1:下载调试工具LuaTools的使用指南
Luat系列官方教程2:控制LED小灯

Luat系列官方教程3:Luat程序的基本时序

Luat系列官方教程4:学会使用并看懂Luatools的trace信息

Luat系列官方教程5:Socket代码详解
Luat系列官方教程6:MQTT代码详解

Luat系列官方教程7:串口收发


Luat小企业系列原创文章:

小企业怎么寻找生意的蓝海?

小企业2B新产品怎样定价?

小企业的2B业务怎么获客(一)?

合宙Luat将陆续推出小企业系列原创作品,敬请关注!




 ▼
Luat热文推荐

>小企业怎么寻找生意的蓝海?

>NB-IoT,未来的物联网脊梁,还是扶不起的阿斗?

>2019年最值得工作和落户的几个城市,有你的家乡吗?

>为什么说『 物联网通信模块业务』没有前途?

>4G模块价格进入2位数时代,合宙Air720模块正式量产发货


>NB向左,GPRS向右,谁会率先突破百亿连接数?

>GPRS模块为什么会低至十几元?我所经历的物联网模块国产化过程