PTE没有被尊重

时间:2014-01-16 22:06:12

标签: kernel

我正在尝试启动Apple的XNU内核(sources)的自定义分支。内核是用汇编程序,C和C ++组合编写的。我目前正在尝试_start函数跳转到vstart,该函数由汇编程序执行,因为它执行了低级操作,用{C}编写。

我在地址0x10BFF8上遇到页面错误,由于IDT尚未设置,因此会升级为三重错误。现在,问题是,我有2048个PTD条目,每个条目映射2MB;第0个从内存底部(地址零)延伸到地址0x200000,其中包括0x10BFF8

Here are the page tables I’m using。为什么BootPTD数组中的第0页表不被尊重?我确定它只是 被忽略的第0页表。在三重故障时,寄存器转储表示指令指针指向地址0x2D15C0,即vstart的地址。该地址属于第一个PTD的范围。如果没有PTD被尊重,我会改为在该地址上出现页面错误。

(请注意,尽管数组名为BootPDT,但每个条目中都设置了PS位,告诉CPU每个条目映射2MB内存,而不是指向PTE映射4K内存。)

0 个答案:

没有答案