備忘録。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
添付ファイル: memtest.memtest
1. 松本 — 2015/05/22@11:51:37
kernel --type=netbsd /boot/memtest
GRUB2では、どう表現すればいいのでしょうか
よろしくお願いします