Как отключить 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 - мне придется прочитать об этом.

Ответы на вопрос(2)

Ваш ответ на вопрос