Kernel 不被尊重

Kernel 不被尊重,kernel,Kernel,我正在尝试启动苹果XNU内核的定制分叉。内核是用汇编语言、C语言和C++语言编写的。我目前正试图从_start函数跳转到vstart,后者是用汇编语言编写的,因为它执行的是低级操作 我在地址0x10BFF8上遇到一个页面错误,它升级为三重错误,因为IDT尚未设置。现在,问题是,我有2048个PTD条目,每个映射2MB;第0个从内存地址0的底部延伸到地址0x200000,其中包括0x10BFF8 。为什么BootPTD数组中的第0页表没有得到尊重?我确信只有第0页的表格被忽略了。发生三重故障时,寄

我正在尝试启动苹果XNU内核的定制分叉。内核是用汇编语言、C语言和C++语言编写的。我目前正试图从_start函数跳转到vstart,后者是用汇编语言编写的,因为它执行的是低级操作

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

。为什么BootPTD数组中的第0页表没有得到尊重?我确信只有第0页的表格被忽略了。发生三重故障时,寄存器转储表示指令指针指向地址0x2D15C0,即vstart的地址。此地址属于第一个PTD的范围。如果没有一个PTD被尊重,我会改为在那个地址上写错误


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

Whoa!一点背景资料会很有帮助。语言,内核,你想做什么。如果你能做到的话,我会先用一个4k页面和一条汇编指令跳转到一个大的数字地址,目的是检查是否有任何页面表正在加载。