> 技术文档 > 手把手教-Arm Linux 使用Air780 4G模块USB上网 - RNDIS_合宙air780e linux使用

手把手教-Arm Linux 使用Air780 4G模块USB上网 - RNDIS_合宙air780e linux使用


一、RNDIS介绍

RNDIS(Remote Network Driver Interface Specification)是一种由微软开发的通信协议规范,主要用于通过USB(通用串行总线)实现网络连接。它允许USB设备(如手机、嵌入式设备等)模拟成一个虚拟的网络适配器,从而让主机(如电脑)可以通过USB接口与设备进行网络通信,就像使用普通的以太网或Wi-Fi一样。

1.1 核心功能与用途

  1. USB网络共享
    例如,将手机通过USB连接到电脑时,开启“USB网络共享”功能后,手机会通过RNDIS协议模拟成一个网络接口,使电脑通过手机的网络(如移动数据)上网。

  2. 设备调试与通信
    在嵌入式开发中(如调试树莓派、Android设备等),RNDIS可用于通过USB传输网络数据,方便开发者远程访问设备或传输文件。

  3. 虚拟机连接
    某些虚拟机软件(如VirtualBox)支持通过RNDIS实现宿主机与虚拟机之间的网络通信。

1.2 技术特点

  • 跨平台支持
    RNDIS最初由微软定义,但后续也被Linux等系统通过开源驱动(如rndis_host模块)支持。在Windows系统中通常无需额外驱动。

  • 基于USB的虚拟以太网
    它在USB协议上封装了类似以太网的数据包(Ethernet over USB),对上层应用表现为普通网卡。

  • 依赖USB CDC(Communication Device Class)
    RNDIS属于USB CDC的一个子类(Subclass),因此需要设备支持CDC协议。

1.3 配置与使用

  • Windows:通常自动识别RNDIS设备(如安卓手机),并加载驱动。
  • Linux:需安装rndis_host模块,部分系统可能需要手动启用。
  • 开发者角度:需在设备固件中实现RNDIS协议栈(如使用USB控制器支持CDC和RNDIS描述符)。

1.4 与CDC-ECM的区别

RNDIS常与另一类似协议CDC-ECM(Ethernet Control Model)对比:

  • RNDIS:微软主导,需特定驱动,但在Windows中兼容性更好。
  • CDC-ECM:更通用的标准,Linux原生支持,但某些旧版Windows可能需要额外驱动。

二、硬件

4G模块:合宙Air780E
主控:NUC980

三、内核驱动配置

USB驱动未添加前,查看原开发板USB信息
手把手教-Arm Linux 使用Air780 4G模块USB上网 - RNDIS_合宙air780e linux使用

3.1 驱动修改

Add VID add PID
Air780E在linux下的驱动修改,需要添加对应的Vendor ID和Product ID。
打开Linux内核下的drivers/usb/serial/option.c 文件,添加如下信息:

手把手教-Arm Linux 使用Air780 4G模块USB上网 - RNDIS_合宙air780e linux使用

static const struct usb_device_id option_ids[] = {...{ USB_DEVICE(0x1782, 0x4e00) },//Air720U{ USB_DEVICE(0x19d1, 0x0001) },//Air780E....}

手把手教-Arm Linux 使用Air780 4G模块USB上网 - RNDIS_合宙air780e linux使用

static int option_probe(struct usb_serial *serial,const struct usb_device_id *id){ ....if (dev_desc->idVendor == cpu_to_le16(0x1782) && dev_desc->idProduct == cpu_to_le16(0x4e00) && iface_desc->bInterfaceNumber <= 1){return -ENODEV;}if (dev_desc->idVendor == cpu_to_le16(0x19d1) && dev_desc->idProduct == cpu_to_le16(0x0001) && iface_desc->bInterfaceNumber <= 1){return -ENODEV;} ....}

保存即可。

内核配置

make menuconfig

手把手教-Arm Linux 使用Air780 4G模块USB上网 - RNDIS_合宙air780e linux使用
手把手教-Arm Linux 使用Air780 4G模块USB上网 - RNDIS_合宙air780e linux使用
手把手教-Arm Linux 使用Air780 4G模块USB上网 - RNDIS_合宙air780e linux使用
手把手教-Arm Linux 使用Air780 4G模块USB上网 - RNDIS_合宙air780e linux使用
手把手教-Arm Linux 使用Air780 4G模块USB上网 - RNDIS_合宙air780e linux使用

保存,退出,编译

makemake uImage

将生成的镜像下载到开发板,断电,重启设备

四、测试

查看所有网卡设备

ifconfig -a

手把手教-Arm Linux 使用Air780 4G模块USB上网 - RNDIS_合宙air780e linux使用
启动过程的显示信息,提示是网卡 eth2
手把手教-Arm Linux 使用Air780 4G模块USB上网 - RNDIS_合宙air780e linux使用

上网前,需通过 DHCP 协议自动获取 IP 地址及相关网络配置,否则并不能上网。指令如下:

udhcpc -i eth2

手把手教-Arm Linux 使用Air780 4G模块USB上网 - RNDIS_合宙air780e linux使用

参考:
https://blog.csdn.net/Chihiro_S/article/details/108736542
Air780ER USB上网应用快速入门
LINUX下USB驱动加载
CMUX
PPP应用
Air720U在linux下的驱动修改
Air720模块Linux USB驱动以及PPP拨号说明
Air720模块Linux USB驱动以及PPP拨号说明