本文以 飞凌嵌入式 AM335x平台为例进行讲解。 在使用 4G模块的时候, 在 4G 信号不太理想的环境下需要检测网络,当设备断网后重启 4G模块重新拨号联网。但系统长期运行后,重启模块 会导致在 /dev 目录下的4G模块生成的设备节点ttyusb序号改变,导致应用程序拨号时出错。我们可以修改 udev规则文件解决这个问题。 udev 的规则文件里定义了很多变量,如KERNELS ,SUBSYSTEMS ,DRIVERS 等等,我们可以用这些变量中的几个来确定我们的设备,并修改我们其中的NAME 和SYMLINK 变量,这样我们就可以改变我们的设备在/dev 目录下的名字和链接了。 使用 udevadm info命令可以查询udev数据库中的设备信息。也可以从sysfs文件系统中查询到设备的属性以辅助创建udev规则。
udevadm info -q path -n /dev/ttyUSB0 可以查看ttyUSB0设备的系统设备路径
root@ok335x:~# udevadm info -q path -n /dev/ttyUSB0
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0) 查询/dev/ttyUSB0设备,可以打印出设备总线的所有位置的父子关系,如下所示:root@am335x:~# udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB4)
Udevadm info starts with the device specified by the devpath and then
looking at device '/devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1/1-1/1-1.2/1-1.2:2.2/ttyUSB0':
looking at parent device '/devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1/1-1/1-1.2/1-1.2:2.2':
looking at parent device '/devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1/1-1/1-1.2':
looking at parent device '/devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1/1-1':
looking at parent device '/devices/platform/omap/musb-ti81xx/musb-hdrc.1/usb1':
looking at parent device '/devices/platform/omap/musb-ti81xx/musb-hdrc.1':
looking at parent device '/devices/platform/omap/musb-ti81xx':
looking at parent device '/devices/platform/omap':
looking at parent device '/devices/platform':
我们查看每个USB串口设备节点的信息,相应设备信息如下:
root@am335x:~# udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB1)
root@am335x:~# udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB2)
root@am335x:~# udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB3)
root@am335x:~# udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB4)
我们通过观察各个设备节点的信息,返现ATTRS{interface}
可以区别各个设备节点
在
/etc/udev/rules.d/local.rules 中加入以下内容。将ttyUSB0-4 做相应的软链接为ttyusb0-4 我们重启系统 输入查看设备节点
通过查看 ,完成了设备节点的软链接
如果我们在具体应用中 通过 /dev/ttyusb2 进行拨号上网。在实际长期运行过程中,我们的 4g 网络守护进程检测到 4g 离网时 ,会重启 4g 模块,有可能导致 ttyUSB 序号发生变化,如下
通过查看 /dev/ttyUSB10 的设备信息与前期的设备信息对比发现,多次反复 4g 模块重启,属性为 ATTRS{interface}=="Huawei Mobile Connect - Pcui" 的接口在 /dev 目录下的设备节点由 ttyUSB2 变为 ttyUSB10 ,如下图所示:
如果我们的应用还继续使用 ttyUSB2 ,肯定会出问题的,但是我们使用 USB 串口所做的软链接 ttyusb2 ,就不会发生问题了。 原文链接: |
|
来自: 阿晚pk0eu2tvtc > 《待分类》