Grubからmemtest86を起動するとエラー

備忘録。Memtest86+Link をHDDに入れてGrubから実行すると、

Error 28: Selected item cannot fit into memory

というエラーが出て、メニューに戻されてしまう場合の対処。

  1. 開発環境のインストールされたLinuxを用意
  2. Memtest86+Link のソースコードを入手、任意のディレクトリに展開
  3. ソースコードディレクトリ内memtest.ldsファイルをエディタで開き、.=の左辺を0x100000に変更
  4. OUTPUT_FORMAT("elf32-i386");
    OUTPUT_ARCH(i386);
    
    ENTRY(_start); 
    SECTIONS {
            . = 0x100000;  // Change to 0x100000
            _start = . ;
            .data : {
                    *(.data)
            }
    }
    
  5. make (configure不要)
  6. 出来上がったmemtest (拡張子無し)を目的のPCの/bootにコピー
  7. /boot/grub/menu.lst (もしくは/boot/grub/grub.conf)に以下のエントリを追加もしくは変更。rootの行は自分の環境に合わせて変更。要点はkernel行に--type=netbsdオプションをつけること。
  8. title Memtest86+
           root (hd0,0)
           kernel --type=netbsd /boot/memtest
    

自分用に作ったMemtest86+ 4.10のファイルを添付しておきます(ファイル名をmemtestに変更してください)。

[ エラーの原因 ]
  1. Memtest86は古いタイプの起動方法を採っており、通常BIOSが使わない090000-09A000hの領域は空いているものとし、そこに実行プログラムを読み込む。
  2. しかし比較的新しい(今回Pentium 4のPCサーバでエラーとなったので、今のマシンは全部新しい)BIOSはこの領域を予約域として確保している。
  3. Grubはこの領域が予約されているのが分かるので、そこにMemtest86を読み込むことはエラーとして実行しない。
[ エラーの回避方法 ]
  • ELF形式のバイナリファイルを使う(拡張子無しのmemtestを使う)
  • GrubにELFファイルでブートする設定をする (--type=netbsdの指定)
  • GrubはELFファイルを1MB以下のアドレスにはロードしないので、1MB以上の場所を開始アドレスとする(memtest.ldsの編集)

この問題をバグだという人もいる(多い)しバグではないという人もいるみたいで判断が難しいですが、私的にはバグと言い切るのは安直かなぁと。

[参考(というかそのまんま)]
添付ファイル: memtest.memtest 

— posted by mu at 06:47 pm   commentComment [5]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0092 sec.
prev
2010.11
next
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30