Как systemd получает сигнал отключения питания?

#linux #systemd

#linux #systemd

Вопрос:

Systemd logind может обрабатывать кнопку питания для завершения работы или перехода в спящий режим.

https://superuser.com/questions/699905/change-behavior-of-linux-power-button/699925 (см . Ответ Сэма Хейнса )

При коротком нажатии кнопки питания systemd инициирует выключение.

Вот мой вопрос, я не могу найти исходный код, в котором запускается завершение работы.

Вот systemd github:

https://github.com/systemd/systemd

Я думаю, что BIOS должен сначала узнать, что пользователь нажимает кнопку питания, но какой сигнал? какой переход, чтобы systemd также знал, что нажата кнопка питания?

Я вижу, что драйвер ядра acpi также имеет кнопку.c, кто на самом деле обрабатывает кнопку? кнопка acpi.c? systemd или acpid?

https://github.com/torvalds/linux/tree/defb53a7c790f9e37a765de8a5d830ed15e2055b/drivers/acpi

Комментарии:

1. Начните с HandlePowerKey опции и посмотрите, как она анализируется в исходном коде, затем проложите путь вниз, чтобы увидеть, на что это влияет, вы получите получение события. systemd это большие источники, вы можете увидеть, что udev и apicd имеет.

2. В современных системах кнопка включения — это просто программная кнопка, похожая на любую другую клавишу на клавиатуре (что касается пользовательского пространства). Таким образом, он просто сгенерирует событие «input» на одном из устройств «/ dev / input/ event *».

3. итак, systemd и acpid просто считывают событие из /dev/input/event * ?

Ответ №1:

Я думаю, что BIOS должен сначала узнать, что пользователь нажимает кнопку питания, но какой сигнал? какой переход, чтобы systemd также знал, что нажата кнопка питания? << Это зависит от дизайна кнопки питания, это может быть подключение super IO / EC или PCH.

Комментарии:

1. сигнал здесь я имею в виду программный сигнал.