連載
» 2008年09月29日 00時00分 UPDATE

−ザ・組み込み−ソフトウェアのハードウェア化(3):山あり谷あり、非力なマイコンでuClinuxを動かすべし (1/4)

H8マイコンでLinuxを動かすことに挑戦。待ち受けるいくつもの試練を乗り越え、組み込みの“真の面白さ”を実感しよう!!

[鳥海佳孝 設計アナリスト,@IT MONOist]

 前回「えっ、シリアルポートがない!! ターゲットボードとの接続」では、秋月電子通商の「AKI−H8/3069FフラッシュマイコンLANボード(以下、AKI−H8/3069F)」を用いて、マイコン上で動作するプログラムをフラッシュROMに書き込んで、マザーボード上のLEDやLCDが動作するかどうかを確認しました。また、プログラムをフラッシュROMへ書き込む際、通常、ホストPC上からシリアルポート経由で書き込まなければなりませんが、今回使用しているホストPC「KOHJINSHA SA5SX12A」のようにシリアルポートがない場合の対処方法についても併せて解説しました。

 連載第3回となる今回は前回の予告どおり、H8マイコンを搭載した組み込み開発ボードAKI−H8/3069Fに、小型CPUで動作可能なLinux OS「uClinux」を載せ、実際に動かすことに挑戦したいと思います。こんな小さなマイコンでも“OS”が動作するなんて、まさに『ザ・組み込み』ですね。

 それでは前置きはこれくらいにして、早速uClinuxのポーティングに取り掛かってみましょう。


H8マイコンでuClinuxを動かすための心構え

 まず、“この手のこと”を行うときには頭の中で図1のようなこと(構成)をしっかりとイメージできていなければなりません。

システム構成 図1 システム構成

 H8マイコン上でuClinuxが動作して、コマンド入力を行えるシェルが起動したとしてもAKI−H8/3069Fには、キーボードの端子やモニターの端子がありません。つまり、AKI−H8/3069F単体では“この手のこと(入出力など)”ができないため、必ず“寄り添う”ホストPCが必要になるということです。

 連載第1回「Windowsを傷付けずにUSBからLinuxをブートせよ!」で用意したホストPC(Linuxマシン)であれば、キーボードやモニターの端子が搭載されているだけではなく、ハードディスクやメモリが潤沢にあります。こうしたリソースを使わない手はありません。ホストPCのデバイス上にターゲットボードのOS(uClinux)の起動に必要なカーネルなどのファイルを置くことによって、非力なマイコンでもOSの起動を実現できるのです。

 では、今回使用しているターゲットボード「AKI−H8/3069F」の場合、どうすればよいのでしょうか?

  • BIOSに代わるプログラムは?
  • カーネルはどこから起動されるの?
  • ハードディスクなんかないけど、ファイルシステムのマウント先はどうするの?

など、さまざまな疑問がわいてくると思います。

 このように『それなりの“OS”を起動する』といった瞬間に、いろいろな問題点や解決すべきことが浮かんできます。この辺りが、まさに組み込み機器の取り扱いを難しくさせている要因であり、かなり幅広い知識が要求される関門でもあります……。

 「じゃあ、お手上げ〜」と白旗を振るのは簡単なことですが、それでは組み込みの世界の魅力を実感することもできないでしょう。手をこまぬいていたり、躊躇(ちゅうちょ)したりしていては何もはじまりません。本連載をはじめ、ほかのWebページや書籍などから、いろいろな情報を集めながら1つ1つ難問をクリアしていきましょう! これが組み込み開発のだいご味です。くじけずに付いてきてください!

H8マイコンでuClinuxを動かすための準備

 それでは、uClinuxを動かす準備を具体的に進めていきましょう。

 はじめに、ホストPCの設定からです。H8マイコンの開発環境と、このボード(AKI−H8/3069F)に搭載できるuClinuxのカーネルソースを準備します。以下のリンクから「h8tools_bin.tar.gz」と「uClinux-dist-sbcrbook20070218.tar.gz」の2つのファイルをダウンロードして、ホストPCの任意のディレクトリ(今回は、/root/3069Fとします)に保存します。

開発環境のインストール

 続いて、ダウンロードした開発環境(h8tools_bin.tar.gz)のインストールです。以下のコマンドを実行してください。

# cd ~/3069F
# tar zxvf h8tools_bin.tar.gz -C /opt 

 ここで、インストールした開発環境をどこからでも使えるようにするために、以下のようにコマンドパスを通しておきます。

# export PATH=/opt/bin:$PATH
# which h8300-linux-elf-gcc
/opt/bin/h8300-linux-elf-gcc 

 うまくコマンドパスが通ったら、次回以降のシェル起動でもこのパスが有効になるように、ホームディレクトリの下にある「.bashrc」の末尾に「export PATH=/opt/bin:$PATH」を記述しておきます(リスト1)。

# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ls='ls -F --color=auto'
alias eng='LANG=C LANGUAGE=C LC_ALL=C'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
umask 022
export PATH=/opt/bin:$PATH 
リスト1 .bashrcの内容

uClinuxカーネルソースの準備

 次に、以下のコマンドで先ほどダウンロードしたカーネルソース(uClinux-dist-sbcrbook20070218.tar.gz)を展開します。今回はカーネルソースを「/usr/local/src」に置いていますが、実際はどこに置いても構いません。

# tar zxvf uClinux-dist-sbcrbook20070218.tar.gz -C /usr/local/src 

 そして、カーネルをコンパイルするためにカーネルソースを置いた場所に移動して、カーネルパラメータの設定を行います。細かいパラメータの設定は前回紹介した書籍「はじめる組込みLinux H8マイコン×uClinuxで学べるマイコン開発の面白さ」(ソフトバンク クリエイティブ)の中に書かれていますので、詳しく知りたい方はそちらを参考にしてください。

# cd /usr/local/src/uClinux-dist
# make menuconfig 

 カーネルパラメータの設定をした後、以下のコマンドを実行します。

# make dep
# make 

 この配布されているカーネルソースは、uClinuxのカーネルの設定・生成だけではなく、BusyBoxなどの設定・生成も行っていますので、makeが終了するたびに各ツールの設定メニューが立ち上がります(その都度、詳細を設定してはmakeを実行する)。今回は筆者の方でカーネル「linux.bin」を準備しましたので、もしご自身で設定するのが面倒であれば以下のリンクからダウンロードして、「/root/3069F」に配置してください。


ルートファイルシステムの準備

 これでカーネルの準備ができました。続いて、「ルートファイルシステム」を用意します。こちらはカーネルソースに組み込まれていますので、それを流用するだけですが、デバイスノードの作成などを行う必要があります。詳細は書籍やWebなどの情報を参考にしていただくとして、今回は筆者が作成したルートファイルシステムの圧縮ファイル「romfs.tar.gz」を以下のリンクからダウンロードして、利用してください。

 これでカーネルとルートファイルシステムの準備ができました。ここでルートファイルシステムをあらかじめ展開しておきましょう。以下のコマンドで、先ほどダウンロードしたファイルのあるディレクトリに移動し(今回は~/3069F)、ファイルを展開します。

# cd ~/3069F
# tar zxvf romfs.tar.gz -C /opt 

 ファイルの展開が完了すると「romfs」というディレクトリが作成されますが、この名前ではちょっと味気ないので、以下のコマンドを実行して意味のある名前(aki3069f)に変更します。

# mv /opt/romfs /opt/aki3069f 

 これで準備ができましたが、これらのファイルをどこに置いて、どのような方法でH8マイコンに実行させるのでしょうか? 前回のようにプログラム全体をフラッシュROMに書き込めればよいのですが、H8マイコンuClinuxシステムが確立していない状況で、カーネルを含めたファイルをその都度ROM化するのも面倒ですし、今回はそうもいかないようなので……。

ブートローダの書き込み

 そこで登場するのが「ブートローダ」です。世の中にはさまざまなブートローダが存在します。今回ホストPCで採用したVine Linux 4.2では「GRUB」、組み込み機器で多く採用されている「U-Boot」、さらに今回のターゲットとなるH8マイコンで採用されている「RedBoot」などがあります。

 当然、今回はH8マイコンがターゲットなのでRedBootを用います。幸い、AKI−H8/3069F用にカスタマイズされたブートローダが以下のリンクにありますので、それを利用することにします(今回、ダウンロード先は「/root/3069F」とします)。

 ブートローダのダウンロードが完了したら、USB−シリアル変換ケーブル(注)でホストPCとターゲットボードを接続し、「h8write」コマンドでこのファイル(redboot_std_2mb.srec)をH8マイコンのフラッシュROMに書き込みます(ボードの設定や書き込み手順については前回の解説を参照のこと)。

※注:USB−シリアル変換ケーブルを利用する経緯などは、第2回「えっ、シリアルポートがない!! ターゲットボードとの接続」を参照のこと。


# ./h8write -f20 -3069 redboot_std_2mb.srec /dev/ttyUSB0
H8/3069F is ready!  2002/5/20 Yukio Mituiwa.
writing
WARNING:This Line dosen't start with"S".
Address Size seems wrong
WARNING:This Line dosen't start with"S".
Address Size seems wrong
(中略)
EEPROM Writing is successed. 

 前回と比べて、今回はプログラムのサイズが大きいので、書き込みにかなり時間がかかります。メッセージの最後に「EEPROM Writing is successed.」と出力されれば、ブートローダの書き込みは完了です。

       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.