|
現: 2020-12-26 (土) 15:07:52 yuji |
| + | * ブートシーケンス [#xcb6d863] |
| + | + Raspberry Piに電源がOn~ |
| + | ARM coreは動作していない。GPU coreがonされる。この時,SDRAMはディスイネーブル。~ |
| + | + GPUの1stステージ・ブートローダーが実行される~ |
| + | 1stステージ・ブートローダーは,GPUの内蔵ROMに入っている。~ |
| + | SD/MicroSDカードの第1パーテション(先頭のパーテーションのFAT/FAT32ファイルシステム)にある2ndステージ・ブートローダー(bootcode.bin)をL2キャッシュに読み込んで実行する。~ |
| + | + 2ndステージ・ブートローダー~ |
| + | bootcode.binはSDRAMをイネーブルにする。~ |
| + | SD/MicroSDカードから3rdステージ・ブートローダーであるloader.binを第1パーテション(FAT/FAT32)からRAMに読み込んで実行する。~ |
| + | + 3rdステージ・ブートローダー~ |
| + | loader.binはstart.elf(GPUのfirmware)を第1パーテション(FAT/FAT32)からRAMに読み込んで実行する。~ |
| + | 新しいブートシーケンスでは2ndステージ・ブートローダー(loader.bin)はなくなり,bootcode.binに統合されたみたいだ。つまり,bootcode.binがstart.elfをロードする。~ |
| + | + 4thステージ・ブートローダー~ |
| + | start.elfは接続されているDisplayに,テストパターン(虹色パターン)を表示する。~ |
| + | そして第1パーテション(FAT/FAT32)にあるconfig.txt,cmdline.txtとkernel.imgをRAMに読み込む。~ |
| + | 第1パーテションにあるconfig.txtに記載されている情報から,システム設定ファイルをロードする。(各種デバイス用)~ |
| + | config.txtのkernel=xxxxで指定されたLinuxカーネルをロードする。(デフォルトはkernel.imgで,RPi3の場合はkernel7.img)~ |
| + | その後ARM Coreのリセット信号を解除してARM Coreを起動する。これで,Linux Kernelがブートされる。~ |
| + | この時cmdline.txtの内容がカーネルコマンドオプションとして与えられるようだ。(CPUシリアル番号,MAC Address,Displayの解像度などのSoCのfirmwareから提供される値を,カーネルに引き渡す為にパラメータとして与える) |
| + | + Kernelが第2パーテーションのrootファイルシステムを直接マウントする。~ |
| + | initramfsは使用していないようだ。~ |
| + | + systemdを最初のプロセスとして起動する。~ |
| | | |
| + | ** Raspberry Pi 4Bのブートシーケンス [#zeaf7948] |
| + | + Raspberry Piに電源がOn~ |
| + | ARM coreは動作していない。GPU coreがonされる。この時,SDRAMはディスイネーブル。 |
| + | + GPUの1stステージ・ブートローダーが実行される~ |
| + | 1stステージ・ブートローダーは,GPUの内蔵ROMに入っている。~ |
| + | 1stステージ・ブートローダーが新しく実装されたEEPROMの''recovery.bin''を読み込んで実行する。SDRAMの初期化なども行う。~ |
| + | その後,MicroSDカードからstart4.elfをロードし実行する。~ |
| + | + 2ndステージ・ブートローダー(start4.elf)~ |
| + | start4.elfは接続されているDisplayにテストパターン(虹色パターン)を表示する。~ |
| + | その後MicroSDカードの第1パーテション(FAT/FAT32)にあるconfig.txt,cmdline.txtとkernel7.imgまたはkernel8.imgをRAMに読み込む。~ |
| + | GPUがARM Coreのリセット信号を解除してARM Coreを起動する。これで,Linux Kernelがブートされる。 |
| + | //+ Kernelが第2パーテーションのrootファイルシステムを直接マウントする。~ |
| + | //+ systemdを最初のプロセスとして起動する。~ |