我是引导加载程序开发的新手。我尝试了一些基本的东西,比如打印字符串“Hello World”之类的东西。我想问一些类似的事情,
是否有可能使用 asm/c/c++/mixed 在引导加载程序上分别初始化多核芯片中的内核?(比如,我想单独初始化第一个核心或单独初始化第三个核心)。
如果可能,请分享代码。
我是引导加载程序开发的新手。我尝试了一些基本的东西,比如打印字符串“Hello World”之类的东西。我想问一些类似的事情,
是否有可能使用 asm/c/c++/mixed 在引导加载程序上分别初始化多核芯片中的内核?(比如,我想单独初始化第一个核心或单独初始化第三个核心)。
如果可能,请分享代码。
是否有可能使用 asm/c/c++/mixed 在引导加载程序上分别初始化多核芯片中的内核?
是的,这完全有可能。
如果可能,请分享代码。
仅仅因为它是可能的并不意味着代码存在;即使代码存在,也不意味着它小到可以粘贴到这里。
现实情况是,要正确地做到这一点(在 80x86 上),您需要:
exitBootServices()
在合适的内存空闲之前调用,并且您可能需要初始化自己的视频输出调用之前的代码,exitBootServices()
以便您可以在不再依赖 UEFI 的控制台支持后显示错误消息等)。当然,所有这些工作量很大,而且大部分工作都是出于多种原因完成的。例如,您可能会找到 APCI(和/或多处理器规范)表并稍后将它们用于 100 种不同的事物,然后您可能会初始化 timer/s 并稍后将它们用于 100 种不同的事物,您可能会初始化物理内存管理器并使用它用于 100 种不同的事情等。这意味着执行这些事情的代码最终会在整个引导过程中传播(一些在引导加载程序中,一些在其他引导代码中,一些在内核中),而且它“几乎永远不会”全部合二为一方便的地方(比如“这是在这个文件中启动其他 CPU 的所有内容”)。