我使用了这篇文章中 galets 提出的解决方案来添加我自己的 udev 规则: 如何在启动服务之前等待 /dev/video0
当 Linux 启动时,我的设备会被检测到,并且规则会创建一个sys-bus-pci-drivers-mydevice.device
单元。我创建了一个包含BindsTo=sys-bus-pci-drivers-mydevice.device
和 的服务Requires=sys-bus-pci-drivers-mydevice.device
,并且该服务仅在检测到我的硬件并加载其驱动程序后才加载。完美的!
我的问题是,每当我执行任何 systemctl 命令来管理任何服务时,我的设备单元都会进入非活动(死亡)状态。例如:
systemctl daemon-reload
systemctl unmask whatever.service
一旦执行其中任何一个,如果我执行systemctl status sys-bus-pci-drivers-mydevice.device
,它会报告:
* sys-bus-pci-drivers-mydevice.device
Loaded: loaded
Active: inactive (dead)
Jan 25 09:25:41 FLABADO systemd[1]: Found device /sys/bus/pci/drivers/mydevice.
此时,如果我尝试重新启动任何包含Requires=
依赖项的服务,它们就会失败。我必须重新启动系统才能恢复。
我确认该设备仍然存在,其驱动程序处于活动状态,并且我执行的使用硬件的命令均能完美运行。
我想知道是否有人遇到过这种行为,如果是的话,有没有办法避免或恢复,而无需重新启动?
我正在使用 Yocto 2.1 (Krogoth) 来构建我的 Linux 发行版。内核版本为 4.4.26-yocto-standard。