AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 507349
Accepted
folibis
folibis
Asked: 2019-03-20 23:10:20 +0800 CST2019-03-20 23:10:20 +0800 CST 2019-03-20 23:10:20 +0800 CST

一致的 Linux 设备枚举

  • 772

在我们的 Linux 机器中,我们有 USB -> 串行设备,它总是被标识为 /dev/ttyACM0. 所以我写了一个应用程序,直到昨天,一切正常。但突然(是的,在远程演示期间......)设备停止工作。经过快速研究,我发现连接更改为/dev/ttyACM1. 这有点不合时宜,但现在我有一个问题 - 如何明确识别我的设备?例如,尽管 UUID/dev/sd**已更改,但可以使用 UUID 初始化存储驱动器。有没有办法为串行设备做到这一点?

现在我使用一个愚蠢的解决方法:

for(int i = 0; i < 10; i ++)
{
    m_port = std::string("/dev/ttyACM") + (char)('0' + i);
    m_fd = open(m_port.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
}

我们使用的设备的链接。

linux usb-device
  • 2 2 个回答
  • 3154 Views

2 个回答

  • Voted
  1. Best Answer
    thecarpy
    2019-03-20T23:58:48+08:002019-03-20T23:58:48+08:00

    由于我们正在讨论 USB 设备并假设您有 udev,您可以设置一些 udev 规则。

    我猜,这只是一个疯狂的猜测,有人或某物拔下/移除了设备并将其重新插入/再次添加设备,这会增加数字。

    现在,首先您需要供应商和产品 ID:

    $ lsusb
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 011: ID 0403:6001 FTDI FT232 USB-Serial (UART) IC
    

    接下来,您需要序列号(如果您有多个):

    # udevadm info -a -n /dev/ttyUSB1 | grep '{serial}' | head -n1
        ATTRS{serial}=="A6008isP"
    

    现在,让我们创建一个 udev 规则:

    UDEV 规则通常分散在/etc/udev/rules.d. 创建一个名为的新文件99-usb-serial.rules并将以下行放入其中,我有三个设备,每个设备都有一个不同的序列号:

    SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A6008isP", SYMLINK+="MySerialDevice"
    SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A7004IXj", SYMLINK+="MyOtherSerialDevice"
    SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTDIF46B", SYMLINK+="YetAnotherSerialDevice"
    
    ls -l /dev/MySerialDevice
    lrwxrwxrwx 1 root root 7 Nov 25 22:12 /dev/MySerialDevice -> ttyUSB1
    

    如果您不想要序列号,则来自具有相同芯片的供应商的任何设备都将获得相同的符号链接,在任何给定时间只能插入一个。

    SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="MySerialDevice"
    

    取自这里

    • 20
  2. AlexBurk
    2020-05-05T23:50:08+08:002020-05-05T23:50:08+08:00

    UDEV 规则是个好主意,但许多设备没有序列号或具有相同的序列号,这并不能解决 ttyACM0 到 ttyACM1 的问题

    尝试

    systemctl stop ModemManager systemctl disable ModemManager

    PS我不是魔术师,我只是在学习,但友谊可以帮助我们创造真正的奇迹

    • 0

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve