私はこの記事で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です。