2016-05-20 6 views
2

VESAモードのLFBにピクセルを書き込もうとするたびに、ページが存在し、読み込まれたページフォルトが発生します。私のページング実装はJames MolloyのOSシリーズからのものです。ページングを有効にして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); 
} 

これらは、それらの関数のプロトタイプは次のとおりです:次のように私はLFBをマッピングアイデンティティを試してみた

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_rangeまたはnopage関数で実装され、hereとして実装できます。

+1

元のポスターはLinuxを使用していないため、独自のOSを作成しています –

+0

ページングは​​ハードウェア(CPUとMMU)のメカニズムなので、書き込んでいるOSに関係なくです。ハードウェアがページング・メカニズムをオンにしたときに定義したページング・ルールを遵守する必要があります。 – Akr

+0

はい、Linuxのルーチンは[James MolloyのOSシリーズ](http://www.jamesmolloy.co.uk/tutorial_html/)のコードを手伝ってくれません –

関連する問題