Linux内核中的受保护模式调用、BIOS与Seq文件机制解析
1. 受保护模式调用
在探究内核如何进行受保护模式BIOS调用时,我们以高级电源管理(APM)的实现为例。APM是一种BIOS接口规范,如今已接近淘汰。BIOS中定义了电源管理策略,有一个名为kapmd的内核线程每秒对其进行轮询,以确定操作流程,而这个轮询过程是通过受保护模式BIOS调用完成的。
要进行受保护模式BIOS调用,kapmd需要知道受保护模式入口段地址和偏移量。这些信息是在启动时通过 int 0x15 、功能号为 0x5303 的BIOS服务从实模式内核获取的。
实际的受保护模式BIOS调用是通过 apm_bios_call_simple_asm() 函数中的内联汇编实现的,该函数定义在 include/asm-x86/mach-default/apm.h 中:
__asm__ __volatile__(APM_DO_ZERO_SEGS
"pushl %%edi\n\t"
"pushl %%ebp\n\t"
"lcall *%%cs:apm_bios_entry\n\t"
"setc %%bl\n\t"
"popl %%ebp\n\t"
"popl %%edi\n\t"
APM_DO_POP_SEGS
: "=a" (*eax), "=b" (error), "=c" (cx), "=d" (dx),
"=S" (si)
超级会员免费看
订阅专栏 解锁全文


被折叠的 条评论
为什么被折叠?



