Не секрет, что производители материнских плат и ноутбуков не всегда дают возможность пользователям Linux обновить UEFI/BIOS
прошивку так же ненавязчиво, как это делают пользователи Windows. Тем не менее для HP EliteBook 840G1, которым я пользуюсь, сделать это немногим сложнее.
Для этого дела понадобятся следующие артефакты:
- FAT32 EFI System Partition (ESP)
- WINE
- Переменный электрический ток
FAT32 ESP
Ноутбуки линейки HP EliteBook содержат 3 режима загрузки. Узнать какой из режимов выбран можно в настройках UEFI/BIOS
> System Configuration
> Boot 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
а далее File
> Update System BIOS
.
После выбора Accept
, процесс обновления стартует без прочих реверансов. Видимо зная цену своим аккумуляторам, производители обновляют прошивку только при включенном электрическом питании компьютера. 2-3 минуты, и процесс благополучно завершен.
UPDATE: По итогам здравых идей в комментариях необходимы некоторые дополнения.
- Можно скопировать те же самые 3 файла на USB флешку, в прописанных путях и используя её обновить прошивку. Разметка файловой системы должна быть FAT32 ESP.
- Можно обновиться из
File
>Update System BIOS
напрямую по интернету, если подключен сетевой кабель. Обновление не будет работать через WiFi соединение. - Вместо WINE для распаковки архива достаточно использовать
7z e sp64081.exe
.
Комментарии (21)
Laney1
31.07.2016 10:24+4никакие wine не нужны, с распаковкой экзешника в убунте успешно справляется p7zip. Вбиваем команду
7z e sp64081.exe
, и все.
кстати, стоит сказать что это специфичный для HP способ обновления. В свежих версиях UEFI (2.5+) запилили стандартный, через EFI Capsules. То есть обновления BIOS будут распространяться не как исполняемые файлы, а как пакеты в специальном формате, и устанавливаться средствами ОС или EFI Shell. В linux для этого есть консольная утилита fwupdate (нужно ядро 4.2+), в windows 8+ — windows UEFI firmware update platform.
temujin
31.07.2016 20:45Когда доберусь до компьютера, обязательно проверю удастся ли распаковать экзешник с помощью p7zip. Тогда можно автоматизировать процесс: распаковать, скопировать файлы и перезагрузить ОС. Правда, в настройки BIOS все же самому придется залезать и ESP раздел создать тоже.
pftbest
31.07.2016 22:32+1Подтверждаю, стараюсь не запускать непонятные экзешники. Сначала пытаюсь распаковать через 7z, если не получилось, то пробую через winrar под wine, и только если совсем никак, то тогда уже решаю запускать его под wine или в виртуалке.
temujin
02.08.2016 09:37С поправкой, что исполняемый файл драйвера с сайта производителя может считаться безопасным, согласен, что сначала лучше распаковать и рассмотреть содержимое пакета.
grossws
02.08.2016 11:21Учитывая, что многие производители отдавали драйвера и обновления по http со страницы, загруженной по http, и не указывая хэша — очень условно. Очень надеюсь, что от этой практики стали отходить, но не верю.
pdragon
31.07.2016 10:25+3Больше в виде шутки тут позволю себе не согласиться ибо для этого дела переменный ток не обязателен если речь идёт о ноутбуке то его можно запитать постоянным даже не будучи гурёнком в радиотехнике.
boris768
31.07.2016 16:55Всё-таки это не совсем настоящее обновление BIOS/UEFI с помощью Linux. В ядре есть модуль, который поддерживает обновление прямо без перезагрузки для некоторых ноутбуков (кажется для Dell), а также над этим работают и для других материнских плат. Для более старых есть еще и flashrom — очень универсальная программа, которая работает даже под Mac OS и *BSD.
temujin
31.07.2016 17:13+1Знаете, я бы очень желал, чтобы обновление прошивки для Linux производилось одной командой в Bash и возможно скоро этот день наступит. А до этого как нибуть 3 файла сами скопируем в ESP.
edd_k
31.07.2016 16:55На сайте HP под Linux предлагают скачать обновление в формате exe и просто запустить его, кликнув дважды! Как-то совсем уж толсто ))
http://h20564.www2.hp.com/hpsc/swd/public/readIndex?sp4ts.oid=5405097
А так да, скорее всего загрузочные танцы с бубном излишни.
Попробуйте распаковать sp64081.exe на флешку (по идее понадобится только лишь образ L71_0104.bin и, возможно, папка BIOSUpdate) и скормить это встроенному прошивальщику.
mynameisdaniil
01.08.2016 00:50Погодите, погодите. А что мешает вам обновится просто через интернет?
temujin
01.08.2016 11:02Уточните пожалуйста как. Речь идет о ноутбуке HP EliteBook под управлением Linux, в моем случае — Gentoo Linux.
mynameisdaniil
01.08.2016 11:43В самой паршивке есть опция — обновить с сайта HP. По крайней мере, в моем зетбуке. Наверняка, и у вас она есть. Все что нужно — кабель и роутер с DHCP, чтобы оно могло подключится к интернетам.
temujin
02.08.2016 09:33Она присутствует и в настройках прошивки моего компьютера. Через интернет не получалось обновиться, но может дело в Proxy/NAT настройках. Я проверю с подключенным сетевым кабелем, без всяких прокси.
Notimer
01.08.2016 10:58Как правило для материнских плат — современные UEFI апгрейдят прошивку через собственный интерфейс загрузчика UEFI.
А что касается таки ноутбуков — да, тут ничего не поделаешь. Можно посмотреть в сторону какой-нибудь LiveCD с Windows PE, а не устраивать танцы с бубном, приведенным выше.temujin
01.08.2016 11:15Знаете, я искал также Windows PE. Если я прав их разработка прекратилось, во всяком случае все что я находил было эпохи Windows XP. Этот способ, что я описал очень прост. Надо скопировать всего-то 3 файла а раздел ESP уже существует, если у вас UEFI Native режим. Если же нет, то те же 3 файла можно на FAT32 флешку записать, как уже в первом комментарии сказали. Я думаю это проще чем возиться с WinPE.
Digriz
01.08.2016 12:45+1Windows PE живее всех живых, входит в комплект Windows ADK.
Другое дело, что набор библиотек в WinPE ограничен, а прошивальщику могут потребоваться те, что там отсутствуют.
Digriz
Всё очень клёво написано. В то же время, проще использовать флэшку, отформатированную в FAT32.
Там создать в корне структуру каталогов Hewlett-Packard\BIOSUpdate\ и Hewlett-Packard\BIOS\New\
В первую группу пишутся HPBios*.* и CryptRSA*.*, во вторую — сам биос (*.bin)
При подключенной флэшке прошивальщик из BIOS найдёт её и предложит обновиться.
840-ю серию ещё не щупал, но 430-я на работе активно используется (версия платформы — N78, она указана в начале *.bin).
Кстати, там же из BIOS можно сделать Replicated Setup — задаём настройки в BIOS по нашему усмотрению (например, включение поддержки инструкций виртуализации процессором или отключение wi-fi карты при подключении ethernet) и сохраняем на ту же флэшку.
Файл будет лежать в корне, HpSetup.txt. При необходимости восстанавливаем настройки с флэшки через то же меню.
temujin
Для UEFI native mode, такая флешка тоже будет загрузочной? У меня с загрузочными флешками на этом режиме всегда сложности были, уже даже не помню из-за чего, может кстати я не форматировал FAT32. На моем компе ESP партиция уже создана для UEFI, я ее ради обновления прошивки не создавал, но для тех у кого такой партиции нет проще с флешки обновляться, согласен.
Digriz
Загрузочной флэшку делать не нужно, достаточно, чтобы BIOS\UEFI её физически видел (если в FAT32 = ОК). Если увидит — то прочитает с неё нужные файлы, если структура каталогов создана, как описано.
temujin
Спасибо, надо опробовать такой метод. Странно, что на ESP разделе диска не требуются CryptRSA файлы.
Digriz
Я просто скопировал то, что распаковал ) Много места не занимает.