BIOS firmwareにおけるSPI Flashとは

BIOS firmwareのSPI Flash、flash chip、descriptor、regions、BIOS Region、NVRAM、FV layout、update flow、image取り違えのdebugを整理します。

更新 約 5 分
Đọc bằng 日本語 English
Firmware Image cover

SPI Flashは、platform firmwareを保存するnon-volatileなflash chipです。BIOS/UEFI code、NVRAMまたはvariable store、flash layout情報、platformによってはMEやGbEのregionも含まれることがあります。

「BIOSをflashする」と言うとupdate fileだけを思い浮かべがちですが、firmware debugでは、SPI flash chipfull SPI imageFlash DescriptorBIOS RegionFirmware VolumeUEFI variable storeを分けて考える必要があります。

SPI Flashには何が入るのか

多くのPC/embedded x86 platformでは、SPI Flashはいくつかのregionに分かれます。

SPI Flashでよく見るregion
Region 役割 問題になる例
Flash Descriptor region layoutとaccess permissionを定義する toolが書けない、またはoffsetを間違える
BIOS Region 主なUEFI firmwareを含む 違うregionを書いてfirmwareが変わらない
ME/TXE Region management engine firmware 別boardからcopyしてplatform挙動が壊れる
GbE Region MACやNIC関連data MAC addressやnetwork設定が失われる
NVRAM/Variable Store UEFI variablesを保存する BootOrder、Setup、Secure Boot keyが消える、または壊れる
OEM/Platform Data vendor固有のboard data full imageを誤って書いてfactory dataを失う

すべてのplatformがこれらを持つわけではありません。ARMやembedded platformでは別layoutの場合もあります。それでも、fileがfull imageなのか、region imageなのか、capsuleなのかを識別するという考え方は同じです。

SPI Flashからfirmware moduleまで

01 1

SPI flash chip

board上のnon-volatile storageです。

02 2

Flash Descriptor

region mapとaccess permissionを定義します。

03 3

BIOS Region

主なUEFI firmwareを保持します。

04 4

Firmware Volume

FFS Fileを入れるcontainerです。

05 5

FFS File

firmware moduleまたはdata fileです。

06 6

FFS Section

PE32、TE、DEPEX、RAW、UIなどのsectionです。

UEFI moduleは物理flash chipのかなり下の階層にあります。

full SPI image、BIOS region image、capsuleの違い

混同しやすいimageの種類
種類 通常含むもの リスク
Full SPI image Descriptorと複数region board固有dataを上書きする可能性がある
BIOS Region image BIOS Regionのみ toolがfull imageを期待しているとoffsetが合わない
Capsule/update package 署名やwrapper付きのupdate payload raw region imageとして直接flashできない
FV image 1つのFirmware Volume BIOS Region内の一部にすぎない
FFS File 1つのmoduleまたはdata そのままflashするimageではない

.bin.capを受け取ったとき、最初に確認すべきなのは、そのfileがどの階層のimageなのかです。

flash範囲を間違えたときの典型例

実際によくある問題は次の通りです。

  • flash toolはsuccessを返すが、boardは古いfirmwareのまま動く。
  • BIOS Region imageをfull SPI imageとして扱ってしまう。
  • 別boardのfull imageを書いて、MAC、serial、board ID、calibration dataを失う。
  • BIOS updateがNVRAMをpreserveするため、古いBootOrderやSetup問題が残る。
  • capsuleをrawでflashして、platformが正しく認識できない。
  • Descriptorやprotected rangeが書き込みを止めているが、tool logが曖昧。

実際のdebug例: flash成功なのにversionが変わらない

vendor toolまたはprogrammerでfileを書き込み、toolはsuccessを返しました。しかしBIOS Setupでは古いversionが表示されたままです。

この場合は次の順で確認します。

  1. fileがcapsule、BIOS region、full SPI imageのどれかを確認する。
  2. flash後にSPI Flashをread backし、byte levelで比較する。
  3. 書き込みoffsetがBIOS Regionに合っているか確認する。
  4. Descriptor access、BIOS lock、protected rangeが書き込みを止めていないか確認する。
  5. dual BIOS、backup bank、recovery bankがあるplatformか確認する。
  6. BIOS Setupがversion stringをどのFVまたはvariableから読んでいるか確認する。
  7. updateがNVRAMをpreserveする場合、version stringがcode側かvariable側か確認する。

sourceやtool logで見るべきこと

SPI Flash debug checklist

securityの観点

SPI FlashにはOSより前に実行されるcodeとpolicyが入っています。region protectionが緩すぎると、buggyなtoolや攻撃者がBIOS RegionやNVRAMを書き換えられる可能性があります。一方、lock policyが早すぎたり厳しすぎたりすると、正当なupdateが失敗します。update flow、SMM write path、descriptor permission、protected rangeをまとめて確認する必要があります。

まとめ

SPI Flashはfirmwareの物理的な保存先ですが、その中には複数の論理layerがあります。BIOS updateやfirmware imageのdebugでは、full SPI、BIOS Region、FV、FFS、capsuleのどれを扱っているのかを最初に確認しましょう。多くの「flashが効かない」問題は、imageの階層や書き込みregionの取り違えから起きます。

この記事が役に立ったら

ファームウェア、BIOS/UEFI、組み込みシステムを学んでいる人に共有したり、作者を応援したりできます。

ご意見

Biến note thành bài viết hoàn chỉnh

Notes là nơi ghi nhanh khái niệm.