我试图将VESA添加到JamesM的教程中,但在启用分页时无法访问LFB。当分页被禁用时,它可以正常工作。我正在使用凝固汽油弹v86黑客切换到VESA模式,它工作得很好,但是我不能在启用分页时绘制像素。通过切换回文本模式,它告诉我lfb位于0xFD000000
,但我也得到了一个错误:
Page-fault! (present read-only ) at 0xFD01E078
,为什么会这样?
有人能给我提供一个样本,我如何才能正确地映射lfb。现在我只是用这个:
for (i = 0xFD000000; i < 0xFDFFFFFF; i += 0x1000)
get_page(i, 1, kernel_directory);
我不知道这是不是映射lfb的正确方法
发布于 2014-07-18 06:03:22
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.
}
https://stackoverflow.com/questions/24780997
复制相似问题