我正在尝试将VESA添加到JamesM的教程中,但是当启用分页时,我无法访问LFB。当分页被禁用时,它可以正常工作。我正在使用凝固汽油弹v86黑客切换到VESA模式,它工作得很好,但我不能打印像素,而分页是启用的。通过切换回文本模式,它告诉我lfb位于0xFD000000处,但我也得到一个错误:
为什么?
有人能给我一个关于如何正确映射lfb的示例吗。现在我用这个:

for (i = 0xFD000000; i < 0xFDFFFFFF; i += 0x1000)
        get_page(i, 1, kernel_directory);

我不知道这是不是绘制lfb的正确方法

最佳答案

get_page(i, 1, kernel_directory);

声明为
page_t *get_page(u32int address, int make, page_directory_t *dir);

这意味着它返回的是页面条目上的指针,而不是页面本身。而且,如果需要,它不创建新的页面条目,它只确保特定页面的页表存在。
unsigned int i;
for (i = 0xFD000000; i < 0xFE000000; i += 0x1000)
{
    page_t * pg = get_page(i, 1, kernel_directory); //get pointer on a page entry
    *pg = (page_t)(i | 0x3); //set that page entry to identity-map address stored in `i`, being it present and writable.
}

关于c - OSDev-启用分页时无法访问lfb,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24780997/

10-10 22:10