【问题标题】:How do identify a USB modem /dev on LINUX with Python如何使用 Python 在 LINUX 上识别 USB 调制解调器 /dev
【发布时间】:2011-12-19 12:46:16
【问题描述】:

如果我有一个使用 Python pyserial 模块访问的 USB 调制解调器,它需要识别设备,例如 '/dev/ttyACM0。如果调制解调器连接到 USB 集线器,则它不再出现在 /dev/tty...

如何从我的 Python 代码中以编程方式识别它,以便无论它是否已更改,或者机器是否重新启动,我都可以找到调制解调器?

注意: 我总是可以看到使用 lsusb 的设备,但如果它连接到 USB 集线器,它不会显示为 /dev/tty... 设备

【问题讨论】:

  • 很难尝试自动找到合适的调制解调器。例如,如果您有两个连接怎么办?设备路径可以放入某种配置变量(配置文件和/或命令行参数)中,以便轻松更改。

标签: python linux usb


【解决方案1】:

这听起来像是 linux 内核中的错误。如果可以,请尝试更新的版本。

如果失败,请检查dmesg 或文件/var/log/messages 输出的最后几行(后者取决于您的发行版;如果该文件不存在或不包含您的内容寻找,然后检查/var/log 中的其他文件;使用ls -rt 按时间排序有帮助)。

识别设备后,您可能会看到一个图案。

另一种方法是主要和次要编号。如果你运行ls -l /dev,你会看到这样的输出:

crw--w----   1 root tty         4,   0 2011-12-19 09:15 tty0

c 表示“字符设备”,4, 0 表示它是控制台设备单元 0。

4 是标识设备类型的主编号。请参阅/proc/devices 获取主要编号列表和相应的设备驱动程序。

如果您直接插入模型,请记下主要编号。将其插入集线器后,尝试查找具有相同编号的设备。

【讨论】:

  • 感谢您的回答。是的 - 它是一个字符设备。我尝试过制作文件前后的文件并对其进行差异化,以及对型号进行 grep 处理。调制解调器连接到集线器时肯定不存在。我打算再买一个集线器试试看。
  • 在 i686 上运行带有 2.6.35-22-generic 内核的 Ubuntu 10.10
  • 首先尝试不同的集线器。他们有时确实有错误。如果这没有帮助,请考虑升级到 11.10 或 11.04 - 除非您正在运行 LTS。
  • dmesg 识别出正在连接的调制解调器,但随后我收到一条消息“由于可用总线电源不足而拒绝 1 个配置” - 我认为集线器故障
  • 埃里克:啊!您需要一个有源集线器(带电源的集线器),因为调制解调器使用它来为自己供电!
【解决方案2】:

不要在 Python 中做一些巫术,而是尝试编写一个 udev rule,它可以为您的设备提供一个更有用的名称,例如 /dev/my-serial-thingy。在 Python 中使用它要容易得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2017-09-09
    • 2014-11-03
    • 2021-05-02
    • 1970-01-01
    • 2014-06-19
    相关资源
    最近更新 更多