c 程序暂停 linux,c – linux中的系统暂停

我在Linux内核中查看reboot.c.

有一个对kernel_halt的调用,它说这个函数会

关闭所有内容并执行干净的系统停止.

干净的系统停止了什么意思?

任何人都可以解释这个停止实际上做了什么吗?

我也想知道syscore什么样的操作被认为是syscore操作?

0 void kernel_halt(void)

161 {

162 kernel_shutdown_prepare(SYSTEM_HALT);

163 migrate_to_reboot_cpu();

164 syscore_shutdown();

165 pr_emerg("System halted\n");

166 kmsg_dump(KMSG_DUMP_HALT);

167 machine_halt();

168 }

解决方法:

syscore_shutdown()将检查所有已注册的syscore操作(drivers/base/syscore.c“执行所有已注册的系统核心关闭回调.”)以进行非NULL操作关闭并执行它们. Syscore操作使用register_syscore_ops注册,大多数驱动程序仅注册syscore_ops的resume和suspend字段.

对于x86 / x86_64,Linux内核版本3.13有关闭字段的部分syscore注册列表:

261 /* Put the i8259A into a quiescent state that

262 * the kernel initialization code can get it

263 * out of.

264 */

265 outb(0xff, PIC_MASTER_IMR); /* mask all of 8259A-1 */

266 outb(0xff, PIC_SLAVE_IMR); /* mask all of 8259A-2 */

2026 * Disable machine checks on suspend and shutdown. We can't really handle

2027 * them later.

....

2037 wrmsrl(MSR_IA32_MCx_CTL(i), 0);

3)kernel/irq/generic-chip.c irq_gc_shutdown:对于gc_list中的每个元素,尝试运行ct-> chip.irq_pm_shutdown(data);; “@irq_pm_shutdown:每个芯片关闭一次核心代码调用的函数”(description)

84 static void ledtrig_cpu_syscore_shutdown(void)

85 {

86 ledtrig_cpu(CPU_LED_HALTED);

87 }

...

61 case CPU_LED_HALTED:

62 /* Will turn the LED off */

63 led_trigger_event(trig->_trig, LED_OFF);

What does a clean system halt mean?

干净利落地卸下所有硬件,关闭所有硬件.

I am also wondering about syscore what kind of operations are considered as syscore operation?

Syscore用于注册某些函数以在挂起/恢复和关闭时工作.极少数驱动程序注册syscore关闭虚拟功能,例如:关闭PC机箱LED(not keyboard’s leds关闭,禁用中断,禁用机器检查(我认为像ECC错误,因为没有人会将它们报告给系统日志),… .

Can any one explain what this halt actually does?

此暂停:切换到0 CPU内核,因为只有它可以重新启动或关闭,运行所有已注册的预关闭处理程序,然后打印“系统暂停”,并要求硬件执行实际的断电.

162 kernel_shutdown_prepare(SYSTEM_HALT);

163 migrate_to_reboot_cpu();

164 syscore_shutdown();

165 pr_emerg("System halted\n");

166 kmsg_dump(KMSG_DUMP_HALT);

167 machine_halt();

标签:c-3,linux,kernel

来源: https://codeday.me/bug/20190703/1364620.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值