2013-05-01 3 views
7

最近、私は組み込みシステムと組み込みLinuxについて学び始めました。組み込みシステムでは、オペレーティングシステムはFlashまたはROMに格納されています。これがオンになると、ブートローダはオペレーティングシステムをメインメモリにロードし、「フラッシュまたはROM」はSDカードであるRaspberry Piでロードします。Raspberry Piのブートローダはどのように機能しますか?

だから、私は1つで練習を開始したいので、私はラズベリーパイを探していた、と私は、「ブート」ラズベリーパイの概念について混乱していました。私の質問は、どのブートローダがRaspberry Piを使用し、どのように動作するのですか? (つまりカーネルの前にどのようなプロセスが起きていますか?head.omain.c?(カーネルを起動する)

+0

ここでうまく答えられます:http://raspberrypi.stackexchange。com/a/10490/34554 – opyate

+0

私はこのトピックをhttp://raspberrypi.stackexchange.comに属しており、(http://raspberrypi.stackexchange.com/questionsの複製であるため)トピックとしてオフに投票しています/ 10489/how-does-raspberry-pi-boot) –

答えて

13

このプロセスは死ぬと説明されています。

ラズベリーPIは、GPUとARMプロセッサ、二つの別個のプロセッサを含んでいます。最初にGPUが起動します。私は、オンチップのROMまたはハードウェアが、最初のブートファイルbootcode.binを探しているsdカードを読み取ることによって駆動されると想定しています。そのGPUブートローダは、私たちが懸念している限り文書化されておらず、チップを一点に持ち上げ、start.elfに別のGPUプログラムをロードします。そのgpuプログラムはチップ(ddr init)の起動を終え、最終的にARMアプリケーションであるkernel.imgをロードします(アームのブートローダではなく、linuxのようなアプリケーションです)、それをRAMに直接ロードして、通常のブートローダがlinuxをブートするためにアームを準備します(これは一般的にはほとんどありません)。その後、アームが起動します。あなたが唯一つのプロセッサを持っており、それはまた、アプリケーション/オペレーティングシステムを実行するプロセッサであるとき

伝統的なブートローダです。 redbootやubootのような名前ですが、これらはオペレーティングシステムそのものを大きく複雑にしています。 Linuxを起動し、RAMにいくつかのATAGを入れ、いくつかのレジスタを設定するのはそれほどではありません(もちろん、あまりにも多くのコードを取るが、例えば、ddrのためのコード)、新しいlinuxにはセットアップにはもう少しのものがありますが、それほど多くはありません。

ラズベリーパイ起動は、シンプルでエレガントで、リムーバブル不揮発性ストレージ(sdカード)の機能も備えています。これにより、ROMをポップアップして消去するブートローダー前の日に戻りますそれにはそのような痛みがありますが、その周りには方法があります。おそらく、サードパーティの複雑な(ubootなどの)ブートローダが利用可能である可能性があります。リムーバブルフラッシュを使用すると、コンパイルされたブートローダが必要ないということを意味します。壊れたアプリケーションでシステムをブリックすることについて心配する必要はありません。単にフラッシュを削除して変更するだけでリカバリできます。ブートローダは、メディアの取り外しを避けることから、プログラミング後にフラッシュとリゾルバの半田付けを避けるか、半田付けされた部品を持つ予定のボード上のソケットを使用しないようになっています。

のkernel.imgそれが今立っているとして(1ポイントで、それが0x00000000のにロードされた)は0x8000にロードします。それはあなたが知る必要があることのすべてについてです。ブートローダで使用する通常のカーナルイメージです。その後、バイナリの開始点と開始点としてアドレス0x8000にリンクしている限り、ベアメタルや他のプログラム/アプリケーションを書くことができます。例外を使用する場合は、何らかの理由で例外テーブルを書き込む必要があります(これを行うにはさまざまな方法があります)。これに代わる方法としては、オプションのconfig.txtファイルを使用して設定することができ、rpiの初期のようにkernel.imgを0x0000にロードするレガシーモード設定があります。個人的に私は今0x8000のデフォルトで行く、他のベアメタルの人々は別のパスを取る...

私は非常に単純なxmodemブートローダとjtagを使用できるようにjtagピンを設定するものを持っていますあなたのアプリケーションを開発するときにSDカードのダンスを何百から何千回もする)。他にも、複雑なものもあれば、ネットワークが動作するまでUSBを持っているものもあります。

関連する問題