symlink /sys/bus/usb/devices/1-1.4/1-1.4:1.0/ttyUSB* /dev/ttyUSB0
时间: 2023-10-01 08:10:58 浏览: 199
这个命令会将 /sys/bus/usb/devices/1-1.4/1-1.4:1.0 目录下的所有 ttyUSB* 设备都链接到 /dev/ttyUSB0 上。这个命令的作用是将同一个 USB 设备的多个串口设备链接到同一个虚拟串口设备上,以方便应用程序访问这些串口设备。这个命令在一些特殊的应用场景下会比较有用,比如使用多个串口设备进行数据采集和处理。
相关问题
symlink /sys/bus/usb/devices/1-1.4/1-1.4:1.0 /dev/ttyUSB0
这是一个 Linux 命令,它的作用是创建一个软链接,将 USB 设备的路径映射到一个虚拟的串口设备上,以便在应用程序中访问该 USB 设备。具体来说,这个命令将 USB 设备 /sys/bus/usb/devices/1-1.4/1-1.4:1.0 映射到 /dev/ttyUSB0 这个虚拟串口设备上。这个命令在使用 USB 设备进行串口通信时非常有用。
Ubuntu绑定设备失败(3dmem) zrt@zrt:~$ sudo dmesg | grep ch34x [23948.109110] usbcore: registered new interface driver ch34x [23948.109121] usbserial: USB Serial support registered for ch34x [23948.109134] ch34x 1-8.4:1.0: ch34x converter detected [23948.109168] Modules linked in: ch34x(OE+) usbserial snd_usb_audio snd_usbmidi_lib snd_ump mc pcspkr ccm rfcomm nvidia_uvm(PO) mvfgvirtualserial(OE) cmlframegrabber(OE) cmac xofframegrabber(OE) algif_hash algif_skcipher af_alg cxpframegrabber(OE) bnep gevframegrabber(OE) gevfilter(OE) intel_rapl_msr intel_rapl_common intel_uncore_frequency intel_uncore_frequency_common intel_tcc_cooling x86_pkg_temp_thermal intel_powerclamp coretemp nvidia_drm(PO) nvidia_modeset(PO) nvidia(PO) snd_sof_pci_intel_tgl snd_sof_intel_hda_common soundwire_intel snd_sof_intel_hda_mlink soundwire_cadence snd_sof_intel_hda snd_sof_pci snd_sof_xtensa_dsp snd_sof binfmt_misc kvm_intel snd_sof_utils snd_soc_hdac_hda rtw89_8851be snd_hda_ext_core snd_soc_acpi_intel_match rtw89_8851b snd_soc_acpi snd_hda_codec_realtek soundwire_generic_allocation nls_iso8859_1 snd_hda_codec_generic soundwire_bus rtw89_pci snd_hda_codec_hdmi kvm snd_soc_core snd_compress irqbypass ac97_bus rtw89_core snd_pcm_dmaengine crct10dif_pclmul btusb polyval_clmulni [23948.109280] ch34x_attach+0x1a6/0x3d0 [ch34x] [23948.109304] ? __pfx_ch34x_init+0x10/0x10 [ch34x] [23948.109305] ch34x_init+0x23/0xff0 [ch34x] [23948.109762] usb 1-8.4: ch34x converter now attached to ttyUSB0 [23951.195800] usb 1-8.4: usbfs: interface 0 claimed by ch34x while 'brltty' sets config #1 [23951.196419] ch34x ttyUSB0: ch34x converter now disconnected from ttyUSB0 [23951.196427] ch34x 1-8.4:1.0: device disconnected [24071.682644] ch34x 1-8.4:1.0: ch34x converter detected [24071.683064] usb 1-8.4: ch34x converter now attached to ttyUSB0 [24072.212788] usb 1-8.4: usbfs: interface 0 claimed by ch34x while 'brltty' sets config #1 [24072.213372] ch34x ttyUSB0: ch34x converter now disconnected from ttyUSB0 [24072.213389] ch34x 1-8.4:1.0: device disconnected [24137.264924] ch34x 1-8.4:1.0: ch34x converter detected [24137.265809] usb 1-8.4: ch34x converter now attached to ttyUSB0 [24137.798412] usb 1-8.4: usbfs: interface 0 claimed by ch34x while 'brltty' sets config #1 [24137.798977] ch34x ttyUSB0: ch34x converter now disconnected from ttyUSB0 [24137.798985] ch34x 1-8.4:1.0: device disconnected [24143.229930] ch34x 1-8.4:1.0: ch34x converter detected [24143.230327] usb 1-8.4: ch34x converter now attached to ttyUSB0 [24143.756662] usb 1-8.4: usbfs: interface 0 claimed by ch34x while 'brltty' sets config #1 [24143.757207] ch34x ttyUSB0: ch34x converter now disconnected from ttyUSB0 [24143.757215] ch34x 1-8.4:1.0: device disconnected
<think>我们正在解决Ubuntu系统下CH34x驱动绑定设备失败的问题。根据引用资料,绑定失败可能是因为系统无法区分多个相同的串口设备(如两个CH341设备)。解决方法通常涉及使用udev规则通过设备的唯一标识(如KERNELS或ID_SERIAL)来绑定设备。
步骤总结:
1. 确认驱动安装正确:确保已正确安装CH34x驱动(参考引用[1]和[2])。
2. 查询设备属性:使用`udevadm`命令获取设备的唯一标识(如KERNELS、ID_SERIAL等),用于区分设备(参考引用[3])。
3. 创建udev规则:根据查询到的唯一标识编写udev规则,为每个设备分配固定的设备别名(如/dev/ttySTM32)。
4. 重新加载并触发udev规则:使新规则生效。
详细步骤:
### 1. 确认驱动安装
首先,确保驱动已正确安装。如果之前安装过旧驱动,可能需要先删除(参考引用[2]):
```bash
sudo rm /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ch34x.ko
```
然后下载并编译安装新驱动(以CH341为例):
```bash
unzip CH341SER_LINUX.ZIP
cd CH341SER_LINUX
make
sudo make load
sudo cp ch34x.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial/
sudo depmod -a
```
加载驱动:
```bash
sudo modprobe ch34x
```
### 2. 查询设备属性
插入设备,使用`lsusb`查看设备是否被识别(应显示1a86:7523)。
然后,使用`udevadm`查询设备属性(以ttyUSB0为例):
```bash
udevadm info --attribute-walk --path=$(udevadm info -q path -n /dev/ttyUSB0) | less
```
在输出中查找能唯一标识设备的属性,例如`KERNELS`(如`1-1.2`)或`ATTRS{serial}`(如果有序列号)。通常,`KERNELS`是物理端口层次结构,具有唯一性。
### 3. 创建udev规则
在`/etc/udev/rules.d/`目录下创建规则文件,例如`99-usb-serial.rules`。
根据查询到的属性编写规则,例如:
对于第一个设备(假设KERNELS=="1-1.2"):
```
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", KERNELS=="1-1.2", SYMLINK+="ttySTM32"
```
对于第二个设备(假设KERNELS=="1-1.3"):
```
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", KERNELS=="1-1.3", SYMLINK+="ttyLidar"
```
注意:`SYMLINK+="ttySTM32"`表示创建符号链接`/dev/ttySTM32`指向该设备。
### 4. 重新加载并触发规则
```bash
sudo udevadm control --reload-rules
sudo udevadm trigger
```
重新插拔设备,检查`/dev`目录下是否出现`ttySTM32`和`ttyLidar`。
### 5. 验证
使用`ls -l /dev/ttySTM32`和`ls -l /dev/ttyLidar`查看符号链接是否指向正确的设备节点(如ttyUSB0或ttyUSB1)。
如果问题仍然存在,检查规则文件语法是否正确,以及属性值是否准确(注意大小写和引号)。
参考引用[4]中,用户也遇到了类似问题,通过绑定设备别名解决。
§§相关问题§§
1. 如何检查Ubuntu中USB设备的驱动是否加载成功?
2. udev规则中的KERNELS和KERNEL有什么区别?
3. 如果两个设备插入同一个USB集线器,如何保证KERNELS的稳定性?</think>### 解决 Ubuntu 下 CH34x 驱动绑定设备失败的方法
#### 1. **确认驱动安装状态**
- 检查驱动是否加载:
```bash
lsmod | grep ch34x
```
若无输出,说明驱动未加载,需重新安装(参考引用[1][2]):
```bash
sudo rm /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ch34x.ko # 删除旧驱动
unzip CH341SER_LINUX.ZIP && cd CH341SER_LINUX
make && sudo make load # 编译并加载驱动
```
#### 2. **绑定设备到固定端口**
当多个相同设备(如两个 CH341)导致系统分配混乱时(参考引用[3][4]):
- **查询设备唯一标识**:
```bash
udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB0
```
记录 `KERNELS` 值(如 `1-1.2`),该值对应物理 USB 端口。
- **创建 Udev 规则**:
新建规则文件:
```bash
sudo nano /etc/udev/rules.d/99-ch34x.rules
```
添加规则(以 `KERNELS` 区分设备):
```text
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", KERNELS=="1-1.2", SYMLINK+="ttySTM32"
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", KERNELS=="1-1.3", SYMLINK+="ttyLidar"
```
> 说明:`KERNELS` 值通过 `udevadm` 查询获得,确保物理端口固定。
- **生效规则**:
```bash
sudo udevadm control --reload-rules
sudo udevadm trigger
```
#### 3. **验证绑定结果**
- 重新插拔设备,检查符号链接:
```bash
ls -l /dev/ttySTM32 /dev/ttyLidar
```
输出应指向实际设备节点(如 `/dev/ttyUSB0`)。
#### 4. **解决常见问题**
- **驱动冲突**:卸载冲突驱动(如 `brltty`):
```bash
sudo apt remove brltty
```
- **权限问题**:将用户加入 `dialout` 组:
```bash
sudo usermod -aG dialout $USER
```
- **规则未生效**:重启服务:
```bash
sudo service udev restart
```
#### 5. **应用配置**
在代码中使用固定符号链接(如 `/dev/ttySTM32`),避免依赖动态分配的 `ttyUSB*`。
---
阅读全文
相关推荐

















