Raspberry Piはどのように起動しますか?


57

私はラズベリーミニコンピューターを持っていますが、それがブートプロセス全体をどのように行うのか疑問に思っています。独自のカーネルをコンパイルし、独自のスクリプトを使用してRAMディスクを初期化し、PC上で独自の最小限のLinuxシステムを構築できますが、そのためにはブートローダーを使用する必要があります。Raspberryはブートローダーをまったくサポートしていないようです。

どういうわけか、GPUを使用して起動し、FAT32でフォーマットする必要があるSDカード(おそらく起動可能フラグのあるパーティション)のパーティションを読み取り、そこから、たとえばraspbianによって提供されるいくつかのファイルを読み取ります。

しかし、自分でコンパイルした独自のカスタマイズを使用して、独自のカーネルをどのように起動しますか?raspberryがカーネルイメージ/ initrd(ramディスク)を見つけてそこからブートできるように、どこにコピーすればよいですか?私は基本的に、ラズベリーの起動プロセスを説明する非常に詳細な技術文書またはこれに関する説明を探しています。


回答:


59

このRaspberry Piフォーラムの投稿 [ loader.bin時代錯誤として反映するように編集]から

  1. Raspberry Piを初めてオンにすると、ARMコアはオフになり、GPUコアはオンになります。この時点で、SDRAMは無効になっています。
  2. GPUは、SoCのROMに保存されている第1ステージのブートローダーの実行を開始します。第1ステージのブートローダーはSDカードを読み取り、第2ステージのブートローダー(bootcode.bin)をL2キャッシュにロードして実行します。
  3. bootcode.binSDRAMを有効にし、第3ステージのブートローダー(loader.bin)をSDカードからRAMに読み込んで実行します。 [最近のバージョンでは、第三段階のブートローダーを使用していません。]
  4. [該当する場合] loader.binGPUファームウェア(start.elf)を読み取ります。
  5. start.elf読み取りconfig.txtcmdline.txtおよびkernel.img

loader.binあまりしません。.elfファイルを処理できるためstart.elf、メモリの最上部にロードする必要があります(ARMはアドレス0のSDRAMを使用します)。にelfの読み込みサポートを追加する計画がありますがbootcode.bin、これはloader.bin不要になりますが、優先度は低くなります(起動時に100ミリ秒節約できると思います)。[この変更はその後行われました。]

役立つ可能性のあるリソースを次に示します。


2
これらのbinファイルのコンテンツはすべて独自のソフトウェアですか?
ペトル

3
@Petr ここラズベリーパイのファームウェアについてはGithubには、私は私の答えにそれを編集します。
syb0rg

1
ラズベリーパイのFAQ、それは「あなたはSDからブートする必要がなく、USB HDができる『引き継ぐ言う』初期起動後。あなたは、SDカードなしで起動することはできません。」
syb0rg

1
最初に読み込まれるパーティションは、Bフラグのあるパーティションですか、それとも最初のパーティションでなければなりませんか?私はそれがあまりにも大きくし、私は小さいだろうSDカードの端に別のものを作成したい場合はどう
ペトル

1
@Petr別の質問としてそれを尋ねるべきです!
syb0rg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.