sh-lilo-selを使ってみる。 †
- パーティション構成
/dev/hda1,hda3,hda4からブート可能なように設定してみる。
landisk:~# fdisk -l /dev/hda
Disk /dev/hda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 9 72261 83 Linux ← LANDISKオリジナル
/dev/hda2 10 79 562275 82 Linux swap / Solaris
/dev/hda3 80 6454 51207187+ 83 Linux ← FedoraCore ext2
/dev/hda4 6455 19457 104446597+ 83 Linux ← debian26 ReiserFS
- /dev/hda1でブートして環境設定
まずLANDISKオリジナル環境を起動して、ルートファイルシステムを書き込み可に。
# mount -o rw,remount /
- /etc/lilo.conf
lilo.confを次のように編集
linear
boot=/dev/hda
disk=/dev/hda
bios=0x80
timeout=50
install=/boot/boot.b-sel
default=landisk
image=/boot/zImage
label=landisk
root=/dev/hda1
read-only
append="mem=64M console=ttySC1,9600"
image=/boot/vmlinuz-2.6.11-sh
label=debian26
root=/dev/hda4
read-only
append="mem=64M console=ttySC1,9600"
image=/boot/vmlinuz-2.6.11-sh
label=FedoraCore2
root=/dev/hda3
read-only
append="mem=64M console=ttySC1,9600"
- lilo-sel実行
# lilo-sel
Added landisk *
Added debian26
Added FedoraCore2
- リーブート
LILO boot:
1 : landisk
2 : debian26
3 : FedoraCore2
Select boot image -> 2
Loading debian26..........................done.
Uncompressing Linux... Ok, booting the kernel.
Linux version 2.6.11-sh (root@landisk) (gcc version 3.4.4 20050314 (prerelease)
お〜すばらしい。/dev/hda4上のdebian26がkernel-2.6と共に起動しました。
- その他 … /dev/hda3上からliloを打つ場合
様々な所で紹介されているクロスでliloを打ち込む要領で。
landisk:~# mount -t ext2 /dev/hda1 /mnt/hda1
landisk:~# /mnt/hda1/sbin/lilo-sel -r /mnt/hda1 -C /etc/lilo.conf
Added landisk *
Added debian26
Added FedoraCore2
※ -r オプションは、chroot /mnt/hda1 /sbin/lilo-sel -C /etc/lilo.conf と同義。
sh-lilo-selを少し改造してみる … sh-lilo-sel改 †
- シリアルコンソールいらずに…
sh-lili-selは大変便利なのですが、いかんせん、シリアルコンソールが必須です。
そこで、シリアルコンソールなしでも、ブート選択できるよう改造してみました。
- 電源ボタンでブート選択
次のような手順で2種類のブートラベルから起動できる機能を追加してみました。
- 電源ボタンをONにして5秒経過すると、1番目のラベルから起動。
- 電源ボタンをON→OFF、そしてHDDの回転が安定したころ再度ONすると2番目のラベルから起動。
パチ(ON)パチ(OFF)、ぶ〜ぅん、一呼吸してパチ(ON)てな感じで。
- パッチ
--- sh-lilo-sel-20040408/second.c~ 2005-06-15 20:09:35.000000000 +0900
+++ sh-lilo-sel-20040408/second.c 2005-06-15 20:12:34.000000000 +0900
@@ -285,6 +285,13 @@
loop = MAXLOOP;
while ((tick = get_tick()) < timeout && loop > 0){
+#define PSW *((volatile unsigned char *) 0xb0000002)
+#define PSWINT *((volatile unsigned char *) 0xb0000006)
+ if((PSW & 0x10) == 0){ /* power switch off */
+ while((PSW & 0x10) == 0){ ; }
+ PSWINT = (unsigned char)0;
+ return '2';
+ }
ch = serial_input(1);
if (ch > 0) return ch;
if (ntick < tick){
※電源ボタンの状態検出レジスタ
※電源ボタンの割り込み解除レジスタ
- ビルド
iohack版のgcc(gcc-3.0)でビルドすること。
(gcc-3.4だと正常にビルドできませんでした。)
(boot.bのファイルサイズが下記と大きく異なる場合は、要注意です。)
landisk:/share/src/sh-lilo-sel-20040408# make
landisk:/share/src/sh-lilo-sel-20040408# ls boot.b lilo
# ls -la lilo boot.b
-rw-r--r-- 1 root root 2952 Jun 7 18:54 boot.b
-rwxr-xr-x 1 root root 79311 Jun 7 18:54 lilo
|