Linux から BIOS を書き換える
この記事では Linux でシステム BIOS を書き換える方法についての情報を提供します。ほとんどのメーカーは Windows でしか実行できない Windows の実行ファイルか BIOS 実行ファイルしか提供していません。しかしながら、Linux でシステム BIOS を更新することを可能にするユーティリティが少数ながら存在します。
目次
BiosDisk
BiosDisk は Linux におけるシステム BIOS の書き換えプロセスを簡単にします。
インストール
biosdisk-gitAUR が AUR からインストール可能です。
使用方法
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 パッケージか AUR の flashrom-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, ファームウェアなど)。
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 バージョンを推奨します。kernel
と command.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 スクリプトは El Torito 起動イメージを抽出します。X220, X230, W540, T450s などの Lenovo のノートパソコンで使えることを確認済みです。他のメーカーでも利用できるかもしれません。
インストール
geteltoritoAUR パッケージをインストールしてください。
使用方法
メーカーのサポートサイトから BIOS アップデート ISO を取得してください。geteltorito のイメージ抽出を実行:
$ geteltorito.pl -o <image>.img <image>.iso
イメージを usb メモリにコピー:
# dd if=<image>.img of=<destination> bs=512K
再起動して USB メモリから起動し、メーカーの指示に従ってください。
fwupd
fwupdAUR はソフトウェアによってローカルマシンのファームウェアをアップデートできるようにするシンプルなデーモンです。デスクトップ用に開発されていますが、スマートフォンやタブレット、ヘッドレスサーバーなどでも利用できます。GNOME Software などの GUI のソフトウェアマネージャを使ってアップデートを表示・適用したり、コマンドラインツールやシステムの D-Bus インターフェイスを直接使うことができます。
Dell などのメーカーによって Linux にファームウェアのアップデートを配布するために使われています。
stable ツリーで利用できるハードウェアのリストは こちら で確認できます。