Которые функционируют в ядре Linux, делают включение от действия?

[1120839] "Есть ли другие команды, которые печатают только переменные оболочки, без функций?"

В man bash, в разделе SHELL BUILTIN COMMANDS (в разделе set) сказано: "Примечание: [1121227]()[1121228] синтаксис порождает подоболочку, если вам не нравится форкинг, просто используйте более подробный вариант

2
22.10.2014, 19:55
2 ответа

Реальный код ядра зависит от архива вашей системы. Для x86 систем они расположены в arch/x86/kernel/reboot.c

Halt остановит машину и оставит её включённой. Таким образом, она просто останавливает ядро, но обычно не выключает его.

static void native_machine_halt(void)
{
  /* Stop other cpus and apics */
  machine_shutdown();

  tboot_shutdown(TB_SHUTDOWN_HALT);

  stop_this_cpu(NULL);
}

Хотя power_off также отключает электрический источник из APM / ACPI pm_power_off()

static void native_machine_power_off(void)
{
  if (pm_power_off) {
    if (!reboot_force)
      machine_shutdown();
    pm_power_off();
  }
  /* A fallback in case there is no PM info available */
  tboot_shutdown(TB_SHUTDOWN_HALT);
}

machine_shutdown() - это бесконечный цикл

tboot_shutdown() (arch/x86/kernel/tboot. c)

stop_this_cpu(NULL) (arch/x86/kernel/process.c) отключает IRQ процессора, переводит процессор в автономный режим,

pm_power_off() (arch/x86/kernel/apm_32.c) является указателем на функцию apm_power_off()

Как видите, все задания зависят от архива. Во всех случаях она выполняется вызовами ASM.

Для apm_power_off() вызывается Bios с кодом APT_STATE_OFF (0x0003).

apm_bios_call_simple(APM_FUNC_SET_STATE, APM_DEVICE_ALL, APM_STATE_OFF, eax, err);

Для native_halt() (arch/x86/include/asm/irqflags.h) используются эти вызовы :

asm volatile("hlt": : :"memory");

Choose your poison :)

.
3
27.01.2020, 22:13

Традиционно программное обеспечение может контролировать уровень мощности, передавая команды на оболочку или подставку. Вы должны быть придным пользователям при использовании этого подхода и дайте им время для правильной реагирования. В зависимости от вашей системы init, вы передаете систему INIT на уровень. Ниже приведена таблица уровней

+-------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------+
| Sysvinit Runlevel |                    Systemd Target                     |                                            Notes                                             |
+-------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------+
| 0                 | runlevel0.target, poweroff.target                     | Halt the system.                                                                             |
| 1, s, single      | runlevel1.target, rescue.target                       | Single user mode.                                                                            |
| 2, 4              | runlevel2.target, runlevel4.target, multi-user.target | User-defined/Site-specific runlevels. By default, identical to 3.                            |
| 3                 | runlevel3.target, multi-user.target                   | Multi-user, non-graphical. Users can usually login via multiple consoles or via the network. |
| 5                 | runlevel5.target, graphical.target                    | Multi-user, graphical. Usually has all the services of runlevel 3 plus a graphical login.    |
| 6                 | runlevel6.target, reboot.target                       | Reboot                                                                                       |
| emergency         | emergency.target                                      | Emergency shell                                                                              |
+-------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------+

Причина, по которой я говорю, чтобы быть хорошим, это потому, что вы не можете сделать это без предупреждения. Если пользователь работает над многопользовательской системой, и другой пользователь с надлежащими разрешениями использует ваше программное обеспечение, рабочая работа пользователя будет вынуждена от системы (и, следовательно, потерять всю работу), пока она не перезагружается и т. Д.

, как Goldilocks Государства, это самый близкий, который вы получите метод пользователя. Весь другой код хранится в ядре, который я не могу найти в данный момент, но вот документ , связанный с управлением питанием водителя , в архиве Arnux Archive

-1
27.01.2020, 22:13

Теги

Похожие вопросы