OSDev - 无法在启用分页的情况下访问lfb

时间:2014-07-16 12:38:33

标签: c operating-system kernel osdev

我正在尝试将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的正确方法

1 个答案:

答案 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.
}