尝试访问启用了分页的VESA LFB时出现页面错误

时间:2016-05-20 17:06:56

标签: operating-system kernel paging osdev vesa

每当我尝试将像素写入VESA模式的LFB时,我就会出现页面错误,其中页面存在且已被读取。我的分页实现来自James Molloy的OS系列。我已经尝试过如下身份映射LFB:

for (unsigned int i = 0xFD000000; i < 0xFE000000; i += 0x1000) {
    page_t* pg = get_page(i, 1, kernel_directory);
    alloc_page(pg, 1, 1);
}

这些是这些功能的原型:

page_t* get_page(uint32_t address, int make, page_directory_t* dir);
void alloc_frame(page_t* page, int is_kernel, int is_writeable);

禁用分页时,我能够毫无问题地将像素写入LFB。我身份错误地映射LFB吗?我需要做些什么才能使身份正确映射吗?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

禁用分页时,您的访问地址是物理地址。但是,启用分页时,您的访问地址是虚拟的,因此您应首先将您将访问的地址区域映射到一个phsyical地址区域。这可以通过 remap_pfn_range nopage 函数实现,如here所述。