首先,标题说是探讨,其实就是一个简单的介绍。其中内核模块呢,是本人自己写的一个纯粹做demo使用的程序,这个模块通过ACPI来获得系统中处理器的信息(数量及ID),当然Linux内核源码中有一个ACPI driver的实现,纯专业级的,权威性自然不容置疑。不过我的这个小模块可以更容易让你了解ACPI这玩意到底是什么,都能做些什么,因为它的功能非常简单,我把一些防御性代码及考虑最大平台兼容性的因素都剔除掉了,而且只是涉及到ACPI中一些table的操作,所以非常直白。我建议对ACPI感兴趣的同学可以把该模块源码下去自己编译运行一下,我不保证它在所有平台上都能编译通过并正确执行,因为我手边测试平台有限,在两台intel i7和AMD的机器上都能正确运行。对内核源码的版本要求是3.x,更老的版本也可以,但不保证编译可以通过,因为我同事最近在2.6.18内核版本上做东西,我的模块在他那里编译不通过。不过即便有问题,大家也可以自己试着去解决。
ACPI的全称是Advanced Configuration and Power Interface,其spec可以在网上免费下到,我手边目前的版本是4.0a,ACPI可以认为是BIOS代码的一部分(大家有兴趣可以去查看一下BIOS engineer类职位的JD,ACPI是必定会出现的一个关键词),但我个人觉得怎么区分ACPI与BIOS的关系其实并没多少实质性的意义,因为我们的显卡上还有VBIOS(Video BIOS),我倾向于把这些东西笼统地称为Firmware。
ACPI的规范spec很大很暴力,其实我也没有完全看完它,毕竟我也不是BIOS工程师,不过相关领域的技术大体都是相同的,不用看完也可以猜出其会有哪些功能。