瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。
【公众号】迅为电子
【粉丝群】824412014(加群获取驱动文档+例程)
【视频观看】嵌入式学习之Linux驱动(第十三篇 输入子系统_全新升级)_基于RK3568
【购买链接】迅为RK3568开发板瑞芯微Linux安卓鸿蒙ARM核心板人工智能AI主板
第154章 固定usb设备的设备节点实验
154.1 需求分析
在Linux系统中,当使用多个USB转串口设备时,经常会遇到插拔USB转串口的顺序变化导致设备节点不稳定的情况。为了解决这个问题,我们可以通过使用udev来固定设备节点,以确保设备节点不受USB转串口插拔顺序的影响。
具体的解决思路是,在学习热插拔的过程中,可以学习并使用udev来自动挂载和卸载U盘,同时也可以利用udev的功能来固定设备节点,以保证设备节点的稳定性。
首先我们来复现下上述所说的问题。如下图所示,首先我们将开发板上的拨码开关设置为向上,此时USB3.0可以接USB设备。J6 usb接口也可以连接USB设备。
开发板烧写buildroot镜像,要确保系统支持ch34x驱动,如果系统不支持的话,需要在内核中进行配置,如下图所示。支持ch34x驱动之后,重新烧写系统镜像。
烧写完成之后,我们在usb3.0接口插入usb转串口模块,打印如下所示:
然后再J6 usb接口插入另一个usb转串口模块,打印如下所示:
经过上面的操作,在usb3.0接口插入的USB转串口模块的设备节点是ttyUSB0,在usbJ6接口插入的USB转串口模块的设备节点是ttyUSB1,但是如果我们先插usbJ6接口的USB转串口模块,再插入usb3.0接口插入的USB转串口模块。
J6 usb接口插入另一个usb转串口模块,打印如下所示:
在usb3.0接口插入usb转串口模块,打印如下所示:
以上实验说明了会遇到插拔USB转串口的顺序变化导致设备节点不稳定的情况。
154.2 解决方案
在开发板的usb3.0接口上插上USB转串口模块,然后输入以下命令,节点根据实际情况进行修改。
udevadm info -a -n /dev/ttyUSB0
udevadm info -a -n /dev/ttyUSB0是一个用于获取有关特定设备节点的详细信息的命令,包括设备的属性、驱动程序、设备路径等。这些命令的参数含义如下所示:
-a:显示与指定设备节点相关联的所有属性。
-n:指定设备节点的路径或名称。
在这种情况下,命令被用于获取/dev/ttyUSB0设备节点的信息。udevadm是一个用于管理Linux中的udev(设备管理器)的命令行工具。它提供了与udev相关的信息和操作。
这个命令的输出可能会包含以下信息
1 设备路径(DEVPATH):设备在系统中的路径,例如/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/ttyUSB0/tty/ttyUSB0。
2 设备节点(DEVNAME):设备在文件系统中的节点,即/dev/ttyUSB0。
3 设备的属性(Device Attributes):包括设备的供应商ID、产品ID、序列号等信息。
4 设备的驱动程序(Device Driver):设备所使用的驱动程序的名称和路径。
5 设备类型(SUBSYSTEM):usb
接下来在开发板的etc/udev/rules.d/目录下,创建一个名为001.rules的规则文件,如下图所示:
在该文件中写入以下规则:
KERNELS==”5-1:1.0”,SUBSYSTEMS==”usb”,MODE:=”0777”,SYMLINK+=”myusb”
SYMLINK是创建一个符号链接,当插入一个USB设备时,udev规则可以自动创建一个符号链接,指向USB设备上的系统路径,从而创建设备节点。
修改完毕之后,重新启动开发板。然后我们首先在usb3.0接口插上usb转串口模块,打印的节点为ttyUSB0,如下所示:
然后在usbJ6接口插上usb转串口模块,打印如下所示:
usb3.0连接的usb转串口模块的设备节点设置了软链接到/dev/myusb,如下图所示:
如果我们先插入usbJ6接口对应节点为ttyUSB0,再插入usb3.0接口对应节点为ttyUSB1,再次查看usb3.0连接的usb转串口模块的设备节点,如下图所示:
由此可见,不管是先插入哪个usb设备,应用程序打开/dev/myusb,就会链接到对应的usb设备上。
至此,固定USB设备的设备节点实验完成。