飞凌嵌入式AM335x平台如何通过udev固定4G模块串口号

2024-01-25 14:18

本文主要是介绍飞凌嵌入式AM335x平台如何通过udev固定4G模块串口号,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文以 飞凌嵌入式 AM335x平台为例进行讲解。 在使用 4G模块的时候, 在 4G 信号不太理想的环境下需要检测网络,当设备断网后重启 4G模块重新拨号联网。但系统长期运行后,重启模块 会导致在 /dev 目录下的4G模块生成的设备节点ttyusb序号改变,导致应用程序拨号时出错。我们可以修改 udev规则文件解决这个问题。

udev 的规则文件里定义了很多变量,如KERNELS ,SUBSYSTEMS ,DRIVERS 等等,我们可以用这些变量中的几个来确定我们的设备,并修改我们其中的NAME 和SYMLINK 变量,这样我们就可以改变我们的设备在/dev 目录下的名字和链接了。

使用 udevadm info命令可以查询udev数据库中的设备信息。也可以从sysfs文件系统中查询到设备的属性以辅助创建udev规则。

 

udevadm  info -q path -n /dev/ttyUSB0 可以查看ttyUSB0设备的系统设备路径

root@ok335x:~# udevadm  info -q path -n /dev/ttyUSB0
/devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1/1-1/1-1.2/1-1.2:2.2/ttyUSB0/tty/ttyUSB0

 

udevadm info -a -p $(udevadm  info -q path -n /dev/ttyUSB0) 查询/dev/ttyUSB0设备,可以打印出设备总线的所有位置的父子关系,如下所示:

root@am335x:~# udevadm info -a -p $(udevadm  info -q path -n /dev/ttyUSB4)

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

 

  looking at device '/devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1/1-1/1-1.2/1-1.2:2.2/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="usb-serial"
    DRIVER=="option1"
    ATTR{port_number}=="0"

 

  looking at parent device '/devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1/1-1/1-1.2/1-1.2:2.2':
    KERNELS=="1-1.2:2.2"
    SUBSYSTEMS=="usb"
    DRIVERS=="option"
    ATTRS{bInterfaceNumber}=="02"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="03"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceSubClass}=="06"
    ATTRS{bInterfaceProtocol}=="10"
    ATTRS{modalias}=="usb:v12D1p15C1d0102dc00dsc00dpFFicFFisc06ip10"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{interface}=="Huawei Mobile Connect - Modem"

 

  looking at parent device '/devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1/1-1/1-1.2':
    KERNELS=="1-1.2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 7"
    ATTRS{bConfigurationValue}=="2"
    ATTRS{bmAttributes}=="a0"
    ATTRS{bMaxPower}=="  2mA"
    ATTRS{urbnum}=="26"
    ATTRS{idVendor}=="12d1"
    ATTRS{idProduct}=="15c1"
    ATTRS{bcdDevice}=="0102"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="ff"
    ATTRS{bNumConfigurations}=="3"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="6"
    ATTRS{devpath}=="1.2"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Huawei Technologies Co., Ltd."
    ATTRS{product}=="HUAWEI Mobile V7R11"
    ATTRS{serial}=="0123456789ABCDEF"

 

  looking at parent device '/devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  2mA"
    ATTRS{urbnum}=="100"
    ATTRS{idVendor}=="0424"
    ATTRS{idProduct}=="2514"
    ATTRS{bcdDevice}=="0bb3"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="02"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="2"
    ATTRS{devpath}=="1"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="4"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"

 

  looking at parent device '/devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="26"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0302"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="1"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 3.2.0-dirty musb-hcd"
    ATTRS{product}=="MUSB HDRC host driver"
    ATTRS{serial}=="musb-hdrc.1"
    ATTRS{authorized_default}=="1"

 

  looking at parent device '/devices/platform/omap/musb-ti81xx/musb-hdrc.1':
    KERNELS=="musb-hdrc.1"
    SUBSYSTEMS=="platform"
    DRIVERS=="musb-hdrc"
    ATTRS{modalias}=="platform:musb-hdrc"
    ATTRS{mode}=="a_host"
    ATTRS{vbus}=="Vbus off, timeout 1100"

 

  looking at parent device '/devices/platform/omap/musb-ti81xx':
    KERNELS=="musb-ti81xx"
    SUBSYSTEMS=="platform"
    DRIVERS=="musb-ti81xx"
    ATTRS{modalias}=="platform:musb-ti81xx"

 

  looking at parent device '/devices/platform/omap':
    KERNELS=="omap"
    SUBSYSTEMS==""
    DRIVERS==""

 

  looking at parent device '/devices/platform':
    KERNELS=="platform"
    SUBSYSTEMS==""
    DRIVERS==""

 

我们查看每个USB串口设备节点的信息,相应设备信息如下:

root@am335x:~# udevadm info -a -p $(udevadm  info -q path -n /dev/ttyUSB1)

root@am335x:~# udevadm info -a -p $(udevadm  info -q path -n /dev/ttyUSB2)

root@am335x:~# udevadm info -a -p $(udevadm  info -q path -n /dev/ttyUSB3)

root@am335x:~# udevadm info -a -p $(udevadm  info -q path -n /dev/ttyUSB4)

我们通过观察各个设备节点的信息,返现ATTRS{interface}  可以区别各个设备节点
所以我们 将 SUBSYSTEMS=="usb"  ATTRS{interface}=="Huawei Mobile Connect - Modem" 作为过滤条件。

在 /etc/udev/rules.d/local.rules 中加入以下内容。将ttyUSB0-4 做相应的软链接为ttyusb0-4
ATTRS{interface}=="Huawei Mobile Connect - Serial B",SUBSYSTEMS=="usb",SYMLINK+="ttyusb4"
ATTRS{interface}=="Huawei Mobile Connect - Ctrl",SUBSYSTEMS=="usb",SYMLINK+="ttyusb3"
ATTRS{interface}=="Huawei Mobile Connect - Pcui",SUBSYSTEMS=="usb",SYMLINK+="ttyusb2"
ATTRS{interface}=="Huawei Mobile Connect - Application",SUBSYSTEMS=="usb",SYMLINK+="ttyusb1"
ATTRS{interface}=="Huawei Mobile Connect - Modem",SUBSYSTEMS=="usb",SYMLINK+="ttyusb0"

我们重启系统 输入查看设备节点

通过查看 ,完成了设备节点的软链接

如果我们在具体应用中 通过 /dev/ttyusb2 进行拨号上网。在实际长期运行过程中,我们的 4g 网络守护进程检测到 4g 离网时 ,会重启 4g 模块,有可能导致 ttyUSB 序号发生变化,如下

通过查看 /dev/ttyUSB10 的设备信息与前期的设备信息对比发现,多次反复 4g 模块重启,属性为 ATTRS{interface}=="Huawei Mobile Connect - Pcui" 的接口在 /dev 目录下的设备节点由 ttyUSB2 变为 ttyUSB10 ,如下图所示:

如果我们的应用还继续使用 ttyUSB2 ,肯定会出问题的,但是我们使用 USB 串口所做的软链接 ttyusb2 ,就不会发生问题了。

这篇关于飞凌嵌入式AM335x平台如何通过udev固定4G模块串口号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/643524

相关文章

springboot家政服务管理平台 LW +PPT+源码+讲解

3系统的可行性研究及需求分析 3.1可行性研究 3.1.1技术可行性分析 经过大学四年的学习,已经掌握了JAVA、Mysql数据库等方面的编程技巧和方法,对于这些技术该有的软硬件配置也是齐全的,能够满足开发的需要。 本家政服务管理平台采用的是Mysql作为数据库,可以绝对地保证用户数据的安全;可以与Mysql数据库进行无缝连接。 所以,家政服务管理平台在技术上是可以实施的。 3.1

iptables(7)扩展模块state

简介         前面文章我们已经介绍了一些扩展模块,如iprange、string、time、connlimit、limit,还有扩展匹配条件如--tcp-flags、icmp。这篇文章我们介绍state扩展模块  state          在 iptables 的上下文中,--state 选项并不是直接关联于一个扩展模块,而是与 iptables 的 state 匹配机制相关,特

比较学习难度:Adobe Illustrator、Photoshop和新兴在线设计平台

从入门设计开始,几乎没有人不知道 Adobe 公司两大设计软件:Adobe Illustrator和 Photoshop。虽然AI和PS很有名,有一定设计经验的设计师可以在早期探索和使用后大致了解AI和PS的区别,但似乎很少有人会系统地比较AI和PS。目前,设计软件功能多样,轻量级和网页设计软件已成为许多设计师的需求。对于初学者来说,一篇有针对性的AI和PS比较总结文章具有非常重要的指导意义。毕竟

智慧环保一体化平台登录

据悉,在当今这个数字化、智能化的时代,环境保护工作也需要与时俱进,不断创新。朗观视觉智慧环保一体化平台应运而生,它利用先进的信息技术手段,为环保工作提供了更加便捷、高效的管理方式,成为推动绿色发展的重要力量。 一、智慧环保一体化平台的诞生背景 随着工业化进程的加快,环境污染问题日益严重,传统的环保管理模式已经难以满足现代社会的需求。为了提高环保工作的效率和质量,智慧环保一体化平台应运而

python 在pycharm下能导入外面的模块,到terminal下就不能导入

项目结构如下,在ic2ctw.py 中导入util,在pycharm下不报错,但是到terminal下运行报错  File "deal_data/ic2ctw.py", line 3, in <module>     import util 解决方案: 暂时方案:在终端下:export PYTHONPATH=/Users/fujingling/PycharmProjects/PSENe

[FPGA][基础模块]跨时钟域传播脉冲信号

clk_a 周期为10ns clk_b 周期为34ns 代码: module pulse(input clk_a,input clk_b,input signal_a,output reg signal_b);reg [4:0] signal_a_widen_maker = 0;reg signal_a_widen;always @(posedge clk_a)if(signal_a)

基于Spring Boot构建淘客返利平台

基于Spring Boot构建淘客返利平台 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将讨论如何基于Spring Boot构建一个淘客返利平台。 淘客返利平台通过整合各种电商平台的商品信息,提供给用户查询和返利功能,从而实现流量变现。以下是实现一个简单的淘客返利平台的步骤。 1. 项目初始化 首先,使用Spri

IPD推行成功的核心要素(十一)技术规划与平台规划促进公司战略成功

随着外部大环境的影响,各企业仅有良好的愿望是不够的。预测并顺应新兴市场和技术的变化,变危机为转机,不断推出强大的产品才是一个公司持续繁荣的根本保障。而高效的产品开发往往是基于某些关键技术,针对市场推出的一个或几个产品系列,这些产品系列通常共用一些产品平台,共用一种或者几种关键技术。当一家企业进入了平稳发展期,已经建立了较为完善的管理制度和产品开发流程,但是依然认为竞争对手是那样强大,那样不可战胜。

LoRaWAN在嵌入式网络通信中的应用:打造高效远程监控系统(附代码示例)

引言 随着物联网(IoT)技术的发展,远程监控系统在各个领域的应用越来越广泛。LoRaWAN(Long Range Wide Area Network)作为一种低功耗广域网通信协议,因其长距离传输、低功耗和高可靠性等特点,成为实现远程监控的理想选择。本文将详细介绍LoRaWAN的基本原理、应用场景,并通过一个具体的项目展示如何使用LoRaWAN实现远程监控系统。希望通过图文并茂的讲解,帮助读

一二三应用开发平台应用开发示例(4)——视图类型介绍以及新增、修改、查看视图配置

调整上级属性类型 前面为了快速展示平台的低代码配置功能,将实体文件夹的数据模型上级属性的数据类型暂时配置为文本类型,现在我们调整下,将其数据类型调整为实体,如下图所示: 数据类型需要选择实体,并在实体选择框中选择自身“文件夹” 这时候,再点击生成代码,平台会报错,提示“实体【文件夹】未设置主参照视图”。这是因为文件夹选择的功能页面,同样是基于配置产生的,因为视图我们还没有配置,所以会报错。