Updatujte si BIOS
15.6.2004, Eagle , článek
Někteří výrobci základních desek vydávají nové BIOSy často, jiní párkrát za rok. Přitom ke změnám jsou důvody každou chvíli. Dnes si povíme něco o tom, jak do stávajícího BIOSu nahrát nové součásti - BIOSy RAID řadičů, logo a nový microcode update.
Kapitoly článku:
- Updatujte si BIOS
- Update součástí
- Microcode update
Microcode update
Poznámka: Tuto proceduru nelze provést pro nekomprimovaný microcode (/nc_cpucode), protože CBROM32 je blokován proti jeho extrakci.
Tato část se již týká více méně jen Intel procesorů, protože protějšky od AMD (jádra Thoroughbred revize B0 a Barton revize A2) v důsledku chyby ve vnitřním testu spolehlivosti microcode update nepodporují. Co že to vůbec je? Microcode update je maličký program, který se z BIOSu při startu nahraje do paměti procesoru, čímž se částečně změní jeho chování v tom smyslu, že se opraví některé chyby. V praxi by některé procesory bez microcode update sotva byly schopné spolehlivě fungovat.
Procesory se od sebe liší různými revizemi. Většina revizí má také unikátní hodnotu stepping - stepping je společně s model a family jedním z výstupů CPUID instrukce. Podle té je možné identifikovat jádro, což je pro nahrání microcode update klíčová věc. Každá revize totiž opravuje některé chyby předchozí, a proto pro ní musí být jiný microcode update. Samotný microcode update je 2048 byte velký soubor, který výrobci základních desek dostanou od Intelu. V praxi jsem ale vypozoroval, že je nedostávají pro jednotlivá jádra, ale jako balík pro více čipů dohromady - například BIOS desky EPoX obsahoval naprosto stejný balík jako BIOS desky Abit.
Protože jsou chyby v procesorech objevovány postupně (a také postupně opravovány), microcode update se čas od času mění. No a pokud máte starý BIOS a třeba do něj chcete dát procesor s novou revizí, můžete se dostat do problémů. Cílem proto je vyměnit stávající microcode update za co nejnovější. Ale kde ho vzít? Jednoduše "čmajznout" ! Stačí si na stránkách některého z výrobců základních desek vybrat nějaký BIOS s co nejnovější aktualizací - výrobce ani často neuvádí, že se microcode update měnil, to ale poznáte snadno. Vzal jsem BIOS ze základní desky Abit BE7II - byl updatován jako jeden z posledních a má socket 478. Pokud si i u tohoto BIOSu prohlédneme obsah (parametr /D), vypíše CBROM ve spodní části několik microcode updatů:
Kód vždy ukazuje slot, hodnotu ID (verzi) a CPUID procesoru. Pro NetBurst architekturu (Pentium 4) platí následující CPUID kódy:
0F07 - Willamette B2
0F0A - Willamette C1
0F12 - Willamette D0
0F13 - Willamette E0
0F24 - Northwood B0
0F25 - Gallatin B1 (M0)
0F27 - Northwood C1
0F29 - Northwood D1
0F33 - Prescott C0
0F34 - Prescott D0
0F41 - Prescott E0
Krom toho jsou tu ještě serverové čipy a výrobní prototypy s jinými hodnotami CPUID. S těmi se ale patrně nesetkáte. Pokud budete chtít inovovat microcode update, je nejlepší cestou nahradit stávající blok novým. Hrabat se v jednotlivých kódech a vytvářet vlastní blok nepovažuji za příliš šťastné řešení, navíc by při manipulaci, rozdělování a slučování souboru mohlo dojít k přehmatu a následně po naflashování nové verze patrně havárii systému.
Pokud chcete vyměnit blok, je důležité, aby v novém bloku byl microcode update pro stejné CPUID se stejným typem osazení (a samozřejmě vyšší hodnotou ID - jedná se o číslo v hexa soustavě), jako je u současného bloku - pro konkrétní procesor, že budou jiné chybět nebo přebývat, již není příliš podstatné. Stejným osazením myslím to, že pokud v současném bloku je např. SLOT2 2C 0F12, není vhodné nahradit ho SLOT1 2E 0F12, protože se jedná o microcode určený pro procesor jiného zaměření. (samotnými názvy SLOT1, SLOT2 si nedělejte hlavu, stejně neodpovídají reálným socketům). Jiným zaměřením v tomto případě je hodnota Platform ID pevně uložená v procesoru, kterou BIOS také porovnává s konkrétním microcode update a v případě neshody tento nenahraje. Proto například mobilní Pentium 4 v desktopové desce neobdrží microcode update a pracuje tak bez ošetření hardwarových bugů.
Výměnu je možné provést vcelku jednoduše. Nejprve vezměte novou verzi napište příkaz CBROM32 be72_12.bin /cpucode Extract.
Extract je příkaz, kterým CBROM vytáhne příslušnou část z BIOSu a uloží jí na disk. Poté je potřeba z cílového BIOSu microcode odstranit příkazem /cpucode Release a vložit do něj nový blok pomocí /cpucode soubor.
Zda se nový microcode update správně nahrál do procesoru lze zjistit například v programu WCPUID v záložce System Information:
Zde je vidět, že do procesoru s CPUID 0F27 byl nahrán microcode update verze 33h. Aktuální verze v novém BIOSu desky Abit BE7II je 37h.
Rizika
Již jsem takto modifikoval BIOS mnohokrát a riziko je malé. Mnohem horší je testovat beta verze BIOSů než si vyměnit nějaké ty části současné, plně funkční verze. Pokud dodržíte standardní proceduru flashování v DOSu s připravenými disketami se zálohou starší verze, je riziko minimální. Navíc výměna přídavných BIOSů či microcode update není nezbytnou součástí chodu základní desky, proto i při nahrání nesprávné verze nejspíš bude možné pokračovat v činnosti a obnovit původní stav.
Poznámka: Tuto proceduru nelze provést pro nekomprimovaný microcode (/nc_cpucode), protože CBROM32 je blokován proti jeho extrakci.
Tato část se již týká více méně jen Intel procesorů, protože protějšky od AMD (jádra Thoroughbred revize B0 a Barton revize A2) v důsledku chyby ve vnitřním testu spolehlivosti microcode update nepodporují. Co že to vůbec je? Microcode update je maličký program, který se z BIOSu při startu nahraje do paměti procesoru, čímž se částečně změní jeho chování v tom smyslu, že se opraví některé chyby. V praxi by některé procesory bez microcode update sotva byly schopné spolehlivě fungovat.
Procesory se od sebe liší různými revizemi. Většina revizí má také unikátní hodnotu stepping - stepping je společně s model a family jedním z výstupů CPUID instrukce. Podle té je možné identifikovat jádro, což je pro nahrání microcode update klíčová věc. Každá revize totiž opravuje některé chyby předchozí, a proto pro ní musí být jiný microcode update. Samotný microcode update je 2048 byte velký soubor, který výrobci základních desek dostanou od Intelu. V praxi jsem ale vypozoroval, že je nedostávají pro jednotlivá jádra, ale jako balík pro více čipů dohromady - například BIOS desky EPoX obsahoval naprosto stejný balík jako BIOS desky Abit.
Protože jsou chyby v procesorech objevovány postupně (a také postupně opravovány), microcode update se čas od času mění. No a pokud máte starý BIOS a třeba do něj chcete dát procesor s novou revizí, můžete se dostat do problémů. Cílem proto je vyměnit stávající microcode update za co nejnovější. Ale kde ho vzít? Jednoduše "čmajznout" ! Stačí si na stránkách některého z výrobců základních desek vybrat nějaký BIOS s co nejnovější aktualizací - výrobce ani často neuvádí, že se microcode update měnil, to ale poznáte snadno. Vzal jsem BIOS ze základní desky Abit BE7II - byl updatován jako jeden z posledních a má socket 478. Pokud si i u tohoto BIOSu prohlédneme obsah (parametr /D), vypíše CBROM ve spodní části několik microcode updatů:
Kód vždy ukazuje slot, hodnotu ID (verzi) a CPUID procesoru. Pro NetBurst architekturu (Pentium 4) platí následující CPUID kódy:
0F07 - Willamette B2
0F0A - Willamette C1
0F12 - Willamette D0
0F13 - Willamette E0
0F24 - Northwood B0
0F25 - Gallatin B1 (M0)
0F27 - Northwood C1
0F29 - Northwood D1
0F33 - Prescott C0
0F34 - Prescott D0
0F41 - Prescott E0
Krom toho jsou tu ještě serverové čipy a výrobní prototypy s jinými hodnotami CPUID. S těmi se ale patrně nesetkáte. Pokud budete chtít inovovat microcode update, je nejlepší cestou nahradit stávající blok novým. Hrabat se v jednotlivých kódech a vytvářet vlastní blok nepovažuji za příliš šťastné řešení, navíc by při manipulaci, rozdělování a slučování souboru mohlo dojít k přehmatu a následně po naflashování nové verze patrně havárii systému.
Pokud chcete vyměnit blok, je důležité, aby v novém bloku byl microcode update pro stejné CPUID se stejným typem osazení (a samozřejmě vyšší hodnotou ID - jedná se o číslo v hexa soustavě), jako je u současného bloku - pro konkrétní procesor, že budou jiné chybět nebo přebývat, již není příliš podstatné. Stejným osazením myslím to, že pokud v současném bloku je např. SLOT2 2C 0F12, není vhodné nahradit ho SLOT1 2E 0F12, protože se jedná o microcode určený pro procesor jiného zaměření. (samotnými názvy SLOT1, SLOT2 si nedělejte hlavu, stejně neodpovídají reálným socketům). Jiným zaměřením v tomto případě je hodnota Platform ID pevně uložená v procesoru, kterou BIOS také porovnává s konkrétním microcode update a v případě neshody tento nenahraje. Proto například mobilní Pentium 4 v desktopové desce neobdrží microcode update a pracuje tak bez ošetření hardwarových bugů.
Výměnu je možné provést vcelku jednoduše. Nejprve vezměte novou verzi napište příkaz CBROM32 be72_12.bin /cpucode Extract.
Extract je příkaz, kterým CBROM vytáhne příslušnou část z BIOSu a uloží jí na disk. Poté je potřeba z cílového BIOSu microcode odstranit příkazem /cpucode Release a vložit do něj nový blok pomocí /cpucode soubor.
Zda se nový microcode update správně nahrál do procesoru lze zjistit například v programu WCPUID v záložce System Information:
Zde je vidět, že do procesoru s CPUID 0F27 byl nahrán microcode update verze 33h. Aktuální verze v novém BIOSu desky Abit BE7II je 37h.
Rizika
Již jsem takto modifikoval BIOS mnohokrát a riziko je malé. Mnohem horší je testovat beta verze BIOSů než si vyměnit nějaké ty části současné, plně funkční verze. Pokud dodržíte standardní proceduru flashování v DOSu s připravenými disketami se zálohou starší verze, je riziko minimální. Navíc výměna přídavných BIOSů či microcode update není nezbytnou součástí chodu základní desky, proto i při nahrání nesprávné verze nejspíš bude možné pokračovat v činnosti a obnovit původní stav.