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]

この記事に対するコメント・トラックバック [5件]

Up1. 松本 — 2015/05/22@11:51:37

GRUBの場合の以下は
kernel --type=netbsd /boot/memtest
GRUB2では、どう表現すればいいのでしょうか

よろしくお願いします

Owner Comment mu  2015/05/23@23:21:09

英語ですが
http://superuser.com/questions/355590/does-grub2-support-memtest86-iso-filesLink
http://www.gossamer-threads.com/lists/gentoo/user/272359"Link
を読む限り、

menuentry "Memtest 86+" {
linux16 /boot/memtest
}

でしょうか。別のPC用意して実験する根性がないので動作未確認です。VMWareで実験できるのかな? (なんか強制終了されそう)

3. 松本 — 2015/05/25@08:58:16

回答ありがとうございます

http://www.gossamer-threads.com/lists/gentoo/user/272359"LinkLink
からの情報の
> menuentry "memtest86+ 4.20 (netbsd)" {
> insmod bsd
> knetbsd /boot/memtest86plus/memtest.netbsd
> }
で、動作しました。
ありがとうございました。

Owner Comment mu  2015/05/25@15:02:18

よくよく考えたらgrub1はnetbsdオプションをつけるようにと自分で書いてたのだから、その書式になりますよね。
情報ありがとうございました。

5. 平吉 — 2016/08/18@10:28:47

こんにちは。平吉と申します。動作報告です。
Puppy Linux 528JPを使っていますが、こちらで紹介された方法で成功し、memorytestが動きました!

Puppyの場合はmenu.lstに
title Memtest86+
kernel --type=netbsd /memtest
と追加で記述すればOKでした。
Puppyの場合はbootというディレクトリはないのでmenu.lstと同じディレクトリにmemtestを置けば大丈夫です。有益な情報をありがとうございました。

この記事に対する TrackBack URL:

設定によりTB元のページに、こちらの記事への言及(この記事へのリンク)がなければ、TB受付不可となりますのであらかじめご了承下さい。

コメントをどうぞ。 名前(ペンネーム)と画像認証のひらがな4文字は必須で、ウェブサイトURLはオプションです。

ウェブサイト (U):

タグは使えません。http://・・・ は自動的にリンク表示となります

:) :D 8-) ;-) :P :E :o :( (TT) ):T (--) (++!) ?;w) (-o-) (**!) ;v) f(--; :B l_P~ (QQ)

     

[X] [Top ↑]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.4256 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