2016-05-20 40 views
2

每当我尝试将像素写入VESA模式的LFB时,页面出现并已被读取的页面出现错误。我的分页实现来自James Molloy的OS系列。我试过身份映射LFB如下:尝试访问启用分页的VESA 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吗?还有什么我需要做的正确的身份映射?有什么建议么?

回答

0

当页面禁用时,您的访问地址是物理地址。但是,启用分页时,您的访问地址是虚拟的,因此您应该首先将您要访问的地址区域映射到物理地址区域。这可以通过remap_pfn_rangenopage函数来实现,如引入here

+1

原来的海报并没有使用Linux,他们正在创建自己的操作系统 –

+0

寻呼是硬件(CPU和MMU)的一种机制,所以无论你在写什么操作系统。打开分页机制时,您必须遵守硬件定义的分页规则。 – Akr

+0

是的,但Linux例程无法帮助他使用[James Molloy的OS系列]代码(http://www.jamesmolloy.co.uk/tutorial_html/) –

相关问题