当前位置: 技术问答>linux和unix
我想咨询操作系统关机的最后一步是怎样完成的。想知道细节!
来源: 互联网 发布时间:2017-05-22
本文导语: 我写了个简单的启动boot 和 kernel 我想在kernel中加入关机选项!最后但是不知道怎样实现! 关机最后的一个步骤是通过调用bios的服务来实现的吗? 还是。。。。 | 用KGDB内核调试很容易得到x86上关机时...
我写了个简单的启动boot 和 kernel 我想在kernel中加入关机选项!最后但是不知道怎样实现!
关机最后的一个步骤是通过调用bios的服务来实现的吗?
还是。。。。
关机最后的一个步骤是通过调用bios的服务来实现的吗?
还是。。。。
|
用KGDB内核调试很容易得到x86上关机时的 Trace Stack:
[acpi_hw_legacy_sleep (sleep_state=) at drivers/acpi/acpica/hwsleep.c]
...
/* Write #2: Write both SLP_TYP + SLP_EN */
status = acpi_hw_write_pm1_control(pm1a_control, pm1b_control); // 写ACPI相关的寄存器, 到这就关机了
(gdb) bt
#0 acpi_hw_legacy_sleep (sleep_state=) at drivers/acpi/acpica/hwsleep.c:163
#1 0xc070cb1e in acpi_hw_sleep_dispatch (sleep_state=sleep_state@entry=5 '05', function_id=function_id@entry=0) at drivers/acpi/acpica/hwxfsleep.c:256
#2 0xc070ccaf in acpi_enter_sleep_state (sleep_state=sleep_state@entry=5 '05') at drivers/acpi/acpica/hwxfsleep.c:377
#3 0xc06f3dec in acpi_power_off () at drivers/acpi/sleep.c:798
#4 0xc0429c2d in native_machine_power_off () at arch/x86/kernel/reboot.c:626
#5 0xc0429dfe in machine_power_off () at arch/x86/kernel/reboot.c:645
#6 0xc046a615 in kernel_power_off () at kernel/reboot.c:185
#7 0xc046a790 in SYSC_reboot (magic1=-18751827, magic2=, cmd=, arg=0xb775fd78) at kernel/reboot.c:253
#8 0xc046a8cf in SyS_reboot (magic1=-18751827, magic2=672274793, cmd=1126301404, arg=-1217004168) at kernel/reboot.c:199
[acpi_hw_legacy_sleep (sleep_state=) at drivers/acpi/acpica/hwsleep.c]
...
/* Write #2: Write both SLP_TYP + SLP_EN */
status = acpi_hw_write_pm1_control(pm1a_control, pm1b_control); // 写ACPI相关的寄存器, 到这就关机了
(gdb) bt
#0 acpi_hw_legacy_sleep (sleep_state=) at drivers/acpi/acpica/hwsleep.c:163
#1 0xc070cb1e in acpi_hw_sleep_dispatch (sleep_state=sleep_state@entry=5 '05', function_id=function_id@entry=0) at drivers/acpi/acpica/hwxfsleep.c:256
#2 0xc070ccaf in acpi_enter_sleep_state (sleep_state=sleep_state@entry=5 '05') at drivers/acpi/acpica/hwxfsleep.c:377
#3 0xc06f3dec in acpi_power_off () at drivers/acpi/sleep.c:798
#4 0xc0429c2d in native_machine_power_off () at arch/x86/kernel/reboot.c:626
#5 0xc0429dfe in machine_power_off () at arch/x86/kernel/reboot.c:645
#6 0xc046a615 in kernel_power_off () at kernel/reboot.c:185
#7 0xc046a790 in SYSC_reboot (magic1=-18751827, magic2=, cmd=, arg=0xb775fd78) at kernel/reboot.c:253
#8 0xc046a8cf in SyS_reboot (magic1=-18751827, magic2=672274793, cmd=1126301404, arg=-1217004168) at kernel/reboot.c:199
|
这个应该完全是平台相关的。在x86上有多种方法,你可以在Linux kernel里找找,例如native_machine_power_off()函数的实现。一般用的应该是ACPI接口。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。