BAKの日記: OpenBlockS266 めも
ファームウェアアップデート
にチャレンジ.ここで言う,「ファームウェア」とは,Linux カーネルのことである.
まず,方法としては
- flashcfg コマンドによる書き込み
- bootp + tftp による書き込み
がある.
flashcfg は,Linux 上で行う.この方法は基本的には「綱渡り」であるといえる.一度アップデートにしくじって,起動不能のファームウェアを書き込んでしまうと,この方法を使用することはできない.
というわけで,bootp + tftp のほうが本命,というか,まず始めに使用可能にすべき手段であるといえる.こちらは OpenBIOS が行う動作なので,Linux が起動不能となっても復元可能であるからである.
というわけで,とりあえず x86 の Linux マシンで DHCP サーバを立てて,こいつに bootp を喋らせてみるが,うまく動作しない.bootp をサポートしている大抵の評価ボードでは問題なかったんだけどなぁ.tcpdump で,パケットをダンプすると,「bootp リクエスト」「bootp リプライ」という要求・応答パケットは確認できるのだが,そこで何度もリトライを繰り返している.tftp のブートファイル名がうまく取得できていない or 送り出せていないのか.うーむ.
しかたがないので,マニュアルに書いてある通りに,Windows で動作する bootp サーバと tftp サーバを get して,マニュアル通りにセットアップする.今度はうまくいく.けど,これじゃあ使いにくいな.困ったもんである.
が,とりあえず「突破」ということにしておこう.
カーネルコンパイル
にチャレンジ.この前は,デフォルトの設定のままでコンパイルしていたのだが,今度は設定をいじってみる.
ついでに,クロスコンパイル用の設定についてもメモしておく.トップディレクトリの Makefile を以下のように編集する.
…
# アーキテクチャの設定
ARCH := ppc
…
# クロスコンパイラの設定
CROSS_COMPILE =powerpc-redhat-linux-
…
# カーネルモジュールのインストールパス
INSTALL_MOD_PATH := $(TOPDIR)/modules
…
# depmod コマンド実行の抑制
# if [ -r System.map ]; then $(DEPMOD) -ae -F System.map $(depmod_opts)
$(KERNELRELEASE); fi
…
アーキテクチャの設定は,デフォルトでは自動判定するようになっている.これでは x86 と判定されてしまうので.
クロスコンパイラの設定,であるが,make から toolchain を呼び出す時にここに指定したプリフィクスが付くようになる.例えば gcc は powerpc-redhat-linux-gcc となる.
ちなみに Linux カーネルのコンパイルでは glibc は参照されず,自前のソースだけで build できるよう構成されている.このため,クロスコンパイル用の gcc はファーストステージ,というか,glibc ビルド用の「とりあえず版」gcc で問題ない.実は,glibc のビルドがうまくいかなくて完全版の gcc はインストールしていないのだが,これでうまく行くことはわかっているのでこの問題は放置プレイにしてあったりするのである.
話を元に戻して,次は,カーネルモジュールのインストールパス.これはデフォルトでは設定されていない.設定されていないと /lib/modules/2.4.20 なんかのディレクトリにインストールされる.これではホスト環境のカーネルモジュールと混ざってしまって面白くないので,linxu-2.4.20/modules ディレクトリの下にカーネルモジュールを集めるよう,設定をする.
最後の,depmod コマンドの抑制,について.make modules_install を実行すると,デフォルトでは depmod コマンドが実行される.が,ディレクトリも移動させてしまい,これは意味がないのでスキップさせる.
で,make zImage で zImage.treeboot というファイルができあがる.これを「ファームウェアアップデート」でカーネル領域に書き込んでやればよい.
カーネルモジュールについては,make modules modules_install で linux-2.4.20/modules/lib/modules/2.4.20 以下にビルドされる.起動後にターゲットマシンにこれをディレクトリごと持っていき,depmod を実行してやればおっけー.
OpenBlockS めも More ログイン