udev规则创建USB设备挂载点映射 

   在机器人等ROS开发过程中,功能需求越来越复杂,会用到很多USB设备。例如外接两个同样芯片的USB转串口芯片,一个可能imu设备,一个可能是stm32串口通讯设备等,那么如此多的USB设备在linux中的挂载点就会多起来,而且慢慢的也会变得较为混乱,导致我们无法分清楚哪一个设备挂载点对应哪一个设备,而且即使我们在本次开机中分清楚了,那么在下次linux系统开机后,USB设备的挂载点也会随着系统挂载设备顺序的不同而导致设备挂载点发生变化。

        udev 是 Linux 内核的设备管理器。总的来说,它取代了 devfs 和 hotplug,负责管理 /dev 中的设备节点。同时,udev 也处理所有用户空间发生的硬件添加、删除事件,以及某些特定设备所需的固件加载。与传统的顺序加载相比,udev 通过并行加载内核模块提供了潜在的性能优势。异步加载模块的方式也有一个天生的缺点:无法保证每次加载模块的顺序,如果机器具有多个块设备,那么它们的设备节点可能随机变化。

    udev 规则以管理员身份编写并保存在 /etc/udev/rules.d/ 目录,其文件名必须以 .rules 结尾,各种软件包提供的规则文件位于 /lib/udev/rules.d/。如果 /usr/lib 和 /etc 这两个目录中有同名文件,则 /etc 中的文件优.

1、操作

a.使用lsusb 显示本机的USB设备列表


b.udevadm info --attribute-walk --name=/dev/ttyUSB0 | grep KERNELS


c.编写rules文件,如tty_stm32.rules 文件:
KERNELS == "1-2.1" ,KERNEL == "ttyUSB*" , ATTRS{idVendor} == "1a86" , ATTRS{idProduct} == "7523" , MODE: = "0777" , SYMLINK += "tty_stm32"


d.编写创建和删除脚本

create_udev_rules.sh脚本内容为:

#!/bin/bash

echo "remap the device serial port(ttyUSBX) to tty_stm32.rules"
echo "rplidar usb connection as /dev/tty_stm32, check it using the command : ls -l /dev|grep ttyUSB"
echo "start copy tty_stm32.rules to /etc/udev/rules.d/"
sudo cp tty_stm32.rules /etc/udev/rules.d
echo " "
echo "Restarting udev"
echo ""
sudo service udev reload
sudo service udev restart
echo "finish "


delete_udev_rules.sh脚本内容为:

#!/bin/bash

echo "delete remap the device serial port(ttyUSBX) to rplidar"
echo "sudo rm /etc/udev/rules.d/tty_stm32.rules"
sudo rm /etc/udev/rules.d/tty_stm32.rules
echo " "
echo "Restarting udev"
echo ""
sudo service udev reload
sudo service udev restart
echo "finish delete"


e.执行脚本

# sudo chmod + x * .sh
# . / create_udev_rules.sh
然后重新拔插USB设备接口即可。



Logo

更多推荐