電脳羊(Android Dream)

アクセスカウンタ

zoom RSS Bootloader Project(翻訳)

<<   作成日時 : 2012/05/01 15:24   >>

ナイス ブログ気持玉 1 / トラックバック 1 / コメント 0

Twitterで良いページがあることを教えてもらったので、軽く翻訳してみました。
元ページは
http://omappedia.org/wiki/Bootloader_Project
Bootloader Project


OMAPブートローダ概要


いくつかの段階のブートローダがあります、そしてそれぞれのブートローダはOMAPプラットフォーム上で異なるレベルの初期化を実行します。それは最終的にファイルシステムをロードして実行するためです。
この図はROMコード、x-loader、u-bootそしてカーネルのブートシーケンスを示しています。
そしてそれぞれの段階は次の段階でロードと実行が出来るように十分な設定を実行を行います。

画像


Bootloader Projectは特にx-loaderとu-bootをカバーしています。コードの概要とどのようにコードを取得してビルドするかに関してです。

なぜ2つのブートローダがあるのでしょうか?
最初のブートローダ、x-loaderはOMAPの小さなチップ上のSRAMで実行するように設計されたu-bootのストリップダウンバージョンです。
x-loaderはシステムのオフチップメモリと他の必要なデバイスを初期化します、そしてそれからLinuxのためのより大きなブートローダすなわち-u-bootをロードします。

OMAPブートシーケンス


OMAPのブートシーケンスの詳細ドキュメントはOMAP TRMの初期化の章において利用可能です。
複数のOMAPプラットフォーム用TRMS(OMAP4430、OMAP4460、OMAP34xxなど)はここで入手できます。
http://www.ti.com/general/docs/wtbu/wtbudocumentcenter.tsp?templateId=6123&navigationId=12037

SYSBOOT Pins
内蔵ROMコードはいくつかの異なる周辺機器とメモリデバイスからブートを試みることが出来ます。シリアル(UART3), SDカード、eMMC, NANDそしてUSBなど、しかしこれらに限定されません。
有効な第一段階のブートイメージ(x-loader)の取得のためにこれらのデバイスを検索する順はSYSBOOTと呼ばれるGPIO設定ピンのセットによって決定されます。

TRMはSYSBOOTピンのそれぞれの組み合わせが参照するブートデバイス一覧の表を含んでいます。
SYSBOOT値は物理アドレスの0x480022f0からJTAGを使用するかあるいは、もしLinuxが動作していれば、devmem2を使うことで読み取ることが出来ます。

# devmem2 0x480022f0 b
/dev/mem opened.
Memory mapped at address 0x40020000.
Value at address 0x480022F0 (0x400202f0): 0x2F

OMAP34xxx用には、ブート順を表示するためのツールもあります。omap34xx-boot-order

第一段階のブート
例えば、SYSBOOTピンが1)serial(UART3) 2)SDカード(MMC1) 3)NANDフラッシュといったブートデバイスの一覧から成るとします。
この場合はROMコードは最初に有効なx-loaderとしてシリアルポート経由で、それからSDカードの中、そしてNANDフラッシュの中を探します。
有効なx-loaderを見つけるたびにそのバイナリの実行に進みます。

画像


シリアルブート
シリアルブートにおいて、単純なIDはシリアルポートの外部に書かれています。もしホストが短時間の間に正しく応答した場合、ROMはシリアルポートから読み込んでデータを内部SRAMに転送するでしょう。もしエラーが検出されなかったら制御はSDRAMの先頭に渡されます。
UART3はROMがロードを試みる唯一のUARTです。

SDカードブート
もしMMCがブートデバイス一覧に含まれていたら、ROMは最初のMMCコントローラー上のSDカードを探します。
もしカードが見つかったら、ROMはそれからパーティションテーブル内の最初のFAT32パーティションを探します。
パーティションが見つかると、ルートディレクトリは”MLO”と呼ばれる特別な署名されたファイルを見つけるためにスキャンされます。
(MLOはファイルをロードするためのメモリの場所とファイルのサイズを含むヘッダとx-loaderのバイナリです。)
全てがファイル内に正しく存在すると仮定し、MLOは内部SRAMに転送され制御をMLOに渡します。MMC1とMMC2の両方がブートに使用することが出来ます。

NAND / eMMCブート
もしNANDがブートでバイス一覧に含まれていたら、ROMはNANDの最初のセクターをロードしようとします。もしセクタが不良、破損、あるいは空白の場合、ROMは終了する前に次のセクタ(最大4)を試すでしょう。
正常なセクタが見つかったら、ROMは内容をSRAMに転送し、制御をそれに移します(もしeMMCがNANDの代わりにブートデバイスの一覧に含まれていれば同じステップをeMMCに対して実行します)

第二段階のブート
x-laoderの役目はu-bootと呼ばれる第二段階のローダをメインメモリに転送することです。
通常はx-loaderとu-bootの両方が同じ記憶媒体から読み込まれます。
例えば一般的にもしx-loaderがUSB経由で転送された場合、u-bootもUSB経由で転送されるでしょう。そしてもしx-loaderがSDカード経由で転送されたなら、u-bootもまたSDカード経由で転送されるでしょう。

しかしながら、これは必須ではありません。例えばあなたはシリアルx-loaderをNANDに書き込むことが出来ます。ROMはx-loaderをNANDからロードして制御をx-loaderに移動します、x-loaderはシリアルポートからダウンロードされるu-bootを待ちます。

シリアルブート
シリアルポートを介してu-bootと両方をロードする場合は、x-loaderはメインメモリに大きなファイルを確実に転送するためにホストがkermitのコネクションを開始するのを待ちます。
フィアル転送が正常に完了すると制御が渡されます。

画像


SDカードブート
u-bootがSDカード経由でロードされる場合、SDカードのx-loaderは最初のMMCコントローラ上のFAT32パーティソンを探して”u-boot.bin”という名前のファイルを探すためにトップレベルのディレクトリをスキャンする。
それからu-boot.binはメインメモリに転送されて、制御をu-boot.binに移す。

画像


NAND / eMMCブート
u-bootがNANDに格納されている場合、x-loaderはu-bootが5番目のセクタ(オフセット0x00800000)の位置に配置されていることを期待します。u-bootはNANDからメインメモリに転送されて、制御をu-bootに移動します。
u-bootがeMMCに格納されている場合、x-loaderはu-bootがオフセット0x200の位置に配置されていることを期待します。

画像


x-loader概要


x-loaderは小さな第一段階のブートローダでu-bootベースのコードから派生しました。
x-loaderはOMAP ROMコードによりスタティックROM内にロードされます。
内部スタティックROMのサイズが小さいため、x-loaderは必要不可欠なもの意外は除去されています。
x-loaderはピンの多重化、クロック、DDRそしてシリアルコンソールを設定します。
そのため、第二段階のブートローダ(u-boot)にアクセス、DDRにロード出来ます。
この図はstart.Sから始まるx-loader内のコードの流れを示しています。

画像


u-bootの概要


u-bootは第二段階のブートローダでx-loaderによりDDRにロードされます。
u-bootはDas U-Bootから来ています。u-bootはCPU依存、そしてボード依存の初期化と設定を実行することが出来ます、x-loaderの中では実行しません。
u-bootはまたeMMCに対するパーディショニングとフラッシュをするfastboot機能を含んでいます。
u-bootはマスターCPU(CPU ID 0)上で動作し、マスターCPUは初期化とブートに対して責任があります。それと同時にスレーブCPU(CPU ID 1)はイベント待ち状態で保持されます。
この図はstart.Sから始まるu-bootのコードの流れを示しています。

画像


ブートローダのビルド


以下の手順はx-loaderとu-bootをビルドするためのものです。

注意:x-loaderあるいはu-bootをビルドするためにはあなたが使用しているプラットフォーム(Blaze, Blaze Tablet, PandaあるいはZoom)に対応したomappediaのリリースノートページを使用してそのリリースの指示に従うことをお勧めします。http://www.omappedia.com/wiki/Release_Notes
一般的に命令は以下の例外を除いて非常に類似したものになります。

●u-bootとx-loaderのgitツリーからコードを取り出すために使用されるコミットIDはリリースに基づいて異なります。
これはどう検証が実行されるかなのであなたのリリースに対応した正しいコミットIDを使用することをお勧めします。

●設定のコンフィグレーション時に使用される設定ファイル、それはあなたが使用するさまざまなプラットフォームに基づいてu-bootとx-laoderをビルドする時に使用します。
以下のテーブルを参照して下さい。

また、ブートローダをビルドするための前提条件パッケージがインストールされていることを確認、すなわちgitとCodreSourceryのARMコンパイラです。
これらの命令はあなたが使用するリリースに対応するomappediaのリリースノートを含んでいます。またここで情報を見つけるこごが出来ます。

●Gitはgit-scm.comからダウンロード出来ます。インストールとgitの使い方の詳細はこのwiki pageを参照して下さい

●CodeSourceryのARMコンパイラについては、Support_Tools/Cross_Compilersをご覧下さい

u-boot


u-bootのソースファイルをダウンロード
u-bootツリーのクローンを作成して、このリリースに対応するソースコードをチェックアウトします。
# mkdir u-boot
# cd u-boot
# git clone git://git.omapzoom.org/repo/u-boot.git
# git checkout <<commit_ID_for_uboot_in_this_release>>

u-bootのビルド
使用するプラットフォームに応じた正しい設定ファイルを使ってu-bootソースコードをMakeします

# cd u-boot
# make distclean
# make CROSS_COMPILE=arm-none-linux-gnueabi- <<config_file_depending_on_your_platform>>
# make CROSS_COMPILE=arm-none-linux-gnueabi-

u-boot設定ファイル
Board config file
44xx Blaze Tablet omap44XXtablet_config
44xx Blaze omap4430sdp_config
3430SDP omap3430sdp_config
3630SDP omap3630sdp_config
3430LDP omap3430labrador_config
Zoom2 omap3430zoom2_config
Zoom3 omap3630zoom3_config
2430sdp omap2430sdp_config
2420h4 omap2420h4_config

その結果u-boot.binはあなたのディレクトリのトップレベルに配置されます。

x-loader


x-loaderへのアクセス
x-loaderツリーのクローンを作成して、このリリースに対応するソースコードをチェックアウトします。
# cd x-loader
# git clone git://git.omapzoom.org/repo/x-loader.git
# git checkout <<commit_ID_for_xloader_in_this_release>>

x-loaderのビルド
あなたのプラットフォームに対応した正しい設定ファイルを使用してx-loaderのソースコードをmakeします。
# cd x-loader
# make distclean
# make CROSS_COMPILE=arm-none-linux-gnueabi- <<config_file_depending_on_your_platform>>
# make CROSS_COMPILE=arm-none-linux-gnueabi- ift

x-loaderの設定ファイル
Board config file
44xx Blaze Tablet omap44XXtablet_config
44xx Blaze omap4430sdp_config
3430SDP omap3430sdp_config
3630SDP omap3630sdp_config
3630SDP 1GB omap3630sdp_1G_config
3430LDP omap3430labrador_config
Zoom2 omap3430zoom2_config
Zoom3 omap3630zoom3_config
2430sdp omap2430sdp_config
2420h4 omap2420h4_config

OMPA3用のシリアル接続経由ブートx-loaderをビルドするにはomap3430labradordownload_configを使用します。
その結果MLOがあなたのディレクトリのトップレベルに配置されます。
注意:もしあなたがHS(Hight Sequity)OMPAでバイスを使用しているなら、拡張ステップが必要です。
最初にx-loaderを上記の手順でビルドします。それから以下のコマンドでMShiled署名ツールをダウンロードします。
このツールへのアクセスを取得するには、TIの担当者へお問い合わせ下さい。
# cd mshield-dk-root-folder
# ./generate_MLO <<OMAP type>> x-load.bin

例えば、ES2.3 OMAP4330デバイスのためには以下のコマンドを使用します
# ./generate_MLO OMAP4430 ES2.3 x-load.bin

その結果MLOがあなたのmshiled-dkディレクトリに配置されます。

Flashing


BlazeとBlazeタブレットのためにFastBootを使用してフラッシュする方法はAndroid_Fastbootを参照して下さい
Zoom1/Zoom2/Zoom3のためにフラッシュする方法はZoom Flasingを参照して下さい
3630SDPボードのためにフラッシュする方法は3630DSP Flasingを参照して下さい
eMMCデバイスからフラッシュしてブートする方法はeMMC Bootを参照して下さい。
PandaBoard用のUSBダウンローダは[1]を参照して下さい。

Upstreaming U-boot


U-Bootのupstreamingは、個別のプロジェクトとして実施されています。詳細については、次のリンクを参照してください。
U-boot Upstreaming Project

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
ナイス

トラックバック(1件)

タイトル (本文) ブログ名/日時
参考文献
「Linux Core LCD Controller User Guide」 http://proc ...続きを見る
Confluence: 本田 亮
2016/04/25 15:12

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Bootloader Project(翻訳) 電脳羊(Android Dream)/BIGLOBEウェブリブログ
文字サイズ:       閉じる