无法打开端口 /dev/ttyUSB0

无法打开端口 /dev/ttyUSB0

我有两个 PICAXE 微控制器。实际上,我有 Ubuntu 14.04 LTS (Trusty Tahr)。

我必须下载 LinAXEpad 应用程序并安装这些库:

sudo apt-get install libgtk2.0-0: libcairo2 i386: i386 libpango1.0-0: libgdk-pixbuf2.0-0 i386: i386 libstdc ++ 6: i386

我遵循了以下说明:

4.0)Linux 安装

AXE027 电缆包含一个基于 FTDI USB 转串行转换器芯片的内部电子电路。默认 Linux 安装已通过名为“ftdi_sio”的内核驱动程序(内核 2.4.20 及更高版本)支持此芯片。因此无需下载驱动程序。

然而,由于许多不同公司生产的许多不同产品都使用相同的 FTDI 芯片,因此每种产品都被赋予一个唯一的“产品 ID”号以便识别。

此唯一的产品 ID 被编入电缆内的芯片中,以便当电缆连接到计算机时能够被唯一地识别。

AXE027 USB 电缆的唯一产品 ID 为 0xbd90。供应商 ID 为 0x0403。但是,大多数 Linux 发行版安装的默认驱动程序 ftdi_sio 仅识别 FTDI 芯片的几个(默认)产品 ID(例如 0x6001)。因此,需要“修补”驱动程序,以便它正确支持 AXE027 的 0xbd90 产品 ID。

所有三个选项都以同样简单的方式检查是否运行正确 - 将 AXE027 电缆插入 USB 端口后,名为 /dev/ttyUSB0 的符号链接文件应自动出现在操作系统中。

请注意,任何使用 AXE027 电缆的应用程序都需要处理此 USB 符号链接:

/dev/ttyUSB0

这与传统的串行(例如“COM1”)端口链接不同:

/dev/ttyS0

4.2)Linux 补丁选项 2(推荐) 创建一个新的 udev 规则,以便每次计算机启动时自动应用 modprobe 规则。创建一个名为的新文件(例如使用 KWrite、gedit 或类似的文本编辑器):

/etc/udev/rules.d/99-axe027.rules

为此,打开终端控制台,然后输入:

sudo kwrite /etc/udev/rules.d/99-axe027.rules

然后输入以下文本(注意下面的最后两行应该输入为一行长文本),然后保存文件。

# /etc/udev/rules.d/99-axe027.rules
# contains axe027 udev rule to patch default
# FTDI product id to AXE027 product id (0xbd90)
SYSFS{idProduct}=="bd90",
SYSFS{idVendor}=="0403",
RUN+="/sbin/modprobe -q ftdi_sio product=0xbd90 vendor=0x0403"

新规则将始终在系统启动时应用。若要立即试用新规则而不重新启动,请打开终端控制台,然后键入:

(原始代码)

sudo udevcontrol reload_rules

(我的代码)

sudo udevadm control --reload-rules

然后,我尝试执行 LinAXEpad 应用程序,访问:VIEW>>OPTIONS(选择微控制器),最后“单击”FIRMWARE

我懂了:

无法打开端口 /dev/ttyUSB0(err=2:没有此文件或目录)

我能做些什么?

尝试LSUSBhttp://www.subirimagenes.com/otros-lsusb-9076605.html

尝试二甲基硅油http://www.subirimagenes.com/otros-dmesg-9076607.html

答案1

dmesg为您提供一些有用的提示(请参阅您发布的图片)。

  • 您的规则肯定是错误的:请参见说明参数未知/被忽略的udev行。无论如何,加载此模块会产生一些结果:您的适配器现在称为串行适配器并已创建,但据说该驱动程序是实验性的,您应该要求将您的适配器添加到正确的驱动程序(我会代替您这样做,这很可能是更好的方法)。ftdi_siottyUSB0[email protected]

现在,关于被拒绝的权限,您可以:

  • 列出/dev 文件夹以ls -l查找拥有 的组ttyUSB0。(可能是tty)。它应该rw对该文件夹具有权限。
  • 让运行你的应用程序的用户成为该组的成员,例如sudo adduser theuser thegroup。它应该可以解决权限问题。

顺便说一句,当类似命令的输出modprobe -c太大时,您可以将其通过管道传输到 less 或 grep:

sudo modprobe -c | less

sudo modprobe -c | grep ftdi_sio

答案2

在最近的内核中(肯定是 14.04 LTS),该ftdi_sio模块不再接受产品和供应商选项。相反,您必须手动将值写入/sys/bus/usb-serial/drivers/ftdi_sdio/new_id。您可以使用以下 udev 规则自动执行此操作:

ACTION=add, ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bd90", RUN+="/sbin/modprobe", RUN+="/bin/sh -c 'echo 0403 bd90 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id'"
  1. /etc/udev/rules.d/99-axe027.rules使用上面的行创建一个新的规则文件

  2. 通过运行重新加载规则sudo udevadm control --reload。或者重启。

  3. 如果已插入设备,请拔下它。

  4. 插入设备。

相关内容