| 開発者 | DENXソフトウェアエンジニアリング |
|---|---|
| 初回リリース | 1999年10月15日 |
| 安定リリース | v2024.04 / 2024年4月2日[1] |
| リポジトリ |
|
| 書かれた | C、アセンブリ |
| 利用可能 | 英語 |
| タイプ | ブートローダー |
| ライセンス | GPL-2.0以降[2] |
| Webサイト | docs.u-boot.org/ja/latest/ より |
Das U-Boot (サブタイトルは「ユニバーサル ブート ローダー」で、U-Bootと略されることが多い。名前の詳細については履歴を参照) は、組み込みデバイスで使用されるオープン ソースの ブート ローダーであり、さまざまな低レベルのハードウェア初期化タスクを実行し、デバイスのオペレーティング システム カーネルを起動します。M68000 、ARM、Blackfin、MicroBlaze、AArch64、MIPS、Nios II、SuperH、PPC、RISC-V、LoongArch、x86など、さまざまなコンピューター アーキテクチャで使用できます。
機能性
U-Boot は、第 1 ステージと第 2 ステージの両方のブートローダです。これは、SD カード、SATA ドライブ、NOR フラッシュ (SPI または I²C を使用) 、 NANDフラッシュなどのサポートされているブート デバイスから、システムの ROM (ARM CPU のオンチップ ROM など) によってロードされます。サイズに制約がある場合、U-Boot は 2 つのステージに分割されることがあります。プラットフォームは、U-Boot の簡易バージョンである小さな SPL (セカンダリ プログラム ローダー) をロードし、SPL は初期のハードウェア構成 ( CPU キャッシュを RAM として使用したDRAMの初期化など) を実行して、より大きくフル機能の U-Boot バージョンをロードします。[3] [4] [5] SPL が使用されているかどうかに関係なく、U-Boot は第 1 ステージのブート (メモリ コントローラとSDRAMの構成など) と第 2 ステージのブート (マザーボードとその他の I/O デバイスの構成、デバイス ツリーのロード、ストレージ デバイスからのOS カーネルのロードなど) の両方を実行します。
U-Bootは、Embedded Base Boot Requirements (EBBR)仕様で定義されているUEFI仕様のサブセットを実装しています。 [6] GRUBやLinuxカーネルなどのUEFIバイナリは、ブートマネージャーまたはコマンドラインインターフェイスから起動できます。
U-Boot は、コンソールまたはシリアル ポート上でコマンド ライン インターフェイスを実行します。CLI を使用すると、カーネルをロードして起動し、パラメータをデフォルトから変更することができます。デバイス情報の読み取り、フラッシュ メモリの読み取りと書き込み、シリアル ポートまたはネットワークからのファイル (カーネル、ブート イメージなど) のダウンロード、デバイス ツリーの操作、環境変数の操作 (永続ストレージに書き込むことができ、デフォルトのブート コマンドや自動ブート前のタイムアウトなどの U-Boot の動作、および Ethernet MAC アドレスなどのハードウェア データを制御するために使用される) を行うコマンドもあります。
カーネルやその他のブート データのメモリ位置を隠したり自動的に選択したりする PC ブートローダとは異なり、U-Boot では、ブート コマンドで、データのコピー先 (カーネル、RAM ディスク、デバイス ツリーなど)、カーネルへのジャンプ先、およびカーネルの引数として、物理メモリ アドレスを明示的に指定する必要があります。U-Boot のコマンドはかなり低レベルであるため、カーネルのブートにはいくつかの手順が必要ですが、同じコマンドをより一般的なタスクに使用できるため、U-Boot は他のブートローダよりも柔軟です。U-Boot を使用して U-Boot をアップグレードすることもできます。新しいブートローダをどこか (ローカル ストレージ、シリアル ポート、またはネットワーク) からメモリに読み込み、そのデータをブートローダが属する永続ストレージに書き込むだけです。
U-Boot は USB をサポートしているため、シリアル ポートからの入力に加えて、USB キーボードを使用してコンソールを操作したり、SD カード リーダーなどの USB 大容量ストレージ デバイスにアクセスして起動したりできます。
データストレージとブートソース
U-Boot は、カーネルとその他の必要なデータ (デバイス ツリーや RAM ディスク イメージなど) をメモリに読み込み、適切な引数を使用してカーネルを実行することで、オペレーティング システムを起動します。
U-Boot のコマンドは、実際には任意のデータの読み取りや書き込みに使用できる汎用コマンドです。これらのコマンドを使用すると、U-Boot がサポートする次のストレージ システムからデータを読み取ったり、そのストレージ システムにデータを書き込んだりできます。
(注: これらは、U-Boot がデータ (カーネルや RAM ディスク イメージなど) をメモリにロードできるブート ソースです。U-Boot 自体はプラットフォームによってブートされる必要があり、これはプラットフォームの ROM がブートできるデバイスから実行される必要があります。これは当然プラットフォームによって異なります。)
- オンボードまたは接続されたストレージ
- シリアルポート(ファイル転送)
- ネットワーク ブート (オプションで DHCP、BOOTP、または RARP を使用)
一部の組み込みデバイスの実装では、CPU または SoC がブート パーティション ( ext4またはFATファイルシステムなど) からブートローダー (Das U-Boot など) を直接検索してロードします。
互換性のあるファイルシステム
U-Boot は、カーネルがルート ファイル システムまたは初期 RAM ディスクとして使用するためにファイル システムを読み取ることができる必要はありません。U-Boot は、単に適切なパラメータをカーネルに提供し、データの内容を理解せずにデータをメモリにコピーします。
ただし、U-Boot はファイルシステムから読み取る (場合によってはファイルシステムに書き込む) こともできます。この方法では、U-Boot がロードするデータをストレージ デバイスの固定された場所に保存する必要はなく、U-Boot はファイルシステムを読み取って、パス名でカーネル、デバイス ツリーなどを検索し、ロードすることができます。
U-Boot には次のファイルシステムのサポートが含まれています:
デバイスツリー
デバイス ツリーは、ハードウェア レイアウトを記述するためのデータ構造です。デバイス ツリーを使用すると、ベンダーは、特別な目的のハードウェアで、あまり変更されていないメインラインU-Boot を使用できる可能性があります。Linux カーネルでも採用されているように、デバイス ツリーは、膨大な数の製品固有のフォーク(U-Boot と Linux) が存在する組み込み業界の状況を改善することを目的としています。メインライン ソフトウェアを実行できるということは、実質的に、ベンダーの更新が不足していることに対する免責を顧客に与えることになります。
歴史


このプロジェクトは、Magnus Dammによって書かれた8xxROMと呼ばれる8xx PowerPCブートローダとして始まりました。 [7] 1999年10月、Wolfgang DenkはプロジェクトをSourceForge.netに移し、プロジェクト名をPPCBootに変更しました。これは、SF.netでは数字で始まるプロジェクト名が許可されていなかったためです。[7] PPCBootのバージョン0.4.1は、2000年7月19日に初めて公開されました。
2002年に以前のバージョンのソースコードが一時的にARMBootという製品に分岐したが、その後すぐにPPCBootプロジェクトに統合された。2002年10月31日にPPCBoot−2.0.0がリリースされた。これはPPCBootという名前での最後のリリースとなり、PPC ISA以外のアーキテクチャでも動作することを反映して名前が変更された。[8] [9]
PPCBoot-2.0.0は2002年11月にU-Boot-0.1.0となり、 x86プロセッサアーキテクチャで動作するように拡張されました。その後、 2003年3月にMIPS32、 4月にMIPS64、 10月にNios II、12月にColdFire 、2004年4月にMicroBlazeと、追加のアーキテクチャ機能が追加されました。 2004年5月にリリースされたU-Boot-1.1.2は、さまざまなアーキテクチャにわたる216のボードメーカーの製品で動作しました。[9]
現在の名前Das U-Boot にはドイツ語の定冠詞が追加されており、第二次世界大戦中のドイツのU ボートを舞台にした1981 年のドイツの潜水艦の名作映画Das Bootとのバイリンガルな語呂合わせになっています。これは、 GNU 一般公衆利用許諾書の条件に基づいてリリースされたフリー ソフトウェアです。クロス開発 GNUツールチェーン(crosstool、Embedded Linux Development Kit (ELDK)、OSELAS.Toolchain など)を使用して、対象 アーキテクチャのいずれかの x86 PC 上に構築できます。
組み込みLinuxシステムにおけるU-Bootの重要性は、Karim Yaghmour著の『Building Embedded Linux Systems』で非常に簡潔に述べられています。同書のU-Bootに関する文章は、「他にもブートローダは数多くありますが、ユニバーサルブートローダである『Das U-Boot』は、おそらく最も機能が豊富で、最も柔軟で、最も積極的に開発されているオープンソースブートローダです」と始まります。[10]
使用法
- ARMベースのChromebookにはU-Bootが搭載されています。Celeronおよびi5ベースのChromebookでは、これをcorebootのペイロードとして使用します。[11]
- AmigaOS を実行するPowerPCベースのAmigaOneコンピュータシリーズはU-Boot を使用します。具体的には、ACube Systems SrlのSam440epとSam460ex 、および A-Eon のAmigaOne X1000の後継機である AmigaOne X5000 です。
- Ubiquiti Networksデバイスは U-Boot を使用します。
- Amazon KindleおよびKobo eReaderデバイスは、ブートローダーとして U-Boot を使用します。
- TP-Link および他のいくつかの OpenWRT/LEDE 互換 MIPS ベースのワイヤレス ルーターは、ブートローディングに U-Boot を使用します。
- Teltonika セルラー ルーターは、U-Boot に基づくブートローダーを使用します。
- SpaceXのFalconとDragonはどちらもU-Bootを使用しています。[12]
- アサヒLinuxは、Apple Silicon Mac上でLinuxを起動するために、これをm1n1のペイロードとして使用します。[13]
参照
注記
- ^ これは、TFTP を使用してネットワークからカーネルをロードし、カーネルがルート ファイルシステムとして NFS マウントを使用するように指定するのではなく、真の NFS ブートです (U-Boot 自体がカーネルをロードするために NFS を使用します)。
参考文献
- ^ Rini, Tom (2024年4月2日). 「U-Boot v2024.04 リリース」. u-boot (メーリングリスト) . 2024年4月2日閲覧。
- ^ 「Das U-Boot のライセンス」git.denx.de . 2013 . 2018 年 10 月 13 日閲覧。
- ^ 「Altera の Cyclone V SoC FPGA 用の Uboot イメージの準備」。
- ^ 「i.MX6 上の U-Boot」。2013 年 6 月 18 日。
- ^ 「Bootloaders:u-boot:features [Analog Devices Open Source| Mixed-signal and Digital Signal Processing ICs]」。2017年9月5日時点のオリジナルよりアーカイブ。2016年6月15日閲覧。
- ^ https://github.com/arm-software/ebbr、Embedded Base Boot Requirements (EBBR) 仕様、2021-03-25 取得
- ^ ab PPCBoot ホームページ: 著者
- ^ 「[PPCBoot ユーザー] PPCBoot のハロウィーン リリース: 2.0.0 - 最終リリース」、Wolfgang Denk、2002 年 10 月 31 日
- ^ ab 「U-Bootdoc History」。2011年9月4日閲覧。
- ^ Kareem Yaghmour 著『Building Embedded Linux Systems』第 9 章
- ^ coreboot チュートリアル oscon 2013、p. 6
- ^ 私たちはSpaceXソフトウェアチームです。何でも聞いてください!、返信4
- ^ 「U Boot · AsahiLinux/docs Wiki」。GitHub 。2022年4月29日閲覧。
外部リンク
- 公式サイト
- 公式Gitリポジトリ
- ベアボックス(旧称 U-Boot-V2)
- ARMブート
