SolidRun CuBoxを使ってみる(その4)

標準

CUBOXの話つづきです。




OS(debian)を新規インストールする前段階、u-bootほかについて。


さて、ここからコンソール接続の状態で操作していくわけだが、通常のPCなどではハードウェアの詳細をモニタ・設定できるBIOS画面がある。

しかし、このCUBOXほかARMプロセッサ系は、元々組込み用的な性格もあってか、BIOS画面に相当するようなものが存在しない模様。

そのかわりにBIOS的な動作を一体化させたようなブートローダ(記憶メディアから起動プログラムを読み込む最初のプログラム)であるu-bootというブートローダが最初に起動するようになっている。

通常のLinuxでは「BIOS⇒ブートローダ⇒カーネル⇒init(システムの一番最初のプロセス)」と起動する。

そのうちのブートローダは、HDD等の起動ディスクの一番最初のセクタに記録されているが、CUBOXでは本体にSPIフラッシュメモリの領域を持っていて、そこにフラッシュされて出荷されている。

ここは書換え可能になっていて、あとで書くが一度消してしまい、

えらいことになった。(汗)

このSPIフラッシュに記録されているu-bootが消えてしまうと、ほんとうのブートストラップローダ(自動起動も、ウンともスンとも言わないコマンドライン)だけの画面になってしまう。
(ここはさすがに書換え不能で消えないっぽい)




で、このu-bootによる起動、という仕様のため、CDからのインストールができず、コンソールを使った操作で、インストーラーの初期起動をしてやらなければいけない、ということらしい・・・。



※さて、ここから以降はLinuxのディストリビューションの一つであるDebianに限った方法。
ほかのディストリビューションなどで同じやり方ができるか不明―多分できないのでご注意を。
(ほかのディストリビューションは公式サイトのwikiに、それぞれのやり方書いてあるのでそれを参照に)

あと当然ながら以降の作業に関しては自己責任でお願いします。

※本項を参照してなにかトラブルあっても当方は責任持ちかねます。



ではどうやって、例のCDからインストールするときと同じような、debianのインストーラを起動させるのか?

まず、このu-bootでの起動環境だと、カーネルとインストール用のinitrd(初期起動プログラムの一つ)をu-boot形式に変換しておく必要があるらしい・・・。

で、その変換を行うために、mkimageというプログラムがいる。

以降、当然ながら、Linux環境での操作になりますわな。(windowsでもあるかもしれんが)
自分はほかにdebianを入れてあるPCがあったので、それにインストールをした。

※ほかにLinux機を持ってらっしゃらない方はCUBOX自体を使うと良いでしょう。
ただ、予備のPCなどがあればdebianなりubuntuを入れておくと作業は楽だと思う。

以降、u-bootがらみの作業がしばらく続くけれども、参照したのは

・公式サイトのwiki
メディアラボ社u-bootマニュアル

特にメディアラボ社のu-bootマニュアルはpdfなので手元にダウンロードしておくと良いと思う。
直接CUBOXに合致した記述があるわけではないが、u-bootの日本語コマンドリファレンスとしてすごく重宝する。

これにはもの凄くお世話になった。この場を借りて御礼申し上げます。m(__)m


では、いざ実際の操作へ。

<mkimageのインストール>

前述のように、まずmkimageを使えるようにしなければならない。

なので、CUBOXなり別Linux機なりで


(ホスト名)# apt-cache search mkimage

あるいは

(ホスト名)# aptitude search mkimage

とパッケージの検索コマンドを入力すると


uboot-mkimage – generate kernel image for U-Boot

というのがあると思うので、それをインストールする。


(ホスト名)# apt-get install uboot-mkimage

あるいは

(ホスト名)# aptitude install uboot-mkimage

でよろしかろう。

※このあたりは選択した環境ごとでうまく読み換えてください。

これでmkimageコマンドを使って、必要なファイルをu-bootで利用できるイメージへと変換できるようになったはず。


<u-boot用起動イメージの作成>

つづいて変換作業。
初期起動に必要なファイルは、以下の三つ。

・「uImage」 (カーネルをu-boot用に変換したもの)

・「uImage.initrd」 (initrdをu-boot用に変換したもの)

・「boot.scr」(起動時用のスクリプトファイル)


ここで公式サイトのwikiだと

「これらのファイルはオリジナルSDカードのプリインストールしてあるのをコピーして使う」

とある。


Copy or compile Cubox kernel

Copy /boot/boot.scr and /boot/uImage from the original sdcard.

If you want to build your own kernel, follow the instructions on http://www.solid-run.com/mw/index.php/Building_Linux_Kernel .

なのでubuntuの起動しているCUBOXにUSBメモリをぶっさしてもいいし、CUBOXからmicroSDを引っこ抜いて別PCのdebianでも、Windowsでもいいので認識させると、bootというフォルダのなかに

「uImage」

「boot.scr」

の二つのファイルは存在しているので、それをコピーする。

boot.scrは起動スクリプトファイルなんだけども、インストール作業時には不要なかんじ。
 ただし、インストール後、システムを普通に起動させるときには必要なファイルの模様。
 なので、これも指示通りこの時点でコピーを取っておく。

で、結局は残る一つのファイル


「uImage.initrd」


だけを、実際にmkimageで変換しなければいけない、ということのよう。
変換するためのオリジナルファイル(initrd.gz)は、debianのftpサイトからダウンロードする。

で、ここで一点注意!

公式のwikiにそのダウンロード先のリンクが貼ってあったが、自分はそれを鵜呑みにしてえらい目にあったのでご報告。

(公式wikiの該当部分の記述)


クリックして拡大してもらえばわかると思うが、これ、書いてあるリンクがdebianの現行バージョン(squeeze)でなくて次バージョン(wheezy)用のリンクなんですな。

当然、開発中のやつなのでカーネルが最新のバージョン。(3.x系)

そして先ほど「コピーして使う」とあったファイルのうち、「uImage」のほうは、カーネルをu-boot用に変換したものなんだけど

カーネルのバージョン違う=現行カーネル(2.6系)じゃね?

なのでここからファイルを落としてコンバートしても、このinitrdと2.6系カーネルではちゃんと動かないっぽい
(インストール作業の途中でカーネルパニックで止まる)

ええ、ほんと些細なことなんですが、これに気付くまでえっらい時間かかりましたよ。 orz

なので基本的に以下からダウンロードされることをオススメします。(日本のミラー)

FTP ディレクトリ
ftp://ftp2.jp.debian.org/debian/dists/squeeze/main/installer-armel/current/images/versatile/netboot/



ここから現行バージョン(squeeze)用のinitrdのファイルである

initrd.gz

をダウンロードする。
で、このファイルをmkimageをインストールしてあるPCにてu-boot用イメージに変換する。

変換のコマンドは以下。
(実際に変換するときは一応公式のwikiをちゃんとみて変換しておくれ)


<uImage.initrd>起動RAMディスクイメージをuboot形式に変換する

mkimage -A arm -O linux -T ramdisk -C gzip -n “netboot image” -a 0x1a000000 -e 0x1a000000 -d initrd.gz uImage.initrd


「-A」・・・アーキテクチャ。ARMなのでarmと指定。
「-O」・・・OS。Linuxなのでlinuxと指定。
「-T」・・・タイプ。イメージファイルのタイプを指定。initrdは起動用RAMディスクイメージなのでramdiskと指定。
「-C」・・・元ファイルの圧縮形式を指定。拡張子gz=gzip形式なので、gzipと指定。
「-n」・・・名前。ここは任意の模様。起動シーケンスそのものには影響ない?
「-a」・・・展開アドレス。展開するときにここで指定したメモリアドレスに展開する?
「-e」・・・実行アドレス。展開したイメージを実行するアドレスを指定する。
「-d」・・・データファイル。元ファイル名と出力ファイル名。変換元のファイルと変換後のファイルの名前を指定。(半角スペースで区切り)

※このオプションの意味については上記メディアラボ社のu-bootマニュアルから。
 メモリアドレス等は公式wikiの記載どおり。
 繰り返しになるけど自己責任で

以上をmkimageの実行できる、initrd.gzファイルのある環境で実行すると、

「uImage.initrd」

というファイルが出来上がる。
これでインストールに必要なファイルが全部そろった。

次にこの3つのファイルをインストール用に使うUSBメモリへコピーする。

USBメモリは通常のFAT32フォーマットでよいが、Linuxなどでext2、ext3フォーマットにしてしまっていると、後で若干操作が変わってくるのでその点はご留意を。


さらにここでもう一つ注意点。

CUBOXには通常サイズのUSBスロットは二つあるが、インストールをするときには上段のほうのUSBスロット(USB端子0番?)を使う必要がある?



このあとCUBOXをコンソールで操作していくんだが、その際にアクティブなUSBデバイスをスキャンする行程がある。

その際にどうも上段のUSBスロットしか、ストレージデバイスとして認識してくれないっぽいのよね。

自分の勘違いかもしれませんが、とりあえず書きとめておく。


ということで、USBスロットにコピーした3つのファイルの入っているUSBメモリをさし、コンソールケーブルをつなぎ、teratermを立ち上げ、事前に設定してある設定ファイルを読み込み・・・・・ここでようやく・・・再度CUBOXの電源を入れる。

長い・・・長いわ・・・orz
(以降次回)



<長いついでのオマケ>

上記ではカーネル相当のイメージは(uImage)は最初からついてきてたmicroSDに入っているものをコピーしてつかったが、せっかくなのでカーネルもmkimageコマンドでu-boot形式に変換できるかやってみた。

元となるファイルは、上記ftpサイトの

vmlinuz-2.6.32-5-versatile

これをmkimageコマンドでuImageファイルとして変換してみる。

<uImage>カーネルイメージをuboot形式に変換

mkimage -A arm -O linux -T kernel -C gzip -n “Linux-2.6.32-5-versatile” -a 0x00008000 -e 0x00008000 -d vmlinuz-2.6.32-5-versatile uImage

※展開・実行アドレスに関しては、CUBOX添付のuImageがブートするときに表示される内容を参考にした。

で、uImageファイルとしてはできあがるんだが、そのままではインストール時には使えないっぽい。

いくつか必要なファイルを読みに行く挙動をする際に、「必要なファイルがない!」的な感じで再度CUBOXをリセットして、起動ファイルのスキャニング動作を繰り返す状態になってしまうう模様。

ということは元々添付のuImageファイルはそのあたりを調整してビルドしてあるカーネルということなんかいな。

そこまでは、さすがに今回手を出しませんでした。

以上、参考までに。

コメントを残す