目录[-]


1、为什么串口设备、USB设备有绑定固定名称的需求

• /dev 目录下原有挂在静态设备太多

在/dev目录下存在的静态设备关联文件过于多,并且在系统启动时无法得知哪些设备是真实存在的。

• Linux下设备文件与实际硬件设备的映射关系不是确定的

比如系统中有两个USB转串口设备,每次开机启动时,由于加载顺序存在一定的不确定性,此时则系统中存在的设备文件 /dev/ttyUSB0 与 /dev/ttyUSB1 对应的硬件设备可能是不同的。


2、udev的使用

udev是Linux2.6内核之后默认的设备管理工具,其目标就是解决上面的两个问题,并且以守护进程的形式运行。udev和文件系统是独立的,可以让用户定制自己的系统,比如创建设备连接符,修改设备名称,更改设备属组,权限等。udev的配置文件处于 /etc/udev/udev.conf 目录下,按照配置文件在 /etc/udev/rules.d 目录下添加对应的rule文件即可。


3、设置 usb转串口设备 的例子

KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="imu"

• KERNEL 内核设备的名称,例如 ttyUSB* ,sda,等,是处于/dev 目录下的设备名称

每台设备都有一个idVendor:厂家标示 和 idProduct:产品标示。其中厂家标示是供应商ID,是唯一的,产品标示则是厂家自定义的ID。

通过 lsusb 可以查看USB的设备信息。

• MODE 

赋予设备权限。采用 0777 读写权限即可。

• SYMLINK

SYMLINK为 /dev/下的设备文件产生符号链接。因为 udev 只能为某个设备产生一个设备文件,所以为了不覆盖系统默认的 udev 规则产生的设备文件,推荐使用符号链接。


4、cannot open /dev/ttyUSB0 或 cannot open /dev/ttyS0

原因是因为 tty 属于 dialout 组别,可以先查看下当前用户所属的组别。比图用户名是ubuntu,则可以按下以下指令查看:

groups ubuntu

如果当前用户没有隶属于dialout,则将该用户加进去dialout组别。

sudo gpasswd --add ubuntu dialout