このページは「24環境」の情報です

第3回 sh-lilo

海老原祐太郎
2002/8/17

2002年8月時点での最新sh-liloを導入してみます。
最大のメリットは append= 行が使えるようになったこと。
これでカーネルパラメータの指定が楽になりました。

ダウンロード

cvsを使ってダウンロードします

$ cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/superh login
Logging in to :pserver:anonymous@cvs.m17n.org:2401/cvs/superh
CVS password: <リターン>
$ cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/superh co lilo
cvs server: Updating lilo
cvs server: Updating lilo/precompiled
カレントディレクトリに lilo/ というディレクトリができると思います

コンパイル

特に変更することはありません。そのまま make するだけです。

~/lilo$ make clean
rm -f *.o *.exe *.bin tmp_make
rm -f lilo boot.b
~/lilo$ make
sh3-linux-gcc -c -O2 -I. -pipe -fPIC -DIGNORECASE -DVARSETUP -DREWRITE_TABLE -DLARGE_EBDA-DONE_SHOT \
-DPATH_MAX=255 lilo.c In file included from lilo.c:27:
略
sh3-linux-ld -T second.lds -EL second.o string.o -o second.exe -Ttext 0x8c201000
sh3-linux-objcopy -R .comment -S second.exe -O binary second.bin
cat first.bin second.bin >boot.b
~/lilo$

lilo と boot.b という2個のファイルができあがります。
lilo は sh用の実行プログラムで、sh-linuxマシンの /sbin/lilo にコピーします。
boot.b は sh用のブートローダで sh-linuxマシンの /boot/boot.b にコピーします。

liloバージョン

sh-lilo を使うときにはバージョンに注意しなければなりません。
単にmakeしただけだと、version 20.0 用の boot.b が出来上がります。
しかし開発機の/sbin/liloがversion21.7だったりするとバージョンミスマッチエラーが出ます。
かなり強引ですがバージョンを強制的にあわせてしまいます。

fisrt.S 変更前

#if 1
/* EDIT HERE ! */
! Depends LILO's version
.word 20
#else
/* v--- Major Version */
.word 4*256 + 21
! /* ^--- Minor Version*/
#endif

first.S 変更後

/* v--- Major Version */
.word 7*256 + 21
! /* ^--- Minor Version*/

上位バイトがマイナーバージョン、下位バイトがメジャーバージョンになります。

このようにversion21.7として変更した boot.b は、判別しやすい様に sh-linux機の/boot/boot.b.2107 といった
ファイルとして保存しておくとよいでしょう。

開発機でクロスでliloを打ち込む

クロス sh-linux機の /etc/lilo.conf-cross ファイルを用意します。
開発機にマウントしているなら /mnt/etc/lilo.conf-cross になるでしょうか。

linear
boot=/dev/hde  (開発機から見たコンパクトフラッシュ)
disk=/dev/hde  (開発機から見たコンパクトフラッシュ)
bios=0x80
install=/boot/boot.b.2107  (ブートローダ version 21.7用)
image=/boot/vmlinuz
label=linux
root=/dev/hda1             (CAT68701から見たroot / パーテーション)
read-only
append="console=ttySC0,115200 mem=32M"

開発機からliloを打ち込みます

# lilo -r /mnt -C /etc/lilo.conf-cross
Added linux *

lilo -r /mnt にて rootを /mnt に変更しています。このため -C /etc/lilo.conf-cross ファイルの指定や、
lilo.conf-cross内の install= パスも /mnt を基点とした相対パスになることに注意してください。
もしエラーが発生したときも同じことです。
/dev/hde が無い。といったエラーが出た場合は /mnt/dev/hde を確認してください。

sh-linux でセルフでliloを打ち込む

先ほどmakeして作った lilo を sh-linux機の /sin/lilo にコピーしておきます。
セルフでliloが打てますのでカーネルパラメータを変更する場合など
いちいちCompactFlashを開発機にマウントする必要はありません。

セルフ用 /etc/lilo.conf

linear
boot=/dev/hda              (CAT68701から見たコンパクトフラッシュ)
disk=/dev/hda              (CAT68701から見たコンパクトフラッシュ)
bios=0x80
install=/boot/boot.b.2000  (ブートローダ version 20.0用)
image=/boot/vmlinuz
label=linux
root=/dev/hda1             (CAT68701から見たroot / パーテーション)
read-only
append="console=ttySC0,115200 mem=32M"

クロス用とほとんど変わりませんが、boot= , disk= それから install= が少し違っています。
セルフのliloはversion 20.0 のようです。

liloの打ち込みは簡単です。

# lilo
Added linux *