Ubuntu下使用ECM上网介绍

2023-05-16

1、背景

为了验证展锐原厂的USB CDC EMC(Ethernet Control Model)驱动的上网功能,需要搭建Linux系统。现将整个流程整理如下。

2、环境搭建

安装虚拟机

VMware-workstation-full-16.2.3-19376536.exe

安装Ubuntu系统

ubuntu-16.04.5-desktop-amd64.iso

3、执行终端命令行

3.1 Linux 下使用

Linux 下 Kernel 自带USB 串口、 ECM 和MTP驱动,比较新的版本可能还自带 RNDIS 驱动。但是Linux使用 USB 网卡建议直接用 ECM。

Linux 下 ECM 驱动是通过 CLASS ID 来识别的,所以在Linux下不需要额外装驱动也不需要其他操作就可以被识别。

USB 串口没有标准 CLASS,在Linux要根据PID/VID 去识别。

1)    在命令行下配置

a)    挂载 option 驱动

/sbin/modprobe option

b)    把 8850 可能用到的模式加入 option 驱动的识别列表

# 4D30 可以不加,这个模式通常只在 Windows 下使用

echo 1782 4d11 ff > /sys/bus/usb-serial/drivers/option1/new_id

echo 1782 4d13 ff > /sys/bus/usb-serial/drivers/option1/new_id

echo 1782 4d17 ff > /sys/bus/usb-serial/drivers/option1/new_id

2)    修改 Kernel 代码(最新8850基线版本不需要了,可忽略)

需要修改的文件为 drivers/usb/serial/option.c,在 option_ids 里增加:

// Rndis and four serials

{ USB_DEVICE_AND_INTERFACE_INFO(0x1782, 0x4d11, 0xff, 0, 0) },

// ECM and four serials

{ USB_DEVICE_AND_INTERFACE_INFO(0x1782, 0x4d13, 0xff, 0, 0) },

// Four Serials

{ USB_DEVICE_AND_INTERFACE_INFO(0x1782, 0x4d17, 0xff, 0, 0) }

3.2 shell命令行log

hz47**@hz47**-virtual-machine:~$ sudo -i

[sudo] hz47** 的密码:

root@hz47**-virtual-machine:~# /sbin/modprobe option

root@hz47**-virtual-machine:~# echo 1782 4d11 ff>/sys/bus/usb-serial/drivers/option1/new_id

root@hz47**-virtual-machine:~# echo 1782 4d13 ff>/sys/bus/usb-serial/drivers/option1/new_id

root@hz47**-virtual-machine:~# echo 1782 4d17 ff>/sys/bus/usb-serial/drivers/option1/new_id

root@hz47**-virtual-machine:~# ls /dev/tty*

/dev/tty    /dev/tty23  /dev/tty39  /dev/tty54      /dev/ttyS10  /dev/ttyS26

/dev/tty0   /dev/tty24  /dev/tty4   /dev/tty55      /dev/ttyS11  /dev/ttyS27

/dev/tty1   /dev/tty25  /dev/tty40  /dev/tty56      /dev/ttyS12  /dev/ttyS28

/dev/tty10  /dev/tty26  /dev/tty41  /dev/tty57      /dev/ttyS13  /dev/ttyS29

/dev/tty11  /dev/tty27  /dev/tty42  /dev/tty58      /dev/ttyS14  /dev/ttyS3

/dev/tty12  /dev/tty28  /dev/tty43  /dev/tty59      /dev/ttyS15  /dev/ttyS30

/dev/tty13  /dev/tty29  /dev/tty44  /dev/tty6       /dev/ttyS16  /dev/ttyS31

/dev/tty14  /dev/tty3   /dev/tty45  /dev/tty60      /dev/ttyS17  /dev/ttyS4

/dev/tty15  /dev/tty30  /dev/tty46  /dev/tty61      /dev/ttyS18  /dev/ttyS5

/dev/tty16  /dev/tty31  /dev/tty47  /dev/tty62      /dev/ttyS19  /dev/ttyS6

/dev/tty17  /dev/tty32  /dev/tty48  /dev/tty63      /dev/ttyS2   /dev/ttyS7

/dev/tty18  /dev/tty33  /dev/tty49  /dev/tty7       /dev/ttyS20  /dev/ttyS8

/dev/tty19  /dev/tty34  /dev/tty5   /dev/tty8       /dev/ttyS21  /dev/ttyS9

/dev/tty2   /dev/tty35  /dev/tty50  /dev/tty9       /dev/ttyS22  /dev/ttyUSB0

/dev/tty20  /dev/tty36  /dev/tty51  /dev/ttyprintk  /dev/ttyS23  /dev/ttyUSB1

/dev/tty21  /dev/tty37  /dev/tty52  /dev/ttyS0      /dev/ttyS24  /dev/ttyUSB2

/dev/tty22  /dev/tty38  /dev/tty53  /dev/ttyS1      /dev/ttyS25  /dev/ttyUSB3

3.3、效果

模组激活PDP后,连接虚拟机设备,查看有线网络参数

 

 使用USB CDC ECM驱动,打开火狐浏览器上网

4 注意事项

4.1 Linux 下的串口设备通常不是按照 Interface ID 顺序排列的

    插入usb 就可以看到 ttyUSB{*} device。因为Linux下 tty 设备不显示设备名称,所以需要使用 udevinfo 来确认具体设备对应端口。注意 ttyUSB0 通常不是 Port0。

udevadm info –n /dev/ttyUSB{0-5}

    看其中的 ID_USB_INTERFACE_NUM=${id}:对于 pid 4d17,id 是 0-3;对于pid 4d13,id 是 2-5。从小到大依次对应 Windows 下的 *Port0 - *Port3。

如果想给固定端口指定名称的话可以通过增加 udev rules 来解决。

增加文件 /etc/udev/rules.d/98-unisoc-usb-udev.rules ,加入下述内容

# 给串口起别名,这样第一个串口就会被改名为 /dev/unisoc.at,想要增加其他端口类似方式

SUBSYSTEM=="tty", ATTRS{idVendor}=="1782", ATTRS{idProduct}=="4d17", ENV{ID_USB_INTERFACE_NUM}=="00", SYMLINK+="unisoc.at"

SUBSYSTEM=="tty", ATTRS{idVendor}=="1782", ATTRS{idProduct}=="4d13", ENV{ID_USB_INTERFACE_NUM}=="02", SYMLINK+="unisoc.at"

4.2 Linux 下的 modem manager 可能会自作主张操作 ttyUSB 设备

此问题通常只出现在 Linux 桌面 PC 上,同样可以在 udev rules 增加信息来解决。

在上面的文件 /etc/udev/rules.d/98-unisoc-usb-udev.rules 中增加几行

# 禁止 Modem Manager 访问串口

ATTRS{idVendor}=="1782", ATTRS{idProduct}=="4d11", ENV{ID_MM_DEVICE_IGNORE}="1"

ATTRS{idVendor}=="1782", ATTRS{idProduct}=="4d13", ENV{ID_MM_DEVICE_IGNORE}="1"

ATTRS{idVendor}=="1782", ATTRS{idProduct}=="4d17", ENV{ID_MM_DEVICE_IGNORE}="1"

4.3 ECM 和 RNDIS 虽然是即插即用,但是前提需要激活网络

可以设置开机自动激活,也可以使用 AT 命令激活

# AT 命令激活

AT+CFUN=1

AT+CGDCONT=5,"IP"

AT+CGACT=1,5

4.4 MTP模式虽然是即插即用,但是需要提前准备好存储文件夹

#建立FLASH分区mtp根目录

AT+FSMKDIR="/mtp"

#查看是否成功创建mtp根目录

AT+FSLSTFILE="/"

4.5 其他

RNDIS 在多数Linux PC 上也可以正常使用,但是支持的并不如 Windows,建议Linux 下网卡仍选用 ECM。

5、后续工作

通过本文档得出模组ECM驱动是OK的,后续需要把模组直接接在具有Linux系统的板卡下上网,比如正点原子提供的阿尔法开发板,这需要具备相关Linux开发能力,涉及固件编译和下载、驱动开发调试、系统移植和优化等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu下使用ECM上网介绍 的相关文章

随机推荐

  • 硬软件系统的实时性

    1 实时性的考察对象 xff1a 单片机 实时操作系统和分时操作系统 1 1 单片机裸机OS 一 古老的51单片机 二 当下最流行意法半导体的STM32 Cortex M3系列 Cortex M4 Cortex M0和Cortex M7系列
  • Linux基础命令 - 文件及目录操作, 打印输出, 查找命令, 用户及权限管理, vi的使用等

    Linux基础指令 文章目录 Linux基础指令综合知识 vi 纯文本编辑器 https qq wdev cn c vi html 语法格式 xff1a vi 参数 文件命令模式插入模式底行模式 重定向符号通配符管道符 文件及目录操作命令
  • CSS中常见的高度塌陷问题及解决办法

    在使用css实现样式时 xff0c 难免碰到一个棘手的问题 高度塌陷 xff0c 如果把问题分析通透 xff0c 那就容易解决了 塌陷 很容易让人联想到高楼倒塌 xff0c 高度 也应证了这是出现在两个垂直相交的元素 xff08 盒子 xf
  • Dockerfile的用法

    Dockerfile指令 基本结构指令FROMMAINTAINERRUNCMDEXPOSEENVADDCOPYENTRYPOINTVOLUMEUSERWORKDIRONBUILD 创建镜像 基本结构 Dockerfile 是一个文本格式的配
  • Centos上 关闭Linux防火墙(iptables) 及 SELinux

    革命尚未成功 xff0c 同志仍须努力 关闭Linux防火墙 iptables 及 SELinux 一 关闭防火墙 1 重启后永久性生效 xff1a 开启 xff1a chkconfig iptables on 关闭 xff1a chkco
  • yolov3 中box坐标的处理

    yolov2吸收faster rcnn的anchor box机制时遇到训练不稳定的问题 xff0c 分析认为是bbox坐标回归时没有限制 xff0c 导致anchor box可能会去预测一个距离很远的object xff0c 效率不高 xf
  • i2c总线最多可以挂多少个ic

    i2c总线最多可以挂多少个ic 有哪些因素决定 xff1f 1 由IIC地址决定 xff0c 8位地址 xff0c 减去1位广播地址 xff0c 是7位地址 xff0c 2 7 61 128 xff0c 但是地址0x00不用 xff0c 那
  • 竞品分析十大维度

    一 市场现状 行业现状 xff08 200 300字 xff09 1 以行业的全局进行分析 xff0c 市场的容量 xff0c 市场的发展前景 2 目前市场上的行情是怎么样的 xff1f 哪些是直接竞品 xff0c 哪些是间接竞品 xff1
  • 一个程序员的回忆录

    要么庸俗 xff0c 要么孤独 要么庸俗 xff0c 要么孤独 叔本华 今天是一个特殊的时间 xff0c 一个国庆和中秋在同一天的时间 特殊的时间总会回想起一些事情 xff0c 当事情可以用文章来表达的时候 xff0c 我便不再孤单 xff
  • My_Admin 独立系统开发第一节

    项目介绍 My Admin 项目后台该后台采用Tp5 43 layuimini 研发 xff0c 系统呢是准备研发一个垃圾回收小程序 垃圾回收小程序是结合市场需求开发的一个集运营与跑男端的垃圾回收小程序 目的是企业可以通过招募跑男 xff0
  • uni-app快速入门开发一个项目

    hello 大家好 xff0c 我是老张 xff0c 有的人称呼我为张工 一个不务正业的PHP开发者 xff0c 立志于做一个全栈开发工程师 今天呢 xff0c 我想补充一章关于uni app 如何开发 xff0c 如何建立项目 xff0c
  • uni-app开发知识付费系统个人中心界面

    hello 大家好 xff0c 我是老张 xff0c 那个不务正业的PHP开发工程师 今天是我使用uni app开发在线教育系统的第三天了 xff0c 今天主要开发了底部菜单的 xff0c 学习页面 xff0c 个人中心页面 xff0c 先
  • 阿里云负载均衡的配置和使用场景

    解释下什么叫做负载均衡 负载均衡 xff0c 英文名称为Load Balance xff0c 其含义就是指将负载 xff08 工作任务 xff09 进行平衡 分摊到多个操作单元上进行运行 xff0c 例如FTP服务器 Web服务器 企业核心
  • phpstudy下的nginx服务器显示目录

    在linux下配置Nginx的目录显示 linux下的基本命令 cd 切换目录 ls 查看目录 找到你的phpstudy的环境 cd 进入环境你会看到如下图一样所示的图片 cd server 使用 ls查看你会得到如图所示 cd nginx
  • 我与AI的相识

    AI人工智能 xff0c 作为一名程序员竟然不懂AI xff0c 好吧 xff01 我就是不懂 xff0c 最开始是听老师在帮助我们分析自己所学的专业行情时 xff0c 老师提到了AI xff0c 这时我是懵逼的状态什么是AI xff0c
  • <PHP 输出九九乘法表 for循环 递归>《正三角》《倒三角》

    lt php header 34 content type text html charset 61 utf 8 34 九九乘法表 正三角 64 var integer for i 61 1 i lt 61 9 i 43 43 for j
  • TP5+七牛云文件上传

    利用七牛云作为图片服务器来使用 xff0c 为什么使用七牛云 xff0c 使用七牛云的好处有很多 xff0c 节省自己的服务器空间 xff0c 七牛云的使用方便 xff0c 便宜 好了下面就说下TP5使用七牛云进行文件上传 第一步 xff0
  • 七牛云图片的预览

    上一个博客写了如何将本地图片上传到七牛云 xff0c 那么问题来了 xff0c 上传完毕后 xff0c 我们怎么才能在本地进行展示查看呢 xff1f 按照我们以前的思路那就是 xff0c 七牛云的域名 43 图片的名字 xff0c 但是呢
  • 时间序列预测比赛小结

    一 时间序列基础 1 什么是时间序列 xff1f 表面上 xff0c 时间序列就是按照时间的先后顺序排列的一串数值数学意义上 xff0c 时间序列是一串随机变量 2 研究时间序列的目的 xff1f 点预测区间预测 3 什么样子的时间序列可预
  • Ubuntu下使用ECM上网介绍

    1 背景 为了验证展锐原厂的USB CDC EMC xff08 Ethernet Control Model xff09 驱动的上网功能 xff0c 需要搭建Linux系统 现将整个流程整理如下 2 环境搭建 安装虚拟机 VMware wo