sh-lilo

bzImageファイルだけでLinuxを起動できるめどは立ったのでinitrdの調査はいったん終了かな。
L-Box(RE2)をどう起動させるかだけど、今のところそろそろUSBメモリが安くなってきてるのでメインのデータ置き場にはUSBメモリを使う予定。PCMCIAタイプのUSB-IFカードを装着して、USBハブで4〜5個くらいUSBメモリを装着してソフトウェアRAIDでRAID5あたりにしようかと考え中。ただ、USBメモリはあまり寿命が長くなさそうなので起動用のルートファイルシステムは別に用意する方向で。


まぁその辺はまた考えるとして、さしあたっての問題はL-Boxに搭載されているliloがシリアルに何も出力しないことだと思う。今のままだとカーネルを変更した後にkernel panicでも起こされたら原因を探ることもできない。。。
liloについて調べてみたらsh-liloというものが存在するらしい。L-Boxに搭載されているliloが同じものかどうかはわからないけど、とりあえずこれをベースにいろいろやってみようと思う。


first.Sがfirstローダ*1っぽいので、ソースコードを覗いてみたらどうやらシリアルへの入出力はBIOSコール(Trap 0x3f)で実行しているっぽい。

/* Output message "L" */
mova message, r0
mov r0, r4
mov #1, r5
mov #0, r0 ! Serial Output
trapa #0x3f

こんな感じで。


仮にL-Boxに搭載されているliloでも同じ処理が入っているとすれば、L-BoxのBIOSはシリアル入出力に対応していないということに。
う〜ん。
真相はわからないけど、とりあえずシリアル入出力をlilo側で実行するように改造してみようかな。

L-BoxのマニュアルによるとCPUはSH7751Rってことなのでルネサスの公式サイトから「SH7750 シリーズ ハードウエアマニュアル」をダウンロードして内容をチェック。シリアル機能は第15章の「SCI」ってのがそうみたい。設定や通信はメモリマップドレジスタで値を読み書きすればできそう。
15.1.4「レジスタ構成」ってページにメモリマップドレジスタのアドレスが載っているけど、「P4」ってのと「エリア7」って2つがある。。。なんだろう。第3章のMMUの説明のところを見たら特権モードのときに「P4」アドレスが使えるのかなって気がしてきた。BIOSはたぶん特権モードで動いたままブートローダに制御を渡すでしょ。きっと。とりあえずP4アドレスでやってみるか。


とりあえず長くなりそうなので続きは後日。

*1:ディスクのMBRに書かれていて最初にBIOSから読み込まれて実行されるローダ