Air8000多网通信- RNDIS/ECM

一、rndis_ecm 概述

  • RNDIS(Remote NDIS):基于 USB 实现的 TCP/IP over USB,让 USB 设备在 Windows 系统上呈现为一块网卡,从而使 Windows/Linux 可以通过 USB 设备连接网络。
  • ECM(Ethernet Control Model):一种基于 USB 的通信设备类(CDC)子类协议,将"TCP/IP over USB"抽象成一条虚拟以太网链路,在主机侧呈现为一块标准的以太网卡。Linux、macOS 等操作系统无需额外专用驱动即可使用。

注意:合宙模组全系不支持Android

二、演示功能概述

2.1 本教程实现的功能定义

本章节将演示如何使用 Air8000 来开启 RNDIS 功能。

注意:ECM 功能由于缺少测试环境,无法进行完整测试,本文档教程主要演示 RNDIS 功能。

三、准备硬件环境

因为 rndis_ecm 功能不受硬件限制,所以本篇教程选用 Air8000 核心板来开发调试。也可以参考:Air8000 硬件环境清单,准备好硬件环境。

3.1 Air8000 核心板

四、准备软件环境

4.1 文章内容应用

在开始实践本示例之前,先筹备一下软件环境:

  1. 烧录工具:Luatools 工具

  2. 本demo开发测试时使用的固件为LuatOS-SoC_V2012_Air8000_1.soc,本demo对固件版本没有什么特殊要求,所以你如果要测试本demo时,可以直接使用最新版本的内核固件;如果发现最新版本的内核固件测试有问题,可以使用我们开发本demo时使用的内核固件版本来对比测试;

  3. 脚本文件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/demo/rndis_ecm

  4. LuatOS 运行所需要的 lib 文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件。

准备好软件环境之后,接下来查看如何烧录项目文件到 Air8000 核心板中,将本篇文章中演示使用的项目文件烧录到 Air8000 开发板中。

4.2 API 介绍

这里仅介绍本篇文档所使用的 API,详情请查看:API 索引 - luatos@air8000 - 合宙模组资料中心

mobile.config(item, value)

网络特殊配置

mobile.flymode(index, enable)

进出飞行模式

五、代码演示

5.1 RNDIS 应用

lua 复制代码
-- 运行 RNDIS 模式任务
local function rndis_task()
    -- 初始化重试计数器,用于记录进入飞行模式失败的重试次数
    local count = 0
    -- 尝试进入飞行模式,获取操作结果标志
    local fly_sign = mobile.flymode(0, true)
    -- 判断是否成功进入飞行模式
    if fly_sign then
        log.info("进入飞行模式成功,打开RNDIS模式")
        -- 调用 mobile.config 函数启用 RNDIS 功能
        -- 传入的第二个参数 3 ,实际为二进制的 0011
        -- 蜂窝网络模块的usb以太网卡控制,bit0开关,1开0关,bit1模式,1NAT0独立IP(在usb以太网卡开启前可以修改,开启过就不行),bit2协议1 ECM,0 RNDIS,飞行模式里设置。
        log.info("我看看 RNDIS 是否启动成功:", mobile.config(mobile.CONF_USB_ETHERNET, 3))
        log.info("退出飞行模式")
        mobile.flymode(0, false)
    else
        log.info("进入飞行模式失败")
    end
end

5.2 ECM 应用

lua 复制代码
-- 运行 ECM 模式任务
-- 注:由于Windows系统没有测试环境无法测试 ECM 功能,所以本demo没有完整测试。
local function ecm_task()
    -- 初始化重试计数器,用于记录进入飞行模式失败的重试次数
    local count = 0
    -- 尝试进入飞行模式,获取操作结果标志
    local fly_sign = mobile.flymode(0, true)
    -- 判断是否成功进入飞行模式
    if fly_sign then
        log.info("进入飞行模式成功,打开ECM模式")
        -- 调用 mobile.config 函数启用 ECM 功能
        -- 传入的第二个参数 7 ,实际为二进制的 0111
        -- 蜂窝网络模块的usb以太网卡控制,bit0开关,1开0关,bit1模式,1NAT0独立IP(在usb以太网卡开启前可以修改,开启过就不行),bit2协议1 ECM,0 RNDIS,飞行模式里设置。
        log.info("我看看 ECM 是否启动成功:", mobile.config(mobile.CONF_USB_ETHERNET, 7))
        log.info("退出飞行模式")
        mobile.flymode(0, false)
    else
        log.info("进入飞行模式失败")
    end
end

六、功能演示

6.1 Windows 下使用 RNDIS 功能

因为 window 系统默认支持 RNDIS,所以直接用 usb 连接就可以使用。

6.1.1 确认 RNDIS 状态

首先,先将代码烧录到模组中,通过日志来确认是否已经成功开启 RNDIS 功能:

6.1.2 在 Widows 中启用 RNDIS

当开启 RNDIS 功能后,Air8000 工业引擎会虚拟一个网卡,此网卡可在"设备管理器"或"高级网络设置"中看到。(由于 Air8000 驱动使用的是 CDC 驱动,所以请使用 win10 及其以上系统;WIN10 以下系统,Air8000 不做支持)

启用完毕后,即可看到我们电脑的图标已经变为以太网连接,此时也可以正常使用 RNDIS 上网了

6.1.3 注意事项
  1. 如果启动后日志中打印 RNDIS 启动成功,但是 Windows 上没有连上网络,需要确认下系统是否将 RNDIS 的虚拟网卡禁用了

6.2 Linux 下使用 RNDIS 功能

6.2.1 在 Linux 中启用 RNDIS

因为 Air8000 的 RNDIS 使用 CDC-ACM 驱动,大部分 Linux 系统默认就支持,所以无需设置代码,插入 USB 就可以在 Linux 中使用。

使用 ls /dev/ttyACM* 即可看到三个端口

在控制台查看 USB 设备可以看到一张 ID 为 19d1:0001 的 USB 设备,这张就是 Air8000 虚拟出的 USB 网卡

查看网卡信息可以看到如下信息:

尝试使用 ping 命令访问百度:

6.2.2 注意事项
  1. 有些 linux 设备存在 Air8000 工业引擎重启后,操作文件会发生移位,比如本来是/dev/ttyACM0/1/2 重启后变成了 ttyUSB1/3/4,最靠谱的方法是通过驱动节点来找到操作文件 usb_find.c

可以用 FindUsbDevice(AIRM2M_USB_DEVICE_AT_INTERFACE_ID),来寻找真正的需要的端口。相关文章见 https://doc.openluat.com/article/2080/0

  1. 某些最简系统需要根据设备描述来识别,可以参考如下 linux 上展示的细节进行适配:lsusb_618

  2. Air8000 只支持 luatos 方式开发,无法使用串口工具发送 AT 指令,所以 Air8000 不支持 PPP 拨号上网

  3. 每个设备的 ethx 可能不一样,插入 Air8000 工业引擎后增加的网卡即为 RNDIS 网卡。如果没有 RNDIS 驱动的,可在编译内核时按照下图配置:

七、 总结

至此,我们演示了使用 rndis_ecm 上网的全过程

相关推荐
Tronlong创龙8 小时前
基于 RV1126B 评估板的 Linux 系统开发详解(一)
开发板·嵌入式开发·硬件开发·工业控制
RFID舜识物联网9 小时前
破局“信息孤岛”:RFID耐高温标签重塑汽车喷漆车间可视化
大数据·人工智能·科技·物联网·安全·汽车
BY组态10 小时前
Ricon组态系统技术深度解析:架构设计与核心实现
物联网·iot·web组态·组态
Yeats_Liao10 小时前
物联网接入层技术剖析(一):从select到epoll
java·linux·后端·物联网·struts
我先去打把游戏先11 小时前
Ubuntu虚拟机(服务器版本)Git安装教程(附常用命令)——从零开始掌握版本控制
服务器·c语言·c++·git·嵌入式硬件·物联网·ubuntu
Linux运维技术栈11 小时前
一次暴力枚举攻击的防御实践:从 IP 封禁到 WAF,再到 Nginx+Lua 业务层防御
tcp/ip·nginx·安全·lua·云服务器
黎阳之光1 天前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
Oflycomm1 天前
模组开发不迷路:Wi-Fi 7、蓝牙6.0、5G RedCap、PLC双模怎么选?这份选型指南建议收藏
物联网·5g·iot·6g·蓝牙模组·wifi模组·世界电信和信息社会日大会
慧都小妮子1 天前
告别看图抓数据:DeviceXPlorer OPC Server 助力数据自动化管理
运维·物联网·自动化·takebishi·dxpserver·opc server