GrabDuck

Обновление UEFI/BIOS в Linux

:

Не секрет, что производители материнских плат и ноутбуков не всегда дают возможность пользователям Linux обновить UEFI/BIOS прошивку так же ненавязчиво, как это делают пользователи Windows. Тем не менее для HP EliteBook 840G1, которым я пользуюсь, сделать это немногим сложнее.


Для этого дела понадобятся следующие артефакты:


  • FAT32 EFI System Partition (ESP)
  • WINE
  • Переменный электрический ток

FAT32 ESP

Ноутбуки линейки HP EliteBook содержат 3 режима загрузки. Узнать какой из режимов выбран можно в настройках UEFI/BIOSSystem ConfigurationBoot Mode. Данный раздел следует читать, если только выбран последний, бескомпромиссный режим UEFI, в остальных случаях можно проскочить.


  • Legacy
  • UEFI Hybrid with compatibility support module (CSM)
  • UEFI Native without CSM

Если вы внимательно читали топик про Linux kernel EFI Boot Stub, то вы наверняка знаете, что и как нужно сделать, для того, чтобы создать дисковый раздел. Можно использовать gdisk, parted или KDE Disk Partition для создания ESP раздела. Вот так выглядит уже готовый раздел.


Рекомендуется ESP раздел монтировать в /boot/efi, а не просто в /boot, для того чтобы можно было хранить образы ядра Linux и файлы загрузчика ОС на штатных линуксовых ФС, вместо того, чтобы все держать в FAT32 EFI System Partition.

(4:549)$ grep efi /etc/fstab 
/dev/sda4               /boot/efi   vfat            rw,users,noauto 0 2

Мы уже знаем, что UEFI/BIOS будет искать \EFI\BOOT\bootx64.efi, для чего абсолютный путь к файлу должен быть /boot/efi/EFI/Boot/Bootx64.efi, иначе все пропало и UEFI/BIOS не найдет загрузчик ОС! Обновлению системной прошивки это не помешает, но для чего же тогда нужна прошивка, если нельзя загрузить операционную систему? Очень немаловажно, что по-умолчанию GRUB-2 не копирует необходимый файл и поэтому bootx64.efi надо скопировать вручную.

(4:569) sudo cp /boot/grub/x86_64-efi/core.efi /boot/efi/EFI/Boot/Bootx64.efi

Подготовка

Берем свежую прошивку с сайта HP, выбираем Linux в выпадающем списке ОС, затем BIOS, скачиваем… и обнаруживаем исполняемый файл для Windows — sp64081.exe. Нет, глаза нас не подвели.

(4:520)$ file sp64081.exe 
sp64081.exe: PE32 executable (GUI) Intel 80386, for MS Windows

Опытные пользователи бывают готовы к подобным сюрпризам, для чего держат Windows VM либо пользуются не-эмулятором WINE или и то и другое вместе, бо случаи бывают разные. Для распаковки файла возможностей WINE вполне достаточно. Запускаем:


Программа завершает работу с бестактной ошибкой, напоминая лишний раз о том, что нам подсунули не то, что мы ожидали.


Однако, это не должно никого волновать, так как файлы распакованы верно а сверх этого ничего и не требовалось.


Список файлов
(4:529)$ ls -Rl sp64081/
sp64081/:
итого 18188
drwxr-xr-x 1 root root     356 июл 30 10:52 BIOSUpdate
-rw-r--r-- 1 root root 2950466 мар  4  2013 BIOSUpdateEFI.7z
-rwxr-xr-x 1 root root 4838072 авг  7  2013 HPBIOSUPDREC.exe
-rw-r--r-- 1 root root     883 июл 30 10:52 HPBIOSUPDREC.log
-rwxr-xr-x 1 root root 2353368 сен 18  2013 HpqPswd.exe
-rwxr-xr-x 1 root root   77824 фев 22  2012 Installer.exe
-rw-r--r-- 1 root root 8388608 окт  9  2013 L71_0104.bin
-rw-r--r-- 1 root root    1543 окт 24  2013 WSSP64081.rtf

sp64081/BIOSUpdate:
итого 2368
-rw-r--r-- 1 root root 259072 ноя  5  2012 CryptRSA32.efi
-rw-r--r-- 1 root root 443904 ноя  5  2012 CryptRSA.efi
-rw-r--r-- 1 root root 820784 июл  8  2013 HpBiosUpdate32.efi
-rw-r--r-- 1 root root    256 июл  8  2013 HpBiosUpdate32.s09
-rw-r--r-- 1 root root    256 июл  8  2013 HpBiosUpdate32.s12
-rw-r--r-- 1 root root    256 июл  8  2013 HpBiosUpdate32.sig
-rw-r--r-- 1 root root  16384 июл  9  2013 HpBiosUpdate.dll
-rw-r--r-- 1 root root 850512 июл  8  2013 HpBiosUpdate.efi
-rw-r--r-- 1 root root    256 июл  8  2013 HpBiosUpdate.s09
-rw-r--r-- 1 root root    256 июл  8  2013 HpBiosUpdate.s12
-rw-r--r-- 1 root root    256 июл  8  2013 HpBiosUpdate.sig

Из этого списка нам понадобятся только 3 файла: L71_0137.bin, HpBiosUpdate.efi и HpBiosUpdate.s12 и теперь внимание: скопировать файлы нужно точно в указанные места.

(4:534)$ ls -lR /boot/efi/EFI/HP/
/boot/efi/EFI/HP/:
итого 8
drwxr-xr-x 3 root root 4096 сен 22  2015 BIOS
drwxr-xr-x 2 root root 4096 июл 21 22:23 BIOSUpdate

/boot/efi/EFI/HP/BIOS:
итого 4
drwxr-xr-x 2 root root 4096 июл 21 22:05 New

/boot/efi/EFI/HP/BIOS/New:
итого 8192
-rwxr-xr-x 1 root root 8388608 май 23 13:57 L71_0137.bin

/boot/efi/EFI/HP/BIOSUpdate:
итого 840
-rwxr-xr-x 1 root root 850512 июл  8  2013 HpBiosUpdate.efi
-rwxr-xr-x 1 root root   3916 июл 21 22:23 HpBiosUpdate.log
-rwxr-xr-x 1 root root    256 июл  8  2013 HpBiosUpdate.s12
1291/7720MB

Чтобы попасть в меню настройки UEFI/BIOS надо после включения нажать клавишу Esc или F10 а далее FileUpdate System BIOS.


После выбора Accept, процесс обновления стартует без прочих реверансов. Видимо зная цену своим аккумуляторам, производители обновляют прошивку только при включенном электрическом питании компьютера. 2-3 минуты, и процесс благополучно завершен.

UPDATE: По итогам здравых идей в комментариях необходимы некоторые дополнения.


  • Можно скопировать те же самые 3 файла на USB флешку, в прописанных путях и используя её обновить прошивку. Разметка файловой системы должна быть FAT32 ESP.
  • Можно обновиться из FileUpdate System BIOS напрямую по интернету, если подключен сетевой кабель. Обновление не будет работать через WiFi соединение.
  • Вместо WINE для распаковки архива достаточно использовать 7z e sp64081.exe.