bootmain.cに入ると、ディスクからデータのロードを始める。
ここで注目すべきは、カーネルのプログラムとしては、テキストは0x80100000から始まることを想定していることだ。 だがこんな場所にメモリは存在しておらず、ページングを利用して0x00100000にマップされる。
しかし、カーネルが実行される前はページングが有効になっていないため、kernel.ldのマッピングの機能を用いて、0x80100000に存在しているものの、物理アドレス0x01000000にロードされるように工夫がされている。
/* Link the kernel at this address: "." means the current address */ /* Must be equal to KERNLINK */ . = 0x80100000; .text : AT(0x100000) { *(.text .stub .text.* .gnu.linkonce.t.*) }
この、AT(0x100000)の部分さね。