Obywatelu lecz się sam, czyli jak uaktualniać firmware CPU w Windows

Jak wszyscy powszechnie wiedzą, obecne procesory to nie tylko kawałek krzemu, ale również potężna dawka wewnętrznego oprogramowania (microcode).

Chciałbym tu przedstawić działające rozwiązanie pozwalające uaktualniać je, zanim zrobi to Microsoft / producent płyty głównej.

Całość została przetestowana pod Windows 10 z procesorem Intela, powinna działać pod różnymi wersjami okienek nie używających Hyper-V, prawdopodobnie może być zastosowana do układów AMD (nie przetestowałem).

Pliki Intela

Pobieramy dowolne narzędzie pokazujące nam rodzinę naszego procesora (Family), model (Ext. Model) i wersję (Stepping) - może to być np. CPU-Z z http://cpuid.org.

Ostatnia wersja microcode na stronie Intela pochodzi z sierpnia 2018 (pozostawię bez komentarza...), dlatego polecam udać się do https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/tr... albo https://git.launchpad.net/ubuntu/+source/intel-microcode/tree/intel-uc...

Potrzebujemy stamtąd pobrać plik odpowiadający naszemu Family-Ext.Model-Stepping (np. dla liczb 6, 5E, 3 jest to plik 06-5E-03) i zapisać go w katalogu o nazwie "intel-ucode"

Plik jest w formie binarnej i musimy zmienić jego format - ze strony https://onedrive.live.com/?authkey=%21AE%5F9xt1wnaLT5lk&id=11F4002... z katalogu Executable pobieramy program, w którym wskazujemy katalog nadrzędny do "intel-ucode".

Program stworzy nam plik microcode.dat w nowo stworzonym podkatalogu "Output intel-ucode to microcode.dat".

Pliki AMD

Idziemy do https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmwar... i pobieramy pliki microcode_amd.bin i microcode_amd_fam15h.bin.

Narzędzie

Pobieramy sterownik ze strony https://flings.vmware.com/vmware-cpu-microcode-update-driver, rozpakowywujemy zawartość do nowego katalogu, kopiujemy tam microcode.dat, microcode_amd.bin i microcode_amd_fam15h.bin i z uprawnieniami administratora uruchamiamy install.bat.

Po pomyślnej instalacji wartość dokonać edycji Rejestru i w kluczu HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\cpumcupdate zmienić wartość Start na niższą (z 2 na 1), co wymusi ładowanie sterownika we wcześniejszym etapu startu systemu.

Potem już tylko wystarczy restart...

Weryfikacja

Informacja o pomyślnym uaktualnieniu pokazuje się w logu systemowym Windows:

Wersję mikrokodu możemy też sprawdzić używając HWiNFO z http://www.hwinfo.com (Microcode Update Revision w sekcji procesora).

Ograniczenia

Operację ładowania trzeba z oczywistych względów robić po każdym restarcie (i to nas będzie spoczywać obowiązek sprawdzania, czy przypadkiem nie pojawiła się nowa wersja mikrokodu).

Drugi problem związany jest z Hyper-V. Wymaga on hyperwizora i z jakichś powodów sterownik VMWare jest z nim niezgodny, na chwilę obecną trzeba go usunąć z systemu albo tymczasowo deaktywować używając komendy:

bcdedit /set hypervisorlaunchtype off

(wymagane oczywiście uprawnienia administratora i restart; włączenie można zrobić tą samą komendą z wartością "auto").

PS. Po napisaniu i publikacji w komentarzach zobaczyłem uwagę, że polecane jest pobieranie programu (jednego) z prywatnej plikowni - widzę, że autor uaktualnia to repozytorium i podaje kod źródłowy; jeżeli ktoś zna coś lepszego, proszę się podzielić (ja teraz na szybko znalazłem jeszcze skrypt bin2dat.py).