我正在尝试将VESA添加到JamesM的教程中,但是在启用分页时我无法访问LFB。禁用分页时,它可以正常工作。我正在使用napalms v86 hack来切换到VESA模式,它工作得很好,但是在启用分页时我无法绘制像素。通过切换回textmode,它告诉我lfb位于0xFD000000
,但我也收到错误:
Page-fault! (present read-only ) at 0xFD01E078
为什么会这样?
有人可以向我提供一个关于如何正确映射lfb的示例。目前我只是使用它:
for (i = 0xFD000000; i < 0xFDFFFFFF; i += 0x1000)
get_page(i, 1, kernel_directory);
我不知道这是否是映射lfb的正确方法
答案 0 :(得分:1)
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.
}