[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: L-router / L-board
Takao Shinohara <shin@sm.sony.co.jp> writes:
> # カーネルの作り方や起動方法などの情報は後ほどまとめて報告します。
メモ程度の内容ですが、L-RouterでのNetBSDカーネルの起動方法等の情報です。
カーネルソースの変更点等はまた別途。
篠原
/* -*- Indented-Text -*- */
L-RouterでNetBSDを起動する方法
[用意するもの]
1. シリアルコンソール
PCなどにクロスケーブルで接続する。115200bps。結線によってはハーウェアフ
ロー制御の関係で(?)動作しないため、ハードゥエアフロー制御を禁止するか、
適切な接続のクロスケーブルを用意するかする必要がある。
手持ちのケーブルでは、インターリンク用はだめでLOASのクロスケーブルは大丈
夫だった。
2. ftp/httpサーバ
L-Routerにダウンロードするカーネルバイナリを置くためのサーバ。ftpもし
くはhttpプロトコルが使用できる。
3. ホストマシン
NetBSDのカーネルをクロスコンパイルするホストマシン。2.と兼用の方が簡単。
[L-Routerのファームウェアの更新方法]
L-RouterのファームウェアはFLASH ROMに書き込むバイナリイメージ形式で用意
されており、それを動作中のLinuxでROMに書き込むことで内容を更新している。
(ROMモニタでシリアルポートからダウンロードすることも可能だが、時間がかか
るのでお勧めできない。ただし、FLASH ROMに書き込まずにデバッグすることが
可能なので、安全性は高いと思われる。)
詳細は以下のとおり。
ROMは以下のように分割されている。(実際の物理アドレスは0x1f000000から始ま
る。)
0x00000000-0x00600000 : "factory shipped version kernel"
0x00600000-0x00c00000 : "updated version kernel"
0x00c00000-0x00c40000 : "monitor"
0x00c40000-0x00c80000 : "boot flags"
0x00c80000-0x00d00000 : "user defined configuration"
0x00d00000-0x01000000 : "reserved"
先頭12MBの前半6MBに工場出荷時のカーネルイメージ(RAM Diskで動作する)が書
き込まれている。後半6MBは更新用のカーネルイメージの領域である。
0x1fc00000からの256KBはROMモニタが書き込まれている。
0x1fc40000からの256KBはROMモニタの起動方法を指定するパラメータが書き込ま
れる。実際には先頭の8バイトしか使われていない。
0x1fc80000からの512KBはL-Routerの設定内容が記録される。minix fsフォーマッ
ト。
0x1fd00000からの3MBは未使用。
Linux上では、上記の各領域はブロックデバイスでアクセスできる。デバイス名
は以下のとおり。
brw-r--r-- 1 0 0 31, 0 Nov 20 14:36 /dev/mtd_kernel_factory
brw-r--r-- 1 0 0 31, 1 Nov 20 14:36 /dev/mtd_kernel_update
brw-r--r-- 1 0 0 31, 2 Nov 20 14:36 /dev/mtd_monitor
brw-r--r-- 1 0 0 31, 3 Nov 20 14:36 /dev/mtd_config_monitor
brw-r--r-- 1 0 0 31, 4 Nov 20 14:36 /dev/mtd_config
カーネルの更新は/sbin/kernel-update(shellスクリプト)によって実行される。
kernel-updateは以下のような処理を行なう。
1) ramdiskを初期化してマウント
2) wgetコマンドでカーネルファイルを取得してramdisk上に置く
3) カーネルを/dev/mtd_kernel_updateに書き込む
4) 更新されたカーネルが起動するように/dev/mtd_config_monitorを書き換える
詳細はkernel-updateを参照。
ROMモニタは0x1fc40000からの4バイトにマジックナンバ(0xde 0xad 0xbe 0xef)
がある場合、続く4バイトに書かれているアドレスにジャンプする。マジックナ
ンバがない場合は工場出荷時のカーネル領域(0x1f000000)にジャンプする。
この仕掛けを利用して、ftp/httpサーバに置いたNetBSDカーネルのバイナリイメー
ジをROMに書き込めば、NetBSDを起動することができる。
# /sbin/kernel-update ftp://user:password@host/.../netbsd.bin
# reboot
[NetBSDカーネルイメージの作り方]
ROMに書き込むバイナリイメージはobjcopyでELFファイルから作れる。
% mipsel-netbsd-objcopy -O binary netbsd netbsd.bin
VR4122用のコードがあるhpcmipsのカーネルは0x80030000からloadされるように
なっているが、これはそのままで良い。カーネルのバイナリイメージの先頭に
ROMからRAMにカーネルをコピーして制御を移す簡単なブートローダを仕込めばよ
い。(Linuxカーネルはそのように起動していた。)
もう少し凝ったブートローダ、たとえば、ROM内のELFイメージ用のローダを作る
こともできるが、手始めは簡単なもので十分である。
[工場出荷状態への戻し方]
マニュアルに書いてあるとおり、スイッチを押しながら電源を入れると工場出荷
状態に戻る。やっていることは、/dev/mtd_config_monitorの領域をクリアして
いるらしい。
工場出荷時のLinuxが起動したら適当にネットワークの設定をして再度カーネル
の更新を行なえばよい。
以上