PC上接了多个USB串口设备,查找某个口所接的USB串口对应的设备文件什么,将枚举方法用Shell脚本写出来,参数为USB口序号。
时间: 2023-08-31 16:27:22 浏览: 103
### 回答1:
可以使用以下Shell脚本来查找PC上接的USB串口设备文件:
```bash
#!/bin/bash
# Usage: find_usb_serial.sh [USB口序号]
# 列出所有的ttyUSB设备
ls /dev/ttyUSB* > /tmp/usb_serial_devices
if [ $# -ne 1 ]; then
echo "Usage: $0 [USB口序号]"
exit 1
fi
# 根据USB口序号查找设备文件
usb_port=$1
device_file=$(sed -n "${usb_port}p" /tmp/usb_serial_devices)
if [ -z "$device_file" ]; then
echo "USB口序号不存在!"
exit 1
else
echo "$device_file"
fi
```
在这个脚本中,我们首先列出所有的ttyUSB设备,并将它们保存到/tmp/usb_serial_devices文件中。然后,我们从命令行参数中获取USB口序号,并使用sed命令从/tmp/usb_serial_devices文件中查找对应的设备文件。如果找到了设备文件,就将其输出到控制台上;如果找不到设备文件,则输出错误提示信息并退出脚本。
### 回答2:
要查找PC上某个USB口所接的USB串口对应的设备文件,可以通过使用Shell脚本来实现。脚本的参数为USB口序号。
首先,可以使用lsusb命令来列出所有连接到PC上的USB设备信息。lsusb命令可以同时提供USB设备的厂商标识符和产品标识符。
然后,可以通过解析lsusb命令的输出,使用grep和awk等命令来过滤出指定USB口序号所对应的设备信息。
下面是一个示例的Shell脚本:
```shell
#!/bin/bash
# 获取输入的USB口序号
usb_port=$1
# 使用lsusb命令列出所有USB设备信息
usb_info=$(lsusb)
# 按照换行符分割输出结果
IFS=$'\n'
# 遍历每一行输出结果
for line in $usb_info; do
# 使用grep命令过滤出包含指定USB口序号的行
if echo "$line" | grep -q "Bus $usb_port"; then
# 使用awk命令提取设备文件路径,并打印出结果
device=$(echo "$line" | awk '{print "/dev/bus/usb/"$2"/"$4}')
echo "USB口序号 $usb_port 对应的设备文件是 $device"
fi
done
```
使用以上脚本,可以通过命令行参数传入USB口序号,例如:
```shell
./find_usb_device.sh 001
```
脚本会遍历lsusb命令的输出,然后找到与指定USB口序号匹配的设备,并提取出其设备文件路径。最后在终端输出USB口序号对应的设备文件路径。
### 回答3:
在PC上接了多个USB串口设备后,我们可以使用udev规则来查找某个USB串口对应的设备文件。udev是Linux操作系统中用于管理设备的驱动程序的一个子系统。
首先,我们需要创建一个udev规则文件,用于将特定USB串口与设备文件进行绑定。在终端中使用以下命令创建一个名为"usb_serial.rules"的文件:
```
sudo nano /etc/udev/rules.d/usb_serial.rules
```
然后,将以下内容添加到文件中:
```
KERNEL=="ttyUSB*", SUBSYSTEM=="tty", ATTRS{idVendor}=="<Vendor ID>", ATTRS{idProduct}=="<Product ID>", SYMLINK+="usb_serial_<usb_port_number>"
```
其中,"<Vendor ID>"和"<Product ID>"是USB串口设备的供应商ID和产品ID,可以通过运行以下命令来获取:
```
lsusb
```
然后,"<usb_port_number>"是USB口的序号,你可以将此参数作为Shell脚本的输入参数。
保存并关闭文件后,重启udev服务使新规则生效:
```
sudo service udev restart
```
接下来,我们可以编写一个Shell脚本来实现枚举USB口对应的设备文件的功能。在终端中创建一个名为"usb_serial_enum.sh"的文件,然后使用以下代码填充它:
```bash
#!/bin/bash
usb_port=$1
device_file=$(readlink -f /dev/usb_serial_$usb_port)
if [ -z "$device_file" ]; then
echo "No device file found for USB port $usb_port."
else
echo "Device file for USB port $usb_port: $device_file"
fi
```
这个脚本接受一个参数,即USB口的序号。然后,它将使用"readlink -f"命令来获取对应USB口设备文件的完整路径,并将其赋值给"device_file"变量。如果没有找到设备文件,将输出相应的消息。
保存并关闭文件后,为脚本添加执行权限:
```
chmod +x usb_serial_enum.sh
```
现在,当你需要查找某个USB口所对应的设备文件时,只需要运行以下命令:
```
./usb_serial_enum.sh <usb_port_number>
```
其中,"<usb_port_number>"是USB口的序号。脚本将输出找到的设备文件的路径,或者如果找不到设备文件,将输出相应的消息。
阅读全文