sh-lilo-selを使ってみる。 Edit

  • パーティション構成
    /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 /
    
  • sh-lilo-sel-20040408.tar.gz
    mizore Wikiさんのページから、sh-lilo-sel-20040408.tar.gzをダウンロード。
    そして、展開して、sh-lilo-sel-20040408/precompiled/boot.bとliloをそれぞれ次の場所へコピー。
    (オリジナルファイルを残しておきたかったのでリネームしました。)
    /boot/boot.b-sel
    /sbin/lilo-sel
    
  • /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"
    
  • kernel等の準備
    kernelとboot.b関係は、/dev/hda1の/boot下にまとめて置く事にします。
    (/dev/hda1に置くのは、HDDの1024シリンダ問題を回避するためでもあります。)
    # 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
    -rw-r--r--   1 root     root         2920 Jun  6 20:39 boot.b-sel
    -rw-------   1 root     root        41984 Jun  6 20:13 map
    -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実行
    # 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改 Edit

  • シリアルコンソールいらずに…
    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
    
  • さらなる改造…もっと選択数を増やすには!
    • 電源ボタンをONにして,すぐにOFF
    • その状態で、Reset SWを押す。(複数回押す。)
    • その押した数で、ブートラベルを決定。
    • 電源ボタンをONすると起動。
    このようなこともできそうです。


    Counter: 2847, today: 1, yesterday: 1

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-06-13 (火) 20:02:27 (6690d)