Linux ARM のbootシーケンス(のさわり)
たとえば、0x8000 から始まるように設計されていたとする。ところが 0x10000 にロードされてしまった。まずは 0x10000 から実行が始まる。そこで、解凍後のサイズを計算して、そこに自分自身をコピー。そしてコピー先にとぶ。こうすることによって、本来の 0x8000 からの領域があく。それで、0x8000 に解凍し、そこにジャンプ。MMU つかってないじゃん。
たとえば、0x8000 から始まるように設計されていたとする。ところが 0x10000 にロードされてしまった。まずは 0x10000 から実行が始まる。そこで、解凍後のサイズを計算して、そこに自分自身をコピー。そしてコピー先にとぶ。こうすることによって、本来の 0x8000 からの領域があく。それで、0x8000 に解凍し、そこにジャンプ。MMU つかってないじゃん。