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]

紅葉撮影 - 丹沢湖

blog20101120-Ginko_Tanzawa

昨日は神奈川県丹沢湖に紅葉撮影。道中渋滞で遅れた&山間部で日暮れが早いため時間がなく、ダム横(丹沢湖はダム湖)にある公園一箇所に的を絞って撮影。銀杏は半分以上散っており辺り一帯黄色でしたが、紅葉の方は真っ赤なものから緑→紅のグラデーションを出しているものまで様々。

この場所のいい所は写真のような上から見下ろす構図が撮りやすいこと。駐車場がダムの上、公園が下にあるので公園に向かう途中で見下ろす場所に出会えます。普段紅葉や桜を撮るのは見上げる構図が多いですからね。他の場所だとまず山に登らないといけないので便利。まぁ帰りは登りになるんですけどねw

さて前回Link からですが、物欲に負けて新カメラとしてPENTAX K-xを購入・使用しています。今まで使っていたPowerShot Pro1からはEVF→光学ファインダとなり、当然ですが使い勝手の違いに苦戦中。今までCMOS撮像素子は発色が今ひとつという思いがあったのですが、十分使えそうですね(ただ1/2インチ以下のいわゆるコンデジ機は未だCCDの方が良いと思ってたり)

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

紅葉撮影 - 箱根大涌谷

blog20101113-AutumnLeafHakone

私がカメラを振り回すのは桜と紅葉くらいなのですが、今回はその一方。紅葉情報によると今日は箱根が見頃ということで出かけてきました。

いやまぁ、予想はしてましたけどスゴイ人ですね。大山Link ではケーブルカーに1.5時間待ちなんて感じでしたが、こちらも箱根湯本駅から出る高山鉄道の行列が駅の外にまで伸びる始末。並ぶの大嫌いな私は今回も歩いて行こうとしたのですが、これはさすがに時間的に無謀、途中からバスに乗り込み大涌谷へ(^^;)

目的の写真ですが、木々は綺麗に色づいているものの天気があいにくの薄曇り。時折日差しがあるとはいえど、基本的に空ばっかり明るくて葉は暗く撮影にはあまりよくない。こういう天気を晴れと予報するのやめてくれないかなぁ… もしくは快晴って予報をつけてくれ~

— posted by mu at 09:48 pm   commentComment [0]  pingTrackBack [0]

Visual C#のフォームデザイナでイベントハンドラを指定すると落ちる

Windows7 x64上でVisual C# 2010 Expressを使ってとあるプログラムを開発。開発マシン上では何の問題もなかったのに、実行ファイルをXP x86に持って行くと、ウィンドウを表示することもなくエラーで落ちる。理由は不正なアドレス(0x4)へのアクセス。また対象フレームワークの問題Link かと思ったのですが、今回はフレームワークを変更しても解決しない。

こまめにログを出力させて突き止めたエラー発生箇所はForm1.InitializeComponent…Visual C#が自動コード生成した場所じゃないか。さらにInitializeComponentの内部を探ると、落ちた箇所は最後の方にあるthis.panel1.ResumeLayout(false);という行。デバッガで追ってもResumeLayoutを記述しているコードはなく、.NET Frameworkの中っぽい。

何がおかしいのか見当もつかないので、以下の手順で変更、その都度XP上で落ちるかどうかを確認。

  • Form1.panel1上に配置していたコントロールを別の場所に退避、panel1を削除 → 落ちない
  • panel1をつくり直すが、元にあったコントロールはpanel1上に配置しない → 落ちない
  • 新panel1上に退避していたコントロールを配置 → 落ちない
  • pane1のプロパティでSizeChangedイベントに自前のハンドラを設定 → 落ちた
  • 自前のイベントハンドラを何もしない関数に変更 → 落ちない

この自前ハンドラはpanel1のサイズに合わせて中のコントロールサイズを複雑に変えるものでして、panel1とpanel1上のコントロールのサイズを参照するため、コントロールの初期化が終わる前(=InitializeComponentが完了する前)に呼び出されたなら確かにまずい。しかしWindows7 x64のデバッガ上ではハンドラは呼び出されないんだけどなぁ。

解決策としては、
  • panel1のプロパティでのSizeChangedイベントハンドラの指定をしない
  • Form1_Loadでイベントハンドラを指定する
という方法で、XPでも落ちなくなりました。

[2010/11/6 追記] どうもWindows7とXPでコントロールの表示サイズが異なることが原因みたいです。今回のプログラムはWindows7で開発していたので、

  • XPで実行: panel1にアンカー(メインウィンドウのサイズに合わせて自身のサイズを変更する)が設定されており、panel1.ResumeLayoutでリサイズが発生、ハンドラが呼び出され落ちる
  • 7で実行: 開発時のサイズで表示できるのでリサイズが発生しない

ということは、XPで開発するとVista/7では落ちることになるのかな…


— posted by mu at 12:12 am   commentComment [4]  pingTrackBack [0]

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