我的目标是让我自己的内核启动一个应用程序 cpu。它使用与linux 内核相同的机制:
- 发送断言和电平触发的 init-IPI
- 等待...
- 发送置低和电平触发的 init-IPI
- 等待...
- 最多发送两个带有向量号的启动 IPI
(0x40000 >> 12)
(应用处理器的入口代码就在那里)
目前我只是对让它与 QEMU 一起工作感兴趣。不幸的是,0x40000
应用程序 cpu 并没有跳转到,而是0x0
将cs
寄存器设置为0x4000
。(我用gdb检查过)。
英特尔多处理器规范(B.4.2) 解释说,如果目标处理器在 RESET 或 INIT 后立即停止,我注意到的行为是有效的。但这不应该也适用于linux内核的代码吗?它在 init-IPI 之后发送 startup-IPI。还是我误解了规范?
我该怎么做才能让应用程序处理器跳转到而0x000VV000
不是寄存器设置为?我真的看不到,linux 在哪里做了改变行为的事情。0x0
cs
0xVV00