0

Raspberry Pi 用のシンプルなブートローダーを書きたいと思っています。このブートローダーの主な目的は、リモートの場所にある Raspberry Pi を有効にして、カーネル パニックの結果としてデバイスを起動できなくするカーネル アップデートから回復することです。カーネルを更新する手順は次のようになります。

デフォルトの Linux カーネルは/boot/rpi-kernel.imgで、文字列 'rpi-kernel.img' が に書き込まれ/boot/default-kernel.txtます。の「cmdline=」にカーネル パラメータ「panic=10」が追加されました/boot/config.txt

  1. SSH 経由で Raspberry Pi に接続します。
  2. /boot/rpi-kernel.imgにコピー/boot/rpi-kernel-fallback.img
  3. 空のファイルを作成/boot/kernel_update
  4. カーネル アップデートをダウンロードし、次の場所に移動します。/boot/rpi-kernel.img
  5. リブート

これは、疑似コードで考えたブートローダーの設計です。

read kernel parameters passed from start.elf

if empty file '/boot/kernel_update' does not exists

    boot kernel defined in '/boot/default-kernel.txt' with kernel parameters passed from start.elf

else

    if empty file '/boot/boot_kernel_update' exists

        write string 'rpi-kernel-fallback.img' to file '/boot/default-kernel.txt'
        delete file '/boot/kernel_update'
        delete file '/boot/boot_kernel_update'
        create empty file '/boot/kernel_update_failed'
        boot kernel 'rpi-kernel-fallback.img' with kernel parameters passed from start.elf

    else

        create empty file '/boot/boot_kernel_update'
        boot kernel '/boot/rpi-kernel.img' with kernel parameters passed from start.elf

ブート プロセスの最後のステップとして、シェル スクリプトは が/boot/kernel_update存在するかどうかを確認し、ネットワークが機能しており、環境が正常であるかどうかを確認してから、 を削除し/boot/kernel_updateます。

HDMI、USB、イーサネット、シリアルなどをサポートせずに、ブートローダーをできるだけクリーンでシンプルにしたいと考えています。問題は、これを開始する方法がわからないことです。

主な課題は、SD カードの FAT32 ファイルシステムの読み取りと書き込み、および Linux カーネルの起動です。Raspberry Pi のベアメタルからすべてを実行する必要があります。

コード例、リソース、提案など。これを行うと非常に役立ちます。

4

0 に答える 0