Linux から BIOS を書き換える

提供: ArchWiki
2016年2月21日 (日) 00:18時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

この記事では Linux でシステム BIOS を書き換える方法についての情報を提供します。ほとんどのメーカーは Windows でしか実行できない Windows の実行ファイルか BIOS 実行ファイルしか提供していません。しかしながら、Linux でシステム BIOS を更新することを可能にするユーティリティが少数ながら存在します。

警告: マザーボードの BIOS を書き換えることは危険なことであり、あなたのマザーボードを使い物にならなくしてしまう可能性もあります。この記事の著者は何度もこの方法で成功していますが、実際にあなたも上手くいくとは限りません。注意してください。マイクロコードのアップデートがサポートされている場合は代わりにそちらを考慮すると良いかもしれません。

BiosDisk

BiosDisk は Linux におけるシステム BIOS の書き換えプロセスを簡単にします。

インストール

biosdisk-gitAURAUR からインストール可能です。

使用方法

biosdisk ユーティリティを使って BIOS フラッシュイメージを作成するには、まずメーカーのウェブサイトからあなたのシステム用の最新の生の BIOS イメージをダウンロードします。ただし、入手するのは BIOS 実行ファイルであって Windows の実行ファイルでないのでそこを確認してください。それからは複数の選択肢があります: フロッピーを作成する、dd フロッピーイメージを作成する、ユーザーがインストールできるディストリビューションごとのパッケージを作成する (例: RPM)、もしくは実際にブートローダーにイメージをインストールする。

  • mkfloppy は biosdisk イメージを作成してフロッピーディスクに直接書き込みます。使用方法は以下の通り:
# biosdisk mkfloppy [-o option] [-d device] [-k baseimage] /path/to/.exe 
  • mkimage はユーザーのハードドライブ上にフロッピーイメージを作成します。使用方法は以下の通り:
# biosdisk mkimage [-o option] [-i destination] [-k baseimage] /path/to/.exe 
  • mkpkg はフロッピーイメージを作成し、それを使ってディストリビューションにあわせてユーザーがインストールできるパッケージを作成します (例: RPM)。このパッケージがインストールされると、ディストリビューションの固有のツールが使われてシステムのブートローダーを更新し、フロッピードライブがなくともハードドライブのイメージを起動して BIOS が書き換えられるようになります。今のところは Red Hat/Fedora の RPM パッケージしかサポートされていません。使用方法は以下の通り:
# biosdisk mkpkg [-o option] [--install] [--distro=] [--name=] [--version=] [--release=] /path/to/{.exe | .img}
  • install は biosdisk イメージを作成して、イメージファイルを /boot にコピー、そしてそのイメージのエントリと共にブートローダーを更新します。したがってユーザーがするべきことはシステムを起動し BIOS を書き換えるイメージを選択するだけです。ハードドライブから直接 biosdisk イメージがロードされて BIOS が書き換えられます。
# biosdisk install [-o option] [--name=] /path/to/{.exe | .img}

Flashrom

Flashrom はフラッシュチップを確認・読込・書込・検証・消去するためのユーティリティです。メインボードやネットワーク・グラフィック・ストレージコントローラーカード、そして様々なプログラマーデバイスにおける BIOS/EFI/coreboot/ファームウェア/optionROM イメージを書き換えるために作られました。

インストール

公式リポジトリflashrom パッケージか AURflashrom-svnAURインストールしてください。

使用方法

ウェブサイトであなたのマザーボードや (内部の) チップセットが flashrom によってサポートされているか確認してください: Supported Hardware。次のコマンドを実行してハードウェアがサポートされているか確認することもできます:

# flashrom --programmer internal

上のコマンドはあなたのマザーボードとチップセットを表示します。それから次のコマンドを実行することでサポートされているか確認できます:

# flashrom --programmer internal -L | grep CHIPNAMEfrompreviouscommand

新しいメインボードを使っている場合、複数のロムチップが表示されることがあります。上のコマンドで表示されたところからチップの名前を選択してください。-c オプションを使うことでコマンドによってどの ROM を書き換えるのか選択できます:

# flashrom --programmer internal -c "CHIPNAME" -r backup_CHIPNAME.bin

ROM チップ上に新しい BIOS イメージ (プロプライエタリのイメージまたは Coreboot) を書き込んで検証する:

# flashrom --programmer internal internal -c "CHIPNAME" -w newbios.bin

メインボード上の他のフラッシュチップを書き換えたい場合は、次のコマンドで全てのオプションを知ることができます:

# flashrom

FreeDOS

FreeDOS はフリーの DOS 互換のオペレーティングシステムで、プロプライエタリの DOS を必要なくさせるという挑戦をしています。必要なのは FreeDOS カーネルが載ったブータブルフロッピーディスクイメージだけです。

Unetbootin

ブータブルな FreeDOS USB スティックを作成する一番簡単な方法は公式リポジトリunetbootin を使うことです。

USB メモリを FAT16 でフォーマットして "boot" フラグを有効にします (gparted, qtpartedAUR, partitionmanager などで GUI を使って行うことができます)。それから、フラッシュドライブをマウントした後、ディストリビューション FreeDOS とマウントしたスティックを選択します。アプリは自動的にイメージをダウンロードしてドライブにコピーします。最後に、書き換えたいもの全てをコピーすることができます (BIOS, ファームウェアなど)。

警告: Unetbootin は Lenovo のシステムで正しく作動しないことがあります。ブータブルスティックを別のデバイスに作成する必要があるかもしれません。こちら を見て下さい。

Gentoo

ブータブルな FreeDOS フラッシュドライブを作成したいときは Gentoo Wiki の FreeDOS Flash Drive を参照。

ビルド済みのイメージ

他の方法も存在します: FreeDOS prebuilt bootable USB flash drive image by Christian Taube

イメージがフロッピーに収めるには大きすぎる

フラッシュイメージがフロッピーには大きすぎる場合、FreeDos bootdisk ウェブサイト に行って、10Mb のハードディスクイメージをダウンロードしてください。このイメージは完全なディスクイメージで、パーティションを含んでいるため、フラッシュユーティリティを追加するのはすこし手間が要ります:

まず最初のパーティションを確認してください (これを書いている時点では、最初のパーティションはブロック63から始まっています。つまりパーティションはオフセット 512 * 63 = 32256 からです)。次のコマンドを実行:

# file -sk <image-file> | sed -r 's/.*startsector ([0-9]+).*/\1/'
63

もしくは:

# fdisk -l <image-file>
…
Units = sectors of 1 * 512 = 512 bytes
…
      Device  Boot  Start    End  Blocks  Id  System
              *        63  19151   9544+   1  FAT12

そしてイメージをマウントします:

# mount -oloop,offset=$((63 * 512)) <image-file> /mnt

これで通常通りにファイルシステムにフラッシュユーティリティをコピーできます。完了したら:

# umount /mnt

通常の手順どおり USB スティックにイメージをコピーするか、memdisk として起動することが可能です。

使用方法

OEM Bootdisk バージョンを推奨します。kernelcommand.com しか含まれておらずフラッシュユーティリティや新しい BIOS イメージのための領域が存在するからです。FreeDOS イメージをダウンロードして解凍:

$ wget http://www.fdos.org/bootdisks/autogen/FDOEM.144.gz
$ gunzip FDOEM.144.gz

フロッピーディスクイメージをマウントしてBIOS フラッシュユーティリティと新しい BIOS イメージをコピーします。必要なモジュールをロード:

# modprobe vfat
# modprobe loop

/proc/fileystems で必要なファイルシステムがサポートされているかどうか表示されます。フロッピーディスクイメージを一時的なパスにループマウント:

$ mkdir /tmp/floppy
$ mount -t vfat -o loop FDOEM.144 /tmp/floppy

マウントで何もエラーが出なかったら、BIOS フラッシュユーティリティと新しい BIOS イメージをコピーしてください。マザーボードのメーカーサイトからダウンロードした圧縮ファイルを解凍したら、おそらく2つのファイルが作られるはずです。例:

# unzip 775Dual-VSTA\(2.60\).zip
Archive: 775Dual-VSTA(2.60).zip
 inflating: 75DVSTA2.60
 inflating: ASRflash.exe
# cp 75DVSTA2.60 ASRflash.exe /tmp/floppy

2つのファイルがフロッピーに収まることを確認:

Filesystem           1K-blocks      Used Available Use% Mounted on
/tmp/FDOEM.144
                         1424       990       434  70% /tmp/floppy

フロッピーディスクイメージをアンマウント:

# umount /tmp/floppy

次に CD/DVD-RW メディアにフロッピーイメージを書き込みます。後で起動できるように注意してください。まずブータブル CD イメージを作成して、焼き込み:

 # genisoimage -o bootcd.iso -b FDOEM.144 FDOEM.144

# wodim -v bootcd.iso

または GRUB のメニューにイメージを追加することもできます。Syslinux をインストールして memdisk とイメージを /boot にコピー:

# cp /usr/lib/syslinux/memdisk /boot
# cp FDOEM.144 /boot/flashbios.img

そしてエントリを /boot/grub/menu.lst に追加:

 title Flash BIOS
 kernel /memdisk
 initrd /flashbios.img

あるいは GRUB2 の場合、/boot/grub/grub.cfg に追加:

 menuentry "Flash BIOS" {
 linux16 /boot/memdisk
 initrd16 /boot/flashbios.img
 }

あるいは Syslinux の場合、/boot/syslinux/syslinux.cfg に追加:

LABEL flashbios
	MENU LABEL Flash BIOS
	LINUX ../memdisk
	INITRD ../fdboot.img

最後にマシンを再起動して、ブートの順序で CD ドライブが一番最初に来ることを確認して、CD を起動したら BIOS アップグレードを実行してください。GRUB メニューを使う場合、リストの新しいエントリを選択すれば FreeDOS が起動します。

Geteltorito.pl

起動イメージを抽出する perl スクリプトです。X220 X230, W540 などの Lenovo のノートパソコンで使えることを確認済みです。他のメーカーでも利用できるかもしれません。

インストール

geteltoritoAUR パッケージをインストールしてください。

使用方法

メーカーのサポートサイトから BIOS アップデート ISO を取得してください。geteltorito のイメージ抽出を実行:

# geteltorito.pl -o <image>.img <image>.iso

イメージを usb メモリにコピー:

# dd if=<image>.img of=<destination> bs=512K

再起動して USB メモリから起動し、メーカーの指示に従ってください。