Udev 为设备节点起别名

udevadm info 通过这些命令和输出,你可以获取设备的详细路径、名称、驱动信息、存储容量等详细的硬件属性。(Environment variables):设备的环境变量,包含详细的设备信息。,可以查看设备的详细属性信息,如设备的路径、驱动、序列号、设备类型等。是用于管理设备节点的系统组件,它通过设备规则为硬件提供动态管理。(DEVPATH):设备的路径,表示设备的物理位置,指示其连接的位置。(DEVNAME):设备的名称,指设备文件的路径。:设备的符号链接,指向设备的其他标识路径,例如通过。的所有相关信息,包括属性树。 阅读详情

查看设备信息:

操作udev,可以使用udevadm命令,如果我们要查看/dev/sda 设备节点信息,我们可以使用下面命令:
命令:udevadm info -a --name=sda

root@ubuntu:/sys/kernel/debug/usb# udevadm info -a  --name=sda

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/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/block/sda':
    KERNEL=="sda"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{alignment_offset}=="0"
    ATTR{capability}=="50"
    ATTR{discard_alignment}=="0"
    ATTR{events}==""
    ATTR{events_async}==""
    ATTR{events_poll_msecs}=="-1"
    ATTR{ext_range}=="256"
    ATTR{inflight}=="       0        0"
    ATTR{range}=="16"
    ATTR{removable}=="0"
    ATTR{ro}=="0"
    ATTR{size}=="104857600"
    ATTR{stat}=="   31150      512  1309166    61636     7972    25458   293096     2600        0    25092    64168"

  looking at parent device '/devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0':
    KERNELS=="2:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{device_busy}=="0"
    ATTRS{dh_state}=="detached"
    ATTRS{eh_timeout}=="10"
    ATTRS{evt_capacity_change_reported}=="0"
    ATTRS{evt_inquiry_change_reported}=="0"
    ATTRS{evt_lun_change_reported}=="0"
    ATTRS{evt_media_change}=="0"
    ATTRS{evt_mode_parameter_change_reported}=="0"
    ATTRS{evt_soft_threshold_reached}=="0"
    ATTRS{inquiry}==""
    ATTRS{iocounterbits}=="32"
    ATTRS{iodone_cnt}=="0x9918"
    ATTRS{ioerr_cnt}=="0x3"
    ATTRS{iorequest_cnt}=="0x9918"
    ATTRS{model}=="VMware Virtual S"
    ATTRS{queue_depth}=="32"
    ATTRS{queue_ramp_up_period}=="120000"
    ATTRS{queue_type}=="simple"
    ATTRS{rev}=="1.0 "
    ATTRS{scsi_level}=="3"
    ATTRS{state}=="running"
    ATTRS{timeout}=="180"
    ATTRS{type}=="0"
    ATTRS{vendor}=="VMware, "

  looking at parent device '/devices/pci0000:00/0000:00:10.0/host2/target2:0:0':
    KERNELS=="target2:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:10.0/host2':
    KERNELS=="host2"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:10.0':
    KERNELS=="0000:00:10.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="mptspi"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x010000"
    ATTRS{config}==""
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{d3cold_allowed}=="0"
    ATTRS{device}=="0x0030"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="1"
    ATTRS{irq}=="17"
    ATTRS{local_cpulist}=="0"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000001"
    ATTRS{msi_bus}=="1"
    ATTRS{numa_node}=="-1"
    ATTRS{subsystem_device}=="0x1976"
    ATTRS{subsystem_vendor}=="0x15ad"
    ATTRS{vendor}=="0x1000"

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

root@ubuntu:/sys/kernel/debug/usb# 

其中比较常用的:
匹配键:“==”,“!=”
赋值键:“=”,“+=”,":=
KERNEL - 匹配设备的内核名字
SUBSYSTEM - 匹配设备的子系统
DRIVER - 匹配设备驱动名
NAME - 应当被采用为设备节点的名字
SYMLINK - 一系列被作为设备节点替补名字的符号链接
KERNELS - 硬件端口号,有些设备的 idVendor和idProduct 是相同,依靠这两个并不能完全准确的区分目标设备,这时候就需要用 KERNELS 硬件端口号。

以当前 ubuntu 虚拟机为平台做个实验

cd /etc/udev
root@ubuntu:/etc/udev# tree
.
├── hwdb.d
├── rules.d
│   └── 99-vmware-scsi-udev.rules
└── udev.conf

2 directories, 2 files
root@ubuntu:/etc/udev# 
root@ubuntu:/etc/udev# 

我们来通过 udev 修改插入的当前U盘的设备名

在没有插入u盘前 /dev 下只有 sda相关节点。在插入u盘后,出现sdb相关节点, 则当前u盘对应的设备节点就是sdb。 我们将插入的u盘节点名 固定位 usb-Upan。其实就是原来的 设备名的一个 符号链接文件名,就是个别名,原来的名字还是存在的。

插入U盘,udevadm info -a --name=sdb 查看/dev/sdb 设备节点信息:

root@ubuntu:/etc/udev/rules.d# udevadm info -a  --name=sdb 

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/pci0000:00/0000:00:15.0/0000:03:00.0/usb3/3-2/3-2:1.0/host35/target35:0:0/35:0:0:0/block/sdb':
    KERNEL=="sdb"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{alignment_offset}=="0"
    ATTR{capability}=="51"
    ATTR{discard_alignment}=="0"
    ATTR{events}=="media_change"
    ATTR{events_async}==""
    ATTR{events_poll_msecs}=="-1"
    ATTR{ext_range}=="256"
    ATTR{inflight}=="       0        0"
    ATTR{range}=="16"
    ATTR{removable}=="1"
    ATTR{ro}=="0"
    ATTR{size}=="15232000"
    ATTR{stat}=="     153     3898     8218      620        1        0        1        0        0      324      620"

  looking at parent device '/devices/pci0000:00/0000:00:15.0/0000:03:00.0/usb3/3-2/3-2:1.0/host35/target35:0:0/35:0:0:0':
    KERNELS=="35:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{device_busy}=="0"
    ATTRS{dh_state}=="detached"
    ATTRS{eh_timeout}=="10"
    ATTRS{evt_capacity_change_reported}=="0"
    ATTRS{evt_inquiry_change_reported}=="0"
    ATTRS{evt_lun_change_reported}=="0"
    ATTRS{evt_media_change}=="0"
    ATTRS{evt_mode_parameter_change_reported}=="0"
    ATTRS{evt_soft_threshold_reached}=="0"
    ATTRS{inquiry}==""
    ATTRS{iocounterbits}=="32"
    ATTRS{iodone_cnt}=="0xeb"
    ATTRS{ioerr_cnt}=="0x1"
    ATTRS{iorequest_cnt}=="0xeb"
    ATTRS{max_sectors}=="240"
    ATTRS{model}=="Cruzer Force    "
    ATTRS{queue_depth}=="1"
    ATTRS{queue_type}=="none"
    ATTRS{rev}=="1.00"
    ATTRS{scsi_level}=="7"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{type}=="0"
    ATTRS{vendor}=="SanDisk "

  looking at parent device '/devices/pci0000:00/0000:00:15.0/0000:03:00.0/usb3/3-2/3-2:1.0/host35/target35:0:0':
    KERNELS=="target35:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:15.0/0000:03:00.0/usb3/3-2/3-2:1.0/host35':
    KERNELS=="host35"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:15.0/0000:03:00.0/usb3/3-2/3-2:1.0':
    KERNELS=="3-2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb-storage"
    ATTRS{authorized}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceClass}=="08"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bInterfaceProtocol}=="50"
    ATTRS{bInterfaceSubClass}=="06"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:15.0/0000:03:00.0/usb3/3-2':
    KERNELS=="3-2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="224mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0100"
    ATTRS{bmAttributes}=="80"
    ATTRS{busnum}=="3"
    ATTRS{configuration}==""
    ATTRS{devnum}=="7"
    ATTRS{devpath}=="2"
    ATTRS{idProduct}=="557d"
    ATTRS{idVendor}=="0781"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="SanDisk"
    ATTRS{maxchild}=="0"
    ATTRS{product}=="Cruzer Force"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{serial}=="4C530001130404110045"
    ATTRS{speed}=="480"
    ATTRS{urbnum}=="677"
    ATTRS{version}==" 2.10"

  looking at parent device '/devices/pci0000:00/0000:00:15.0/0000:03:00.0/usb3':
    KERNELS=="usb3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{authorized_default}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0404"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="3"
    ATTRS{configuration}==""
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{idProduct}=="0002"
    ATTRS{idVendor}=="1d6b"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Linux 4.4.0-21-generic xhci-hcd"
    ATTRS{maxchild}=="4"
    ATTRS{product}=="xHCI Host Controller"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{serial}=="0000:03:00.0"
    ATTRS{speed}=="480"
    ATTRS{urbnum}=="104"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:15.0/0000:03:00.0':
    KERNELS=="0000:03:00.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="xhci_hcd"
    ATTRS{acpi_index}=="16777984"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x0c0330"
    ATTRS{consistent_dma_mask_bits}=="64"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{device}=="0x0779"
    ATTRS{dma_mask_bits}=="64"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="1"
    ATTRS{irq}=="0"
    ATTRS{label}=="usb_xhci"
    ATTRS{local_cpulist}=="0"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000001"
    ATTRS{msi_bus}=="1"
    ATTRS{numa_node}=="-1"
    ATTRS{subsystem_device}=="0x0779"
    ATTRS{subsystem_vendor}=="0x15ad"
    ATTRS{vendor}=="0x15ad"

  looking at parent device '/devices/pci0000:00/0000:00:15.0':
    KERNELS=="0000:00:15.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="pcieport"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x060400"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{d3cold_allowed}=="0"
    ATTRS{device}=="0x07a0"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="2"
    ATTRS{irq}=="24"
    ATTRS{local_cpulist}=="0"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000001"
    ATTRS{msi_bus}=="1"
    ATTRS{numa_node}=="-1"
    ATTRS{subsystem_device}=="0x07a0"
    ATTRS{subsystem_vendor}=="0x15ad"
    ATTRS{vendor}=="0x15ad"

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

可以看出 该 sdb 的硬件端口号是 “3-2:1.0”

在/etc/udev/rule.d 下创建相应的规则文件,为 sdb 起一个别名: usb-Upan

root@ubuntu:/etc/udev/rules.d# touch 01-Upan.rules
增加一个 01-Upan.rules

内容:
KERNELS==“3-2:1.0”, MODE:=“0777”, GROUP:=“dialout”, SYMLINK+=“usb-Upan”

这样就为 sdb 取了一个别名为 “usb-Upan” ,以后在程序里直接访问 “usb-Upan”,就可以与该u盘通信了。

运行以下命令使修改立即生效:
sudo udevadm trigger

或者然后拔插u盘,果然出现了 “usb-Upan”

在这里插入图片描述

注意是符号链接

mhr@ubuntu:/dev$ ls -l usb-Upan
lrwxrwxrwx 1 root root 3 1月  19 00:14 usb-Upan -> sdb

同理 SD卡 操作也类似: 示例中硬件端口号是随机写的,思路是一样的,只不过这里 也指定了原生的设备名为 “sd*”,增加了筛选条件。

KERNELS=="1-2.3",KERNEL=="sd*",SYMLINK+="usbsda%n",OPTIONS="ignore_remove"
KERNELS=="1-2.4",KERNEL=="sd*",SYMLINK+="usbsdb%n",OPTIONS="ignore_remove"
KERNELS=="1-2.2",KERNEL=="sd*",SYMLINK+="usbsdc%n",OPTIONS="ignore_remove"
别再手动改端口了!用CP2102芯片+设备别名,搞定ROS与STM32串口通信自启动 本文详细介绍了如何通过定制CP2102芯片序列号和配置Linux设备别名,彻底解决ROS与STM32串口通信中的端口漂移问题。通过修改芯片序列号和创建持久化udev规则,实现设备路径的固定,确保ROS系统能够稳定自启动,提升机器人项目的可靠性。 阅读详情

相关推荐

[驱动]udev:udevadm命令总结

一、命令参数 1、udevadm --help root@tegra-ubuntu:~# udevadm --help udevadm [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS] Send control commands or test the device manager. Commands: info Query sysfs or the udev database trigger Request

郭老二 3547

udev设备文件系统

文章目录前言udevmdev 前言 udev&mdev 设备文件系统有devfs,mdev,udev这三种 udev 设备管理器,提供设备事件,(如Windows的设备管理器一样,插入设备,触发设备事件,如果我们了解udev,就可以利用设备事件来做一些事情,可以写脚本,由udev触发,比如当一个游戏手柄连接后加载一个指定的驱动程序,或者当你用于备份的驱动器连接后,自动执行备份工作)。为什么udev被普及,是因为devfs有缺点: (静态文件和devfs)有几个缺点: 1.不确定的设备映射。 特

weixin_44705391的博客 3675

【驱动】udev为USB转4串口的每个串口起别名

udev为USB转4串口的每个串口起别名,以及udev规格文件详解

郭老二 596

使用udevdm查询蓝牙模块的信息

使用udevdm查询蓝牙模块的信息

lihe758的专栏 534

UDP_千兆光通信(四)Tri Mode Ethernet MAC ip核

其中 Transmit Engine 从 AXI-Stream TX 接口接收数据,并添加前导码 Preamble、帧起始界定符 SFD、帧校验序列 FSC 等,并在必要时(长度小于最小 MAC 帧长度)填充数据,因此在使用 TEMAC 时,MAC 帧的这几个部分就不需要我们自己添加了(不过其他的 MAC 帧部分,可选的帧过滤器 Frame Filter 用于过滤与一组可配置过滤器匹配的帧,一般用于过滤掉目的 MAC 地址与本设备不一致的帧,TEMAC 默认开启帧过滤器。默认值为使用64位宽的计数器。

lzr232的博客 1775

SpyGlass Lint脚本实战:从环境配置到报告生成的完整流程解析

本文详细解析了使用SpyGlass Lint脚本进行数字芯片设计代码质量检查的完整自动化流程。从环境配置、目录结构设计,到核心TCL脚本的编写与模块化配置,再到脚本执行、调试技巧及报告解读,提供了构建健壮、可维护自动化检查框架的实战指南。文章重点阐述了如何通过脚本实现从环境配置到报告生成的一键式操作,并探讨了与企业级CI/CD流程集成的进阶方案。

weixin_29196613的博客 439

Linux串口ttyUSB修改别名/重映射串口名

输入以下命令查看当前设备节点(ttyUSB0)所在的USB端口号。输入以下指令新增udev规则文件,自定义端口别名。设备节点的端口映射,之后我们就可以通过使用。可以看出,上面出现了我们自定义的设备节点。节点来对串口设备进行打开、关闭等操作了。可以看到自己创建的名称映射到串口上。其中,第三行的值为当前设备节点。的值为我们自定义的设备节点别名。目录下系统自动分配的设备节点。刷新串口,或者插拔USB接口。可以看出,当前设备的节点为。这里我以两个340串口为例。​ 得到类似以下的信息。加载完毕后,再次查看。

weixin_46973942的博客 2424

RK3588嵌入式开发:从零构建Rockit多媒体处理引擎的实战指南

本文详细介绍了如何在RK3588嵌入式平台上从零构建Rockit多媒体处理引擎的实战指南。涵盖开发环境搭建、工具链配置、源码编译流程、硬件加速优化及典型问题解决方案,帮助开发者高效利用RK3588的NPU和VPU加速特性,实现高性能多媒体处理应用。

mango的博客 187

udev规则

解析:是一种维护设备节点的机制--设备命名、设置别名--设置所有者、权限--执行特定操作位置:/etc/udev/rules.d/<rule_name>.rules示例:99-myrule.rules网卡规则新建一个磁盘添加规则用于匹配的操作符和关键字操作符 ==、!=关键字 ACTION:设备的添加或删除,值为add、remove ...

weixin_34289744的博客 127

增量编码器资讯大全

增量编码器是什么 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小,按照工作原理编码器可分为增量式和绝对式两类。 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。 编码器是把角位移或直线位移转换成电信号的一种装置。前者称为码盘,后者称码尺.按照读出方式编码器可以分为接触式和非接触式两种.接触式采...

kindele的博客 6008

Tailscale 自建 DERP 中继服务器

Tailscale自建DERP中继服务器

Accompagner的博客 4330

oracle asm 故障组,UDEV配置错误导致ASM磁盘组故障模拟及恢复测试(一)

因负责运维的数据库多为ORACLE RAC+ASM(UDEV)架构,随着业务规模不断扩容,数据库存储已经成为数据库服务资源交付主要瓶颈环节。对于数据库运维团队来讲,除去依照业务行为提前规划数据库存储用量之外,数据库ASM添加存储磁盘工作也是DBA工作中的家常便饭,因此工作风险较大,也较为常见,所以计划分享下UDEV配置错误导致的ASM磁盘组故障及恢复案例,供大家参考。测试三种情况:场景(1)模拟不...

weixin_32463071的博客 879

Vue - 萤石云监控 ezuikit 视频实例销毁方案,解决使用stop方法无法销毁EZUIKit实例或销毁后依然占用内存并且监控画面依然有声音问题(解决页面多个监控摄像头画面同时播放,翻页或关闭页

vue2,vue3,萤石,监控摄像头,萤石云销毁视频实例,退出页面销毁,stop销毁原视频流,占用内存怎么办,销毁后视频依旧在后台播放有声音,销毁视频播放器,页面上有多个视频画面怎么销毁某一个,stop方法不生效怎么办,浏览器非常卡,dom销毁,ezuikit-js萤石云播放器Vue中使用beforeDestory销毁播放器实例,调用萤石云ezuikit-js的视频对象销毁,vue使用萤石云监控视频录像回放,不销毁实例会出现离开页面后依旧有监控声音并且占内存问题,不好使,页面崩了,崩溃,视频监控太多,没有用

🏆 前端领域优质创作者 1万+

Linux平台未知usb设备(设备描述)驱动加载机制详解

深入剖析Linux系统如何识别并加载未知usb设备(设备描述)的驱动程序,揭示内核模块自动匹配与udev规则在设备描述匹配中的关键作用。

weixin_42298254的博客 1154

55、Mac OS X 10.2 安装、设置、卸载及故障排除全攻略

本博客全面解析了 Mac OS X 10.2 的安装、设置、卸载及故障排除方法。内容涵盖四种安装方式的适用场景及操作步骤、设置助手的详细配置流程、卸载注意事项与恢复建议,以及常见问题和进阶故障的解决办法。通过图文并茂的形式,帮助用户快速掌握 Mac OS X 10.2 的基础与高级操作,是使用该操作系统的实用指南。

qsc90123456的博客 151

深度解析长鑫G5 DRAM工艺的技术逻辑与微缩边界

长鑫存储G5 DRAM平台通过多重图形化、45:1高深宽比电容与外围HKMG技术,突破先进光刻受限瓶颈,在11.95 nm有源区半间距下实现阵列微缩与电容结构优化。其核心意义不在于对标国际节点,而在于系统性解决“尺寸缩小—电荷保持—外围跟进而”三大矛盾,展现国产DRAM在无EUV条件下推进先进制程的工艺整合能力。

硬核科技 36

告别混乱:用udev规则为你的PEAK PCAN设备创建永久别名(Linux环境实战)

本文详细介绍了如何在Linux环境下使用udev规则为PEAK PCAN设备创建永久别名,解决设备节点名不稳定的问题。通过语义化命名和基于序列号的固定别名,提升无人驾驶和汽车电子测试中的设备管理效率,适用于多设备并行接入和自动化部署场景。

weixin_30765577的博客 454

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Linux-固定usb转串口名称

usb转串口

Paper_Love的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Linux设备驱动与设备节点映射

系统适配是整套落地工程,包含设备树修改、驱动移植、系统配置、节点优化,解决默认规则的缺陷:默认问题:原生 ttyUSB 编号随插拔顺序变化、设备权限不足、默认名称不统一适配方案:编写 udev 规则,基于设备唯一序列号固定别名(如 /dev/uart0),不受系统默认编号影响临时自定义:mknod 手动创建任意路径节点,只要主次设备号一致,即可映射同一硬件关键结论:系统默认的 /dev 路径不是固定写死,内核原生编号有默认规则,但可通过内核参数、udev 规则自由修改映射关系。

qq_45960487的博客 326

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

uni-app x 中 flex-grow 弹性增长系数完全指南:语法、拍平兼容与动态样式实践

本篇技术指南围绕 uni-app x 的 `flex-grow` 属性展开,说明它在弹性容器主轴方向上如何按比例分配剩余空间,覆盖语法、默认值、多端(Web / Android / iOS / HarmonyOS)兼容性、App 平台拍平(flatten)模式下的行为,并结合仓库中的真实示例([src/pages/CSS/flex/flex-grow.uvue](https://link.gitc

gitblog_00678的博客 333

99-oracle-asmdevices.rules

KERNEL==“sd*”, SUBSYSTEM==“block”, PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT==“36 000c29a574a6f89e1a6aa188af2bc6b”, SYMLINK+=“asm-diskb”, OWNER=“oracle”, GROUP=“dba”, MODE=“0660” KERNEL==“sd*”, SUBSYSTE

Baldwin的博客 1718

修复ros2-G1宇树机器人无法识别左右手bug

通过 udev 规则绑定 USB 设备到固定别名(和),ROS2 节点直接使用别名访问串口,可彻底解决因设备名随机分配导致的左右手识别问题。获取设备差异属性→编写 udev 规则→节点适配固定路径。以下是一个自动创建 udev 规则文件的脚本,可根据设备物理路径(KERNELS)自动区分并绑定左右手设备,适用于你的场景。脚本会自动检测设备属性、交互式让你选择左右手对应设备,并完成规则创建和生效流程。/bin/bash。

saikalv的博客 973

帮zk调试gc0308双camera时候遇到的问题

1.ioctl(VIDIOC_TRY_FMT) failed 22(Invalid argument),老是提示这个错误。   原因:1.在udev里面,ACTION=="add" KERNEL=="video0" SUBSYSTEM=="video4linux" DRIVERS=="pxa168-camera" NAME="cim",                     把video0的

Allen.Yao的专栏 2702

ros下小车外接串口,永久权限设置

1记录自己串口的信息(重新插拔,即可看到那个是自己的串口)记录的信息是:id后的数据,对应3中的两个id。最后一个参数是自己取得别名,可以修改。4重新插拔,查看权限是否修改完成。2打开vim编写串口信息。3在文件中写入以下信息。

weixin_43592113的博客 217

udev配置多设备idVendor、idProduct 相同问题

找到ATTRS{idProduct},ATTRS{idVendor},ATTRS{serial}的信息内容。注意:SYMLINK+=“arm”,双引号中的内容为别名,设备启动可通过别名启动。发现有两个端口号,idVendor,idProduct完全相同。3.编写XXX.sh文件(文件路径可任意选择)将上述所找的内容,改成自己所对应的信息。检查是否配置成功,如有输出则为配置成功。进入XXXXX.sh文件的目录下。

weixin_45420847的博客 897

告别/dev/ttyUSB0:为思岚A2激光雷达创建永久别名,解决ROS2项目中的串口烦恼

本文详细介绍了如何为思岚A2激光雷达创建永久别名,解决ROS2项目中串口设备号不稳定的问题。通过编写定制化udev规则,实现设备端口的固定映射,提升开发效率和团队协作便利性。适用于Ubuntu22.04和ROS2-Humble环境,帮助开发者避免常见的低级错误。

weixin_30808693的博客 572
上一篇: Udev设备管理器
下一篇: sysfs文件系统简述
Ma浩然
博客等级 码龄9年 1万+粉丝 462原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值