我正在尝试将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/