実際の再起動中にudevルールが決して実行されないのに、「udevadminテスト」の結果がまだまともなのはなぜですか?

実際の再起動中にudevルールが決して実行されないのに、「udevadminテスト」の結果がまだまともなのはなぜですか?

私の例のルールは次のとおりです。

cat /etc/udev/rules.d/55-battery-charge.rules 
ACTION=="add|change", KERNEL=="BAT*", SUBSYSTEM=="power_supply", ATTR{charge_control_end_threshold}="60"

udevadm test /sys/class/power_supply/BAT0うまく動作します:

BAT0: /etc/udev/rules.d/55-battery-charge.rules:1 ATTR '/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:20/PNP0C09:01/PNP0C0A:03/power_supply/BAT0/charge_control_end_threshold' writing '60'
BAT0: /etc/udev/rules.d/55-battery-charge.rules:1 Failed to write ATTR{/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:20/PNP0C09:01/PNP0C0A:03/power_supply/BAT0/charge_control_end_threshold}, ignoring: Permission denied
DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:20/PNP0C09:01/PNP0C0A:03/power_supply/BAT0
...
ACTION=add
SUBSYSTEM=power_supply
USEC_INITIALIZED=2126021481
...

実際に起動すると、udevデバッグログにBAT0のトリガールールは表示されませんでした。

journalctl -b 0 -u systemd-udevd | grep BAT0
systemd-udevd[591]: BAT0: Device (SEQNUM=4977, ACTION=add) is queued
systemd-udevd[591]: BAT0: sd-device-monitor: Passed 734 byte to netlink monitor
systemd-udevd[668]: BAT0: Processing device (SEQNUM=4977, ACTION=add)
systemd-udevd[668]: BAT0: Device (SEQNUM=4977, ACTION=add) processed
systemd-udevd[668]: BAT0: sd-device-monitor: Passed 734 byte to netlink monitor

initramfsを実行し、起動時にルールがロードされました。

systemd-udevd[591]: Reading rules file: /etc/udev/rules.d/55-battery-charge.rules

奇妙なことは、削除するとSUBSYSTEM=="power_supply"途中で動作することです。

systemd-udevd[589]: BAT0: Device (SEQNUM=4976, ACTION=add) is queued
systemd-udevd[589]: BAT0: sd-device-monitor: Passed 735 byte to netlink monitor
systemd-udevd[667]: BAT0: Processing device (SEQNUM=4976, ACTION=add)
systemd-udevd[667]: BAT0: /etc/udev/rules.d/55-battery-charge.rules:1 ATTR '/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:20/PNP0C09:01/PNP0C0A:03/power_supply/BAT0/charge_control_end_threshold' writing '60'
systemd-udevd[667]: BAT0: /etc/udev/rules.d/55-battery-charge.rules:1 Failed to write ATTR{/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:20/PNP0C09:01/PNP0C0A:03/power_supply/BAT0/charge_control_end_threshold}, ignoring: No such file or directory
systemd-udevd[667]: BAT0: Device (SEQNUM=4976, ACTION=add) processed
systemd-udevd[667]: BAT0: sd-device-monitor: Passed 735 byte to netlink monitor

BAT0が追加されたときにCharge_control_end_threshold sysfsがまだ存在していないようです。しきい値ファイルが公開されている場合にのみ発生するかどうかを確認するにはどうすればよいですか?

うーん…今理解しています。他のカーネルモジュールは実際にBAT0の後にそのパラメータを公開します。

ベストアンサー1

BAT0 などのデバイスは、起動プロセスの初期に追加されます。その後、一部の他のカーネルモジュールは、異なるファイル/属性をBAT0のsysfsに公開することがあります。したがって、ルールが次に基づいている場合、これらの追加プロパティを設定するルールは失敗する可能性があります。ACTION==add

おすすめ記事