備忘録。Memtest86+
をHDDに入れてGrubから実行すると、
Error 28: Selected item cannot fit into memory
というエラーが出て、メニューに戻されてしまう場合の対処。
- 開発環境のインストールされたLinuxを用意
- Memtest86+
のソースコードを入手、任意のディレクトリに展開 - ソースコードディレクトリ内memtest.ldsファイルをエディタで開き、.=の左辺を0x100000に変更
- make (configure不要)
- 出来上がったmemtest (拡張子無し)を目的のPCの/bootにコピー
- /boot/grub/menu.lst (もしくは/boot/grub/grub.conf)に以下のエントリを追加もしくは変更。rootの行は自分の環境に合わせて変更。要点はkernel行に--type=netbsdオプションをつけること。
OUTPUT_FORMAT("elf32-i386");
OUTPUT_ARCH(i386);
ENTRY(_start);
SECTIONS {
. = 0x100000; // Change to 0x100000
_start = . ;
.data : {
*(.data)
}
}
title Memtest86+
root (hd0,0)
kernel --type=netbsd /boot/memtest
自分用に作ったMemtest86+ 4.10のファイルを添付しておきます(ファイル名をmemtestに変更してください)。
[ エラーの原因 ]- Memtest86は古いタイプの起動方法を採っており、通常BIOSが使わない090000-09A000hの領域は空いているものとし、そこに実行プログラムを読み込む。
- しかし比較的新しい(今回Pentium 4のPCサーバでエラーとなったので、今のマシンは全部新しい)BIOSはこの領域を予約域として確保している。
- Grubはこの領域が予約されているのが分かるので、そこにMemtest86を読み込むことはエラーとして実行しない。
- ELF形式のバイナリファイルを使う(拡張子無しのmemtestを使う)
- GrubにELFファイルでブートする設定をする (--type=netbsdの指定)
- GrubはELFファイルを1MB以下のアドレスにはロードしないので、1MB以上の場所を開始アドレスとする(memtest.ldsの編集)
この問題をバグだという人もいる(多い)しバグではないという人もいるみたいで判断が難しいですが、私的にはバグと言い切るのは安直かなぁと。
[参考(というかそのまんま)]- grub - Error 28: Selected item cannot fit into memory (A simple matter of…)
- Debian Bug report logs - #319837


















Comments