LINUX.ORG.RU

Как из kernelspace сделать shutdown?


0

0

Есть драйвер, работающий в kernelspace. При определенном событии он должен произвести корректное выключение устройства, т.е. разослать всем процессам сигналы SIGTERM и SIGKILL, сбросить буфера на диск и т.п. Вообщем тоже самое, как выполнить poweroff из терминала. Как это проще сделать?


Посмотри как работает telinit, вероятно поможет.

anonymous
()

Как это проще сделать?

ИМХО - сделать например файл символьного устройства и определить для него одну операцию poll. В userspace запустить программу, которая постоянно поллит этот файл и если есть POLLIN - вызывает system(«shutdown») или system(«poweroff»).

tim239 ★★
()

Я думаю можно вызвать sys_reboot из ядра с флагом LINUX_REBOOT_CMD_POWER_OFF, но вроде как это будет грязным хаком.

kranky ★★★★★
()

Посмотри, как сделан ctrl+alt+del хендлер в ядре, по аналогии можно и сделать. Например сконфигурить на CAD не ребут а шатдаун (раньше это правкой inittab-а делалось, сейчас хз), и сэмулировать CAD из ведр-спейса вызовом функции-обработчика.

a0
()
Ответ на: комментарий от a0

Вообще кернел при этом, при CAD- шлет какой-то сигнал процессу, чей пид прописан в /proc/sys/kernel/cad_pid, по дефолту это init, и он соответственно обрабатывает все эти события.

a0
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.