是bootloader开发的新手。我尝试了一些基本的东西,比如打印字符串“Hello World”之类的东西。我想问一些类似的事情,
是否有可能使用asm / c / c ++ / mixed在引导加载程序中单独初始化多核芯片中的内核? (比如,我想单独初始化第一个核心或单独初始化第三个核心)。
如果可能,请分享代码。
答案 0 :(得分:3)
是否有可能使用asm / c / c ++ / mixed在引导加载程序上分别初始化多核芯片中的内核?
是的,完全有可能。
如果可能,请共享代码。
仅仅因为可能并不意味着代码存在;即使代码存在,也并不意味着它足够小可以粘贴到此处。
现实是要正确执行此操作(在80x86上),您需要:
exitBootServices()
,并且可能需要在调用exitBootServices()
之前初始化您自己的视频输出代码,以便在您不再依赖UEFI的控制台支持后可以显示错误消息等。当然,所有这一切都是很多工作,其中大部分是出于多种原因完成的工作。例如,您可能会找到APCI(和/或多处理器规范)表,以后将它们用于100种不同的事物,然后可能初始化计时器,然后将它们用于100种不同的事物,您可能会初始化物理内存管理器并使用它用于100种不同的事物,等等。这意味着完成这些任务的代码最终会散布在整个引导过程中(有些在引导加载程序中,有些在其他引导代码中,有些在内核中),并且几乎“永远”方便的位置(例如“在此文件中用于启动其他CPU的所有东西”)。
答案 1 :(得分:0)
看看Pure64 - 代码非常简洁明了。事实上它完全符合你的要求!