第1章 BootLoader のコンセプトと機能
1.1 組み込みLinuxソフトウェア構造とディストリビューション
組み込みLinux システムのソフトウェアは下記の部分に分ける:
1) ロードプログラム:内部 ROMのファーム起動コードと BootLoader を含む。
内部ファーム ROM はメーカーがチップ生産時のファームウェアで、BootLoaderをロードする機能である。
一部のチップ は複雑で、例えばOmap3 はflash中コードがない時の起動方法は複数あり:USB、UART またはイーサネット等、S3C24x0は Norboot とNandbootの2種類を含まれる。
2) Linux kernel と drivers。
3) ファイルシステム:ルートファイルシステムと Flashに 構築する メモリーデバイスのファイルシステム(EXT4、UBI、CRAMFS 等)を含まれる。ファイルシステムは管理システムの各種設定ファイル及びシステムでユーザープログラムを実行する環境及プラットフォームを提供する。
4) アプリプログラム。ユーザーカスタマイズアプリプログラム、ファイルシステムに保存する。
Flash メモリー、汎用仕組みは下記の通り:
多くの場合には上記の仕組みになりますが、あるルートファイルシステム、例えばinitramfsで、他の部分はカーネルイメージに圧縮され;または、一部は Bootloader パラメータエリアがないなど。
1.2 組み込みLinuxで BootLoader の必要性
Linux カーネル起動時、カーネルイメージはメインメモリの指定位置に保存する以外、CPUがある程度の条件を満たす必要がある:
CPU 起動の時、メモリーコントローラーも初期化しないため、メインメモリーでプログラム実行や Linux カーネル環境を実行できない。CPU 及び他の外部デバイスを初期化するため、 Linuxカーネルはシステムメインメモリーで実行するため、システムはLinux カーネル起動の必要条件を満足するには、カーネル実行前のブートプログラムが必要とする(Boot Loader)。
BootLoader は Linux だけでなく、殆どのOSのデバイスが必要とする。そしてPC の BOIS は Boot Loader の一部であり(初期のブート機能で、外部メモリーの BootLoaderもある)、Linux PCにとって、Boot Loader = BIOS + GRUB/LILO。
1.3 Boot Loader の機能と選択
従って:BootLoader は即ちOSカーネル起動する前実行するサブプログラム。このプログラムを介し、ハードウェアデバイス初期化出来、システムのソフトハードウェア環境を適応の環境に設定し、最後に他のデバイス(Flash、イーサネット、UART)でカーネルイメージとメインメモリーにロードし、入口アドレスへジャンプする。
そして、 BootLoader はハードウェアを直接アクセスするため、ハードウェアに依存され、ロードするOSにより、異なる選択がある、組み込み業界でも同じ状況。 S3C24x0に対し、Linuxをブートするには、一般は韓国の mizi社の vivi またはDENX ソフトウェアプロジェクトの Das U-bootを採用する;Win CEブートの場合はEboot。 StrongARM 構築のLART開発には、 Jan-Derk Bakker と Erik Mouw 発表の Blobを採用(Boot Loader Object)。 eCos システムの場合はRedhat社の Redbootを使われる。
全ての組み込みアプリケーションに適用する BootLoaderは基本的に不可能であるため、同じBoot Loaderコードはより多いOSをサポートできるようにし、移植性を向上するのは可能である。U-boot はマルチプラットフォームOSをサポートする良い例である。これもU-bootの優位性で、S3C2440 開発段階で U-bootを理解できれば、他のプラットフォームへの移植は簡単とする。そして U-bootコードの仕込みは改善され、新機能の追加も簡単となる。
第2章 U-boot について
2.1 Uboot の始まり
U-Boot は Das U-Boot の略称、Universal Boot Loader、GPL 条項従うオーペンソースコード項目である。最初ドイツの DENX ソフトウェアプロジェクトセンターの Wolfgang Denk は8xxROM と FADSROMのソースコードに基づきPPCBoot プロジェクトを作成した、次はプロセッサーのサポートを追加する。その後、Sysgo Gmbh はPPCBoot をARM プラットフォームに移植し、ARMBootプロジェクトを作成した。最終的に PPCBoot プロジェクトとARMBoot プロジェクトに基づき、U-Boot プロジェクトを作った。2002 年 12 月 17 日で最初のバージョンU-Boot-0.2.0は発表され、 PPCBoot と ARMBoot サポートも同時に終了とする。
現在、U-Bootは汎用の BootLoaderとして、PowerPC、ARM、X86 、MIPS、NIOS、XScale などの百種類以上の開発ボードに移植され、柔軟性、汎用性が高いのオーペンソース BootLoaderである。U-Bootは DENX の WolfgangDenkがサポートする。
2.2 Uboot の開発状況とリソース
最初のU-boot のバージョン晩後は X.Y.Z で表示される、 0.2.0~1.3.4。その後は年月日を追加した、 2008.11 ~ 2010.3まで平均3ヶ月毎新バージョンを開発した。毎回コードの構造と定義は修正と改善され、合理性や規範性を上がり、機能を強大させるに対し、移植の難易度逆に下がり、修正点は少なくなる。
U-bootはメインバージョンの他、 U-bootのGitコードレジストリには各種のCPU構築のサブバージョンがある、一定の編集後、メインバージョンに追加出来る。
次は U-boot ソースコードのネットワークリソース
第3章 開発環境構築
3.1 クロスコンパイルツールチェーンのインストール
mini2440にU-bootをコンパイルする時、クロスコンパイルツールチェーンを使用する。付属のクロスコンパイルツール(gccバージョン 4.3.2)、またはrosstool-0.43、 crosstool-ngを使用し自行コンパイル出来る。
ツールを使用しクロスコンパイルツールチェーンコンパイルするには、下記の文章を参照できる。
crosstool0.43でARM-Linux クロスコンパイル環境構築
crosstool-ngでLinuxクロスコンパイル環境構築(S3C2440(armv4t))
クロスコンパイルツールチェーンをコンパイル後、環境変数の PATHにコンパイルツールのパスを追加する(即ちarm-*-linux-*-gcc のパス)、こうして、コンパイル時システムはコンパイラのコマンドを識別出来る。 Ubuntu 下の変更方法は下記の通り:
vi ~/.profile、
最後に:PATH=゛<クロスコンパイルツールのパス>:$PATH゛を追加する。
3.2 ネットワークサービスの設定
U-bootを使用する時にホストの TFTP と NFS の2つのネットワークサービスを利用する、開発前で設定する。次はUbuntu 下でapt-getを使用し インストールする:
3.2.1 TFTP サービスをインストールと設定
TFTP サービスをインストールと設定の手順は下記の通り:
(1)tftp-hpa、tftpd-hpa と openbsd-inetd プログラムインストール;
(2)設定ファイル/etc/inetd.conf編集;
(3)設定ファイルのパスに従い、tftp ディレクトリ作成、ディレクトリ権限変更;
(4)tftp サービス再起動;
(5)ローカル伝送テスト。
インストールと設定手順のスクリプト:
3.2.2 NFS サービスをインストールと設定
NFS サービスのインストールと設定の手順は下記の通り:
(1)NFS カーネルサービスをインストール;
(2)portmap サービス再設定、/etc/hosts.deny と/etc/hosts.allow 設定ファイル変更、portmap サービス再起動;
(3)NFS サービスの設定ファイル/etc/exports編集、サービスディレクトリを追加と設定、設定を再インポート;
(4)NFS サービス再起動、ロード出来るディレクトリを検索;
(5)ローカルマウントをテスト。
インストールと設定手順のスクリプト:
3.3 シリアルプログラムのインストールと設定
U-bootを使用する時に、シリアルで開発ボードと通信のため、シリアル端末でプログラムが必要とする。 Linuxでよく使用するシリアル端末:minicom と C-kermit のインストール及び設定を説明する(Ubuntuでapt-get インストール)。
3.3.1 C-kermit のインストール設定
Linux ではシリアルを介し、ファイルを開発ボードに伝送する。
(1)ckermit プログラムをインストール;
(2)ckermit設定ファイル~/.kermrcを編集。
3.3.2 minicom のインストールと設定
minicom はLinux システムでよく使うシリアルターミナルツール、クイックインストール設定手順は下記の通り:
(1)minicom プログラムをインストール;
(2)minicom -s コマンドで設定ファイル~/.minirc.dflを作成する。
コマンド minicom -s実行、設定インタフェースに入る:
1.矢印キー選択゛シリアル設定゛:
対応の文字キーを設定し、例えばノート変更は A、カーソルを゛シリアルデバイス゛オプションに移動、値を変更する。 Eを選択する場合:
E と Q選択、設定完了後、゛設定゛メニューに入り、 ゛モデムとダイヤルアップ゛、下記の項目的データをクリア:
完了後、゛設定゛→ ゛ dflに保存゛、設定を~/.minirc.dflに保存、゛終了゛。全て完了後、シリアルで開発ボードと接続できる。
またGUI画面を搭載するシリアルターミナル:gtkterm、GUI設定簡単が、ファイルを伝送機能はない。
----------続く