86
74

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberry PiAdvent Calendar 2015

Day 7

Raspberry Piを使ってBIOSが飛んだマザーを修理したお話

Posted at

Raspberry Pi Advent Calendar2015 7日目の投稿です

※前半はRaspberry Piと無関係なUEFIの話が続きます。興味のない方は下にスクロールして飛ばしてください


事のはじまり

それは11月某日に起きた事件だった
ぼく「このPCをWin10にしてからスリープ入らないしシャットダウンしても電源切れないんだけど」
天の声「BIOSアップデートすればいいんじゃないですかね」
ぼく「それだ!」

PCのOSをWin10に変える時に、せっかくだからUEFIでインストールしようぜ! とインストールしたはいいものの
スリープに入らない(というか項目が消えた)
シャットダウン時に電源が落ちない(OSは落ちてHDDの電源は切れる、昔のPCで「電源を切る準備ができました」って表示されて止まったのと同じ感じ)
といった感じに不具合が出ていた。

以前、別のPCをUEFI+Windows10にした時も同じ状態になっていて、原因を考えてみた。

この2台のPCのに共通する事は

  • UEFIでWindows10をインストール
  • 両方ともSandyBridge世代、ただし片方はH61チップセット、片方はC206チップセット
  • UEFIをサポートしてはいるが、SecureBootやFastBootに関する設定がない

ここから推測してみた

  • Intel 6シリーズはUEFIブートをサポートしてはいるものの、Win8が要求するUEFIとはバージョンが違う説

これについては、MSDNにて資料を発見
https://msdn.microsoft.com/ja-jp/library/hh824898.aspx

Windows10の記述はないけど、だいたいWindows8と同じ・・・だと思う

  • Windows8はUEFI 2.0以降であればとりあえず起動する
  • SecureBootを利用するためにはUEFI2.3.1(2011年4月制定)が必要

後で分かった事だが、UEFIのバージョンはスリープしない病とはあまり関係が無かった模様
2010年製造のHP Probook 4520sにUEFIでWin10を入れているがスリープもシャットダウンも問題なかったため。
Intel 6シリーズ製品に初期搭載されているUEFIのACPI周りに問題がある可能性が高い。

ちなみにHPは2008年からノートPCでUEFIブートをサポートしてる。詳細なUEFIドキュメントを公開しているので、興味ある方は御覧ください
http://h20566.www2.hp.com/hpsc/doc/public/display?docId=emr_na-c03774279

使用しているPCのUEFIを調べたら、2011年2月リリースのUEFIが搭載されていたのでUEFI2.3.1以前のバージョンを使用していた事がわかった
もしかしたらメーカーがUEFIアップデートを配布していて、UEFIのバージョンを上げることができるかもしれない

UEFIを更新してみた
使用しているマザーはFoxconn H61MX(実際の型番はH61MXT1/F2/-S/-VとかいうOEM向けカスタム品)
製造元のFoxconnサイトを調べてみたら、ご丁寧に「Update code to support WIN8.1」の記述があるUEFIが置いてあった。
ただ、直接最新のUEFIに上げる事ができないらしく、適当なバージョンのUEFIに一度アップデートする。これは成功

次に本命の最新UEFIにアップデートしてみる。SDカードをフォーマットし、ファイルを配置する。
マシンを再起動し、アップデート用SDからブート、何故か現れるWindows98のブート画面
Windows98のDOSを配布して大丈夫なんですかね(小声)

・・・しばらく待ってもWindows98のブート画面から進まない。
どこかでコケたんだろうと思い、PCの電源を落として再度投入する。しかし、待てども待てどもディスプレイは真っ黒だった

どうやらブート画面の裏でファームウェアの更新が進んでいた模様

更新中のプロンプトをブートロゴで隠す不親切なFoxconnに頭を抱えるが、最後のスイッチを押したのは自分。
ファームウェアの更新は自己責任、やっちまった・・・
頭を抱える。


ここからRaspberry Pi Advent Calendarの本題
飛んだファームをどうにかして復活できないかGoogle先生に尋ねると、救いの手を差し伸べられた

Hardware Flashing with Raspberry Pi
https://github.com/bibanon/Coreboot-ThinkPads/wiki/Hardware-Flashing-with-Raspberry-Pi

nWorld Raspberry PiでBIOSを焼いてみた。
http://firtel.blogspot.jp/2014/01/raspberry-pi-bios-recovery.html

Raspberry PiのGPIOにEEPROMを接続してFlashingできちゃうぜ! という事らしい
こ れ だ

焼くために必要なものを揃える

  • Raspberry Pi本体。今回はPi1 B+を使用した。GPIOは互換性があるので、Pi2でもいける、と思う
  • 焼くEEPROM マザーから引っこ抜きます。足が脆いのでIC引き抜き器の使用を推奨。
     非ソケット式でEEPROMを外せない場合はテストクリップを使うか直接配線しよう。
  • ブレッドボードと配線用の線材

作業用のシステム構成
Raspberry PiのOSはNOOBSでインストールしたraspbianもといDebian8 Jessie
今回はOS X YosemiteをインストールしたiMacからSSHで作業を行った

必要なものを揃えたら配線する
上のgithubの情報を見ると、GPIOのピンをEEPROMの各信号ピンにそのまま接続すればいいらしい

EEPROMのどの足がどの信号に対応しているのか調べる為に、EEPROMのスペックシートを探す
今回使用したROMはWinbond W25Q32で、GitHubの画像とまんまピン配置が同じだったので、画像の通りに接続した

Piピン番号 EEPROMピン番号
17(3V3) 3(WP#/ACC) 7(HOLD) 8(VCC)
19(GPIO10) 5(D1)
21(GPIO9) 2(D0)
23(GPIO11) 6(SCK)
24(GPIO25) 1(CS)
25(GND) 4(GND)

画像はGitHubより拝借
687474703a2f2f692e696d6775722e636f6d2f325a39747665522e706e67.png

こんな感じで対応するピン同士を

687474703a2f2f692e696d6775722e636f6d2f576b4e764f55792e706e67.png

CUrEWwUUAAALSTE.jpg
こんなふうに配線

配線したらRaspberry Piを起動する。
配線が間違っていないか、どこかショートしていないか、火を吹かないか等心配しながら電源投入する

何もトラブル無くRaspberry Piが起動したので、EEPROMをFlashする為に必要なツールを導入する
ターミナルを立ち上げてrootにユーザーを切り替え、次のコマンドを実行する

shell.sh
apt-get install build-essential pciutils usbutils libpci-dev libusb-dev libftdi1 libftdi-dev zlib1g-dev subversion
svn co svn://flashrom.org/flashrom/trunk flashrom
cd flashrom
make
make install

次に、焼きたいROMを持ってくる。今回はMacでダウンロードしてSCPでRaspberry Piに転送した

shell.sh
user@mac # scp BC1F1P08.BIN root@192.168.1.26:/tmp/bios.rom

いよいよROMを焼きます。まずはROMの中身をErase

shell.sh
flashrom -E -V -p linux_spi:dev=/dev/spidev0.0

ここで/dev/spidev0.0が存在しないとエラー発生。

Raspbianでは、ROM焼きに使うSPIなるものがデフォルトでは有効になっていないらしい。
raspi-configコマンドを叩いて、Advanced Option -> A5 SPIを選択して再起動すれば有効になった
画像はwww.raspberrypi.orgより拝借
raspi-config-audio.png

再起動したらもう一度初期化を実行

shell.sh
flashrom -E -V -p linux_spi:dev=/dev/spidev0.0

CUmDn8DUsAAKyRN.jpg

ROMの初期化に成功!

初期化が完了したらいよいよROM焼き。Verifyも同時にしているらしく、結構時間がかかった

shell.sh
flashrom -w bios.rom -V -p linux_spi:dev=/dev/spidev0.0 -c

CUmC4ZqUcAADXrU.jpg

ROM焼きの様子

コマンドが完了したらRaspberry Piをシャットダウンし、EEPROMをマザーに挿し直す

そして・・・

CUmGf_1UkAAeXaf.jpg

復活!!!

CUmG9TlVEAApTls.jpg

右手を上げて勝利のガッツポーズをしている様子.bin

最新版のROMをFlashしましたが普通に通りました。
この後Win10を立ち上げてテストしたところ、スリープもシャットダウンも正常に動くようになって大満足

今回はBIOS ROMを焼きましたが、普通にEEPROM焼き器として流用できそうです

以上、Raspberry Pi Advent Calendar 2015 7日目の記事になります。

86
74
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
86
74

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?