>每当我尝试将像素写入 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 是否正确?我还需要做些什么来正确识别映射它吗?有什么建议吗?
禁用寻呼时,您的访问地址是物理地址。但是,启用寻呼后,您的访问地址是虚拟的,因此应首先将要访问的地址区域映射到虚拟地址区域。这可以通过 remap_pfn_range 或 nopage 函数实现,如此处所述。