bc10

概要

2010/09/06

bc10向けu-bootについて、情報をまとめてあります。
u-bootはbc10起動時に実行される2段目のブートローダです。
bc10のブートプロセスやu-bootの配置方法についての情報はbc10/bootingを参照してください。

u-bootのビルド

2010/12/21

開発環境

bc10向けtoolchainを準備します。
以下のtoolchainでビルドを確認しています。

  • OpenEmbedded Linux toolchain(arm-angstrom-linux-gnueabi-)
    • BeagleBoard向け開発環境として使われているOpenEmbedded Linuxのtoolchain
  • rowboat toolchain(arm-eabi-)
    • OMAP35x向けAndroidプロジェクトのrowboatで使われているtoolchain
  • CodeSourcery arm GNU/Linux toolchain(arm-none-linux-gnueabi-)

環境変数の設定

OpenEmbedded toolchain

OpenEmbeddedのtoolchainを利用するには、あらかじめOpenEmbedded開発環境をインストールしておく必要があります。
OpenEmbedded開発環境のインストールについては、bc10/OpenEmbedded Linuxを参照してください。
toolchainを使用するために、環境変数を以下のように設定します。

export PATH=${WORK_DIR}/OE/angstrom-dev/cross/armv7a/bin:${PATH}
export ARCH=arm
export CROSS_COMPILE=arm-angstrom-linux-gnueabi-

rowboat toolchain

rowboatのtoolchainを利用するには、あらかじめrowboat開発環境をインストールしておく必要があります。
rowboat開発環境のインストールについては、bc10/rowboatを参照してください。
toolchainを使用するために、環境変数を以下のように設定します。

export PATH=${WORK_DIR}/rowboat-eclair-dsp/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin:${PATH}
export ARCH=arm
export CROSS_COMPILE=arm-eabi-

ソースコードの入手

gitリポジトリからソースコードを入手します。

git clone git://gitorious.org/bc10/u-boot-bc10.git u-boot-bc10

ビルド

OpenEmbedded toolchainを使用してクロスビルドします。

cd u-boot-bc10
make mrproper
make omap3_bc10_config
make

ビルドに成功するとu-boot.binが生成されます。
u-boot.binの配置方法についてはbc10/bootingを参照してください。

ソースコードのアップデート

機能の追加や修正などでソースコードが更新された場合は、更新分のみを取得するだけでかまいません。

cd u-boot-bc10/
git pull

ソースコードをアップデートした後は、リビルドしてu-boot.binを置き換えてください。

ソースコードリポジトリについて

2010/12/21

u-boot-bc10のソースコードはGitoriousで管理しています。

ブランチ

u-boot-bc10リポジトリには、以下の3つのブランチがあります。

  • master
    • bc10向けリリースブランチ
  • develop
    • bc10向け開発ブランチ
  • build
    • *削除予定* (bc10向けビルド用ブランチ)

bc10で動作するu-boot.binをビルドするには、masterブランチを使用してください。

developブランチは機能追加時の試験などのために利用されています。
常に最新の実装がなされていますが、うまく動作しない場合もあるので、通常はmasterブランチを使用してください。

buildブランチはbc10のMACH_TYPE番号が公式に追加されるまで、一時的なビルド用ブランチとして存在していました。
現在は公式にbc10のMACH_TYPEがサポートされたので、buildブランチの更新は停止しています。
将来、削除される可能性がありますので、buildブランチは使用しないでください。
この問題の詳細については、カーネルソースに含まれる Documentation/arm/README を参照してください。

派生元

u-boot-bc10のソースコードは、DENXのU-Bootリポジトリからcloneし、bc10向けに改造したものです。

詳細解説

2010/12/16

U-Bootの基本動作

U-Bootの基本的な動作と、動作のカスタマイズ方法について説明します。

U-BootにはHushというシェルが組み込まれており、シェルスクリプトやコマンドラインで動作を制御することができます。
動作のカスタマイズはこのHushを通じておこなうことになります。

起動シーケンス

U-Bootは起動すると、数秒の待機のあと、自動的にbootコマンドを実行します。
ただし、この待機中にユーザから何らかのキー入力があれば、プロンプトが表示され、コマンドラインからの制御ができるようになります。
この場合、bootコマンドは自動実行されません。

  +------+        +------+ 入力なし    +------------------+
  | 起動 |------>>| 待機 |----------->>| bootコマンド実行 |
  +------+        +------+             +------------------+
                      |
                      | 入力あり       +--------------------+
                      +-------------->>| コマンドライン制御 |
                                       +--------------------+

bootコマンドの動作

bootコマンドは、環境変数bootcmdに設定された内容を実行します。
環境変数bootcmdはデフォルトで以下のように設定されています。(本来は一行ですが、読みやすさのために改行しています)

if mmc init; then 
    if run loadbootscript; then 
        run bootscript; 
    else 
        if run loaduimage; then 
            run mmcboot; 
        else 
            run nandboot; 
        fi; 
    fi; 
else 
    run nandboot; 
fi

mmcコマンドはMicroSDを操作するためのコマンドです。
runコマンドは、引数に指定された変数の内容をスクリプトとして実行するコマンドです。

コマンドラインによる制御

Hushのプロンプトが表示され、bashなどの一般的なシェル環境と同じようにコマンドを実行することができます。
bootコマンドの実体が、環境変数bootcmdの実行だったことを考えると、環境変数の操作ができれば起動時の動作を制御できることがわかります。

printenvコマンドを使用すると、環境変数とその内容の一覧が表示されます。
setenvコマンドを使用すると、環境変数の値を設定することができます。

実行可能なコマンド一覧を表示するには ? コマンドを使用します。

# ?

参考

2010/07/05


BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2010-12-24 (金) 15:05:19 (2583d)