※ 引述《cody880528 (CYPuzzle)》之銘言:
大家對刷BIOS (你看看UEFI喊了n年我們還是叫他BIOS)
這麼有興趣 就來稍微聊聊刷BIOS是怎麼個回事.
目前業界主要使用的是UEFI架構 太細我們不講
UEFI架構下 Firmware會有兩個最主要的區塊: PEI / DXE 這點在目前的主要
IBV(出BIOS firmware的廠商:AMI Insyde Phoenix)做法都差不多 除了Intel自家好像
會搞些奇奇怪怪的設計而把Firmware切得更奇怪一點. 然後再加上AMD的PSP/Intel的ME
以及用來存放設定的一些小區塊 總之大概是這樣:
SPI ROM (假設16M)
|---------------------------------------------------------------------------|
|----------------------------|-----|-------|------------------|-------------|
ME/PSP NVRAM 不知三小 DXE PEI
以上廢話, 總之記得"每個區塊有一定的size"
總之BIOS大概就分成這些區域
那以這次AMD的設計我們可能會面對幾個問題
1.PSP因為多次向下相容造成肥大化
2.PEI/DXE也多次向下相容肥大化
3.設定項目改變
最基本的就是總容量的問題, 放不下就啥都不用講了. 所以勢必得放棄部分的向下相容
讓程式碼的總需求維持在16M
再來就是為了讓刷BIOS的時候不會一失敗就直接死透 通常的設計我們會是把最重要的
區塊最後處理 甚至是某些區域不更新 例如NVRAM跟那個不知三小 有時候是用來存放
一些設定跟板廠的一些初始資料 譬如你主機板的序號等等的東西 這些區塊我們更新
BIOS的時候是跳過的 然後通常因為PEI中會放置一些程式碼 當意外發生而讓DXE爛掉時
還能救回 所以有時候我們會跳過 或是等DXE部分刷完後驗證都正確才去刷PEI.
至於PSP,就是看AMD有沒有針對新CPU更新 有的話就需要一起刷掉.
所以我們可以把更新BIOS的流程大概看做這樣:
刷NVRAM和不知三小(or跳過)->刷DXE->刷PEI->刷PSP (好像啦 我也忘了)
好那麼問題來了 既然是分區分塊刷, 首先的問題就是 如果因為容量的關係工程師想調整
區塊的size 那很抱歉 舊->新 這個狀況下我們還可以故意在新BIOS中加入一些程式碼來
處理一些區塊size改變造成的問題 且此時就難以透過分區的方式來避免刷一半停電之類
狀況造成需要做recovery自救.
存放在舊的NVRAM設定如果想保留, 也必須要額外處理, 或是就乾脆全刷掉.
但是新->舊的話以上都不可能 因為舊的BIOS肯定看不懂新的配置 唯一選擇是完全清除
所以降版最大的問題往往都在於 新的BIOS有方法可以看懂舊的BIOS的設定配置參數等
但反之不行, 改SPI rom的區塊就更不行.
最後就是有人手殘 明明用的是最舊的Zen1刷了不支援Zen1的新BIOS, GG.
所以通常此時廠商就直接不給降版了, 因為風險高, RMA會很累.
AMD要凹這些廠商願意去做這件事情 就得幫他們想出可行的辦法 像是怎麼讓更新過程更
安全, 或是最佳化程式碼來盡量塞入能夠相容最多款CPU
至於用離線燒錄的方式 那當然是沒啥問題 反正都刷光光了
原廠會有方法保留他們想保留的東西 或甚至調出主板資料重新寫入 不過這就跟RMA一樣
成本問題.
以上騙騙P幣
話說這種改版, 板卡廠的反應大概是:
engineer: 幹. 又要升code. 林老師A合完連compile都過不了, 出bug要搞到哪時候.
QA: 幹. 改版改成這樣連testplan都要改嗎.
PM: 快點啦人家雞排都出了我們石頭哪時候才要release.
--
大家對刷BIOS (你看看UEFI喊了n年我們還是叫他BIOS)
這麼有興趣 就來稍微聊聊刷BIOS是怎麼個回事.
目前業界主要使用的是UEFI架構 太細我們不講
UEFI架構下 Firmware會有兩個最主要的區塊: PEI / DXE 這點在目前的主要
IBV(出BIOS firmware的廠商:AMI Insyde Phoenix)做法都差不多 除了Intel自家好像
會搞些奇奇怪怪的設計而把Firmware切得更奇怪一點. 然後再加上AMD的PSP/Intel的ME
以及用來存放設定的一些小區塊 總之大概是這樣:
SPI ROM (假設16M)
|---------------------------------------------------------------------------|
|----------------------------|-----|-------|------------------|-------------|
ME/PSP NVRAM 不知三小 DXE PEI
以上廢話, 總之記得"每個區塊有一定的size"
總之BIOS大概就分成這些區域
那以這次AMD的設計我們可能會面對幾個問題
1.PSP因為多次向下相容造成肥大化
2.PEI/DXE也多次向下相容肥大化
3.設定項目改變
最基本的就是總容量的問題, 放不下就啥都不用講了. 所以勢必得放棄部分的向下相容
讓程式碼的總需求維持在16M
再來就是為了讓刷BIOS的時候不會一失敗就直接死透 通常的設計我們會是把最重要的
區塊最後處理 甚至是某些區域不更新 例如NVRAM跟那個不知三小 有時候是用來存放
一些設定跟板廠的一些初始資料 譬如你主機板的序號等等的東西 這些區塊我們更新
BIOS的時候是跳過的 然後通常因為PEI中會放置一些程式碼 當意外發生而讓DXE爛掉時
還能救回 所以有時候我們會跳過 或是等DXE部分刷完後驗證都正確才去刷PEI.
至於PSP,就是看AMD有沒有針對新CPU更新 有的話就需要一起刷掉.
所以我們可以把更新BIOS的流程大概看做這樣:
刷NVRAM和不知三小(or跳過)->刷DXE->刷PEI->刷PSP (好像啦 我也忘了)
好那麼問題來了 既然是分區分塊刷, 首先的問題就是 如果因為容量的關係工程師想調整
區塊的size 那很抱歉 舊->新 這個狀況下我們還可以故意在新BIOS中加入一些程式碼來
處理一些區塊size改變造成的問題 且此時就難以透過分區的方式來避免刷一半停電之類
狀況造成需要做recovery自救.
存放在舊的NVRAM設定如果想保留, 也必須要額外處理, 或是就乾脆全刷掉.
但是新->舊的話以上都不可能 因為舊的BIOS肯定看不懂新的配置 唯一選擇是完全清除
所以降版最大的問題往往都在於 新的BIOS有方法可以看懂舊的BIOS的設定配置參數等
但反之不行, 改SPI rom的區塊就更不行.
最後就是有人手殘 明明用的是最舊的Zen1刷了不支援Zen1的新BIOS, GG.
所以通常此時廠商就直接不給降版了, 因為風險高, RMA會很累.
AMD要凹這些廠商願意去做這件事情 就得幫他們想出可行的辦法 像是怎麼讓更新過程更
安全, 或是最佳化程式碼來盡量塞入能夠相容最多款CPU
至於用離線燒錄的方式 那當然是沒啥問題 反正都刷光光了
原廠會有方法保留他們想保留的東西 或甚至調出主板資料重新寫入 不過這就跟RMA一樣
成本問題.
以上騙騙P幣
話說這種改版, 板卡廠的反應大概是:
engineer: 幹. 又要升code. 林老師A合完連compile都過不了, 出bug要搞到哪時候.
QA: 幹. 改版改成這樣連testplan都要改嗎.
PM: 快點啦人家雞排都出了我們石頭哪時候才要release.
--
All Comments