Как отключить Linux при запуске
Я успешно использовалpm_power_off
указатель на функцию, чтобы моя пользовательская плата Linux вызывала свой чип управления питанием через i2c (чтобы выключить питание).
Я бы хотел линуксhalt
Команда на отключение питания тоже.
Как мне этого добиться?
(ARM) код дляmachine_halt
не имеет указателя, аналогичногоmachine_power_off
«spm_power_off
.
арка / рука / ядро / reboot.c:
/*
* Halting simply requires that the secondary CPUs stop performing any
* activity (executing tasks, handling interrupts). smp_send_stop()
* achieves this.
*/
void machine_halt(void)
{
local_irq_disable();
smp_send_stop();
local_irq_disable();
while (1);
}
/*
* Power-off simply requires that the secondary CPUs stop performing any
* activity (executing tasks, handling interrupts). smp_send_stop()
* achieves this. When the system power is turned off, it will take all CPUs
* with it.
*/
void machine_power_off(void)
{
local_irq_disable();
smp_send_stop();
if (pm_power_off)
pm_power_off();
}
Я мог бы просто взломатьmachine_halt
, но я бы хотел сделать это "правильно", если это возможно.
Я что-то пропустил (возможно, в пространстве пользователя), что может вызватьhalt
Команда выполнить «выключение»?
Обновление: спасибо за ответ и все ваши комментарии, они помогли мне понять, что является актуальной проблемой.
Моя проблема:
У меня есть входной край, доступный для пользовательского блока управления питанием. Думайте об этом как о кнопке запуска, без функции остановки или сброса. У меня есть полный контроль над кодом PMU (это ATMEGA, работающий как ведомый i2c).
Если ядро Linux работает, я хочу, чтобы преимущество игнорировалось.Если процессор выключен, я хочу, чтобы край включал процессор.Если ядро Linux остановлено, я хочу, чтобы край перезагрузил процессор.Случай 1 легкий, ничего не делать.
Случай 2 был прост, определитеpm_power_off
в моем драйвере, чтобы отправить сообщение i2c в PMU. К счастью, подсистема i2c все еще находится в рабочем состоянии, когдаpm_power_off
называется.
Случай 3 - проблема - я искалpm_halt
определить, чтобы отправить сообщение i2c в PMU.
Возможно, есть другой способ, как 0andriy комментарии?
Есть ли в ядре место для продолжения подталкивания PMU с сообщениями i2c с частотой несколько Гц,если машинаhalt
ред?
Ответ на:https://unix.stackexchange.com/a/42576/17288 гласит:
«* В наши дни остановка достаточно умна, чтобы автоматически вызывать poweroff, если ACPI включен. Фактически, теперь они функционально эквивалентны»
Возможно, есть какой-то способ предоставить или подключиться к ACPI - мне придется прочитать об этом.