*sh-lilo-selを使ってみる。 [#z6687119]
-''はじめに''~
mizore Wikiさん作のsh-lilo-selを使うと、複数の環境を切り替えてブートできるので大変便利なのだ。~
[[SH用セレクタ付ブートローダ@mizore Wiki:http://www.mizore.jp/wiki/index.php?SH%CD%D1%A5%BB%A5%EC%A5%AF%A5%BF%C9%D5%A5%D6%A1%BC%A5%C8%A5%ED%A1%BC%A5%C0]]~
~

-''パーティション構成''~
/dev/hda1,hda3,hda4からブート可能なように設定してみる。~
#pre{{
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 &color(red){← LANDISKオリジナル};
/dev/hda2          10      79     562275   82  Linux swap / Solaris
/dev/hda3          80    6454   51207187+  83  Linux  &color(red){← FedoraCore ext2};
/dev/hda4        6455   19457  104446597+  83  Linux  &color(red){← debian26   ReiserFS};
}}


-''/dev/hda1でブートして環境設定''~
まずLANDISKオリジナル環境を起動して、ルートファイルシステムを書き込み可に。~
#pre{{
# mount -o rw,remount /
}}

-''sh-lilo-sel-20040408.tar.gz''~
mizore Wikiさんのページから、sh-lilo-sel-20040408.tar.gzをダウンロード。~
そして、展開して、sh-lilo-sel-20040408/precompiled/boot.bとliloをそれぞれ次の場所へコピー。~
(オリジナルファイルを残しておきたかったのでリネームしました。)~
#pre{{
/boot/boot.b-sel
/sbin/lilo-sel
}}

-''/etc/lilo.conf''~
lilo.confを次のように編集~
#pre{{
linear
boot=/dev/hda
disk=/dev/hda
bios=0x80
timeout=50
install=/boot/boot.b-sel
default=landisk

image=&color(red){/boot/zImage};
        label=landisk
        &color(red){root=/dev/hda1};
        read-only
        append="mem=64M console=ttySC1,9600"

image=&color(red){/boot/vmlinuz-2.6.11-sh};
        label=debian26
        &color(red){root=/dev/hda4};
        read-only
        append="mem=64M console=ttySC1,9600"

image=&color(red){/boot/vmlinuz-2.6.11-sh};
        label=FedoraCore2
        &color(red){root=/dev/hda3};
        read-only
        append="mem=64M console=ttySC1,9600"
}}

-''kernel等の準備''~
kernelとboot.b関係は、/dev/hda1の/boot下にまとめて置く事にします。~
(/dev/hda1に置くのは、HDDの1024シリンダ問題を回避するためでもあります。)~
#pre{{
# ls -la /boot
total 2287
drwxr-xr-x   2 root     root         1024 Jun  6 20:47 .
drwxr-xr-x  15 root     root         1024 Dec 24 16:25 ..
-rw-r--r--   1 root     root          512 Apr 10  2004 boot.0300
-rw-r--r--   1 root     root          512 Nov  7  2003 boot.1600
-rw-r--r--   1 root     root         2248 Sep  8  2003 boot.b
&color(red){-rw-r--r--   1 root     root         2920 Jun  6 20:39 boot.b-sel};
-rw-------   1 root     root        41984 Jun  6 20:13 map
&color(red){-rw-r--r--   1 root     root      1298432 Jun  6 20:01 vmlinuz-2.6.11-sh};
-rwxr-xr-x   1 root     root       978185 Dec 25  2003 zImage
}}

-''lilo-sel実行''~
#pre{{
# lilo-sel
Added landisk *
Added debian26
Added FedoraCore2
}}
-''リーブート''~
#pre{{
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を打ち込む要領で。~
#pre{{
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改[#ff772c62]
-''シリアルコンソールいらずに…''~
sh-lili-selは大変便利なのですが、いかんせん、シリアルコンソールが必須です。~
そこで、シリアルコンソールなしでも、ブート選択できるよう改造してみました。~
~

-''電源ボタンでブート選択''~
次のような手順で2種類のブートラベルから起動できる機能を追加してみました。~
--電源ボタンをONにして5秒経過すると、1番目のラベルから起動。~
--電源ボタンをON→OFF、そしてHDDの回転が安定したころ再度ONすると2番目のラベルから起動。~
パチ(ON)パチ(OFF)、ぶ〜ぅん、一呼吸してパチ(ON)てな感じで。~

~
-''パッチ''
#pre{{
--- 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){
#pre{{
&color(green){+#define PSW    *((volatile unsigned char *) 0xb0000002)};
&color(purple){+#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){
}}
&color(green){※電源ボタンの状態検出レジスタ};~
&color(purple){※電源ボタンの割り込み解除レジスタ};~
~
-''ビルド''~
iohack版のgcc(gcc-3.0)でビルドすること。~
(gcc-3.4だと正常にビルドできませんでした。)~
(boot.bのファイルサイズが下記と大きく異なる場合は、要注意です。)~
#pre{{
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         &color(red){2952}; Jun  7 18:54 boot.b
-rwxr-xr-x   1 root     root        79311 Jun  7 18:54 lilo
}}

-''さらなる改造…もっと選択数を増やすには!''~
--電源ボタンをONにして,すぐにOFF
--その状態で、Reset SWを押す。(複数回押す。)
--その押した数で、ブートラベルを決定。
--電源ボタンをONすると起動。~
-
このようなこともできそうです。~
~
~
#counter

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS