Не секрет, что производители материнских плат и ноутбуков не всегда дают возможность пользователям 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)


  1. Digriz
    31.07.2016 00:34
    +6

    Всё очень клёво написано. В то же время, проще использовать флэшку, отформатированную в 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. При необходимости восстанавливаем настройки с флэшки через то же меню.


    1. temujin
      31.07.2016 00:43

      Для UEFI native mode, такая флешка тоже будет загрузочной? У меня с загрузочными флешками на этом режиме всегда сложности были, уже даже не помню из-за чего, может кстати я не форматировал FAT32. На моем компе ESP партиция уже создана для UEFI, я ее ради обновления прошивки не создавал, но для тех у кого такой партиции нет проще с флешки обновляться, согласен.


      1. Digriz
        31.07.2016 00:56
        +1

        Загрузочной флэшку делать не нужно, достаточно, чтобы BIOS\UEFI её физически видел (если в FAT32 = ОК). Если увидит — то прочитает с неё нужные файлы, если структура каталогов создана, как описано.


        1. temujin
          31.07.2016 01:02

          Спасибо, надо опробовать такой метод. Странно, что на ESP разделе диска не требуются CryptRSA файлы.


          1. Digriz
            31.07.2016 01:17

            Странно, что на ESP разделе диска не требуются CryptRSA файлы


            Я просто скопировал то, что распаковал ) Много места не занимает.


  1. 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.


    1. temujin
      31.07.2016 20:45

      Когда доберусь до компьютера, обязательно проверю удастся ли распаковать экзешник с помощью p7zip. Тогда можно автоматизировать процесс: распаковать, скопировать файлы и перезагрузить ОС. Правда, в настройки BIOS все же самому придется залезать и ESP раздел создать тоже.


      1. pftbest
        31.07.2016 22:32
        +1

        Подтверждаю, стараюсь не запускать непонятные экзешники. Сначала пытаюсь распаковать через 7z, если не получилось, то пробую через winrar под wine, и только если совсем никак, то тогда уже решаю запускать его под wine или в виртуалке.


        1. temujin
          02.08.2016 09:37

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


          1. grossws
            02.08.2016 11:21

            Учитывая, что многие производители отдавали драйвера и обновления по http со страницы, загруженной по http, и не указывая хэша — очень условно. Очень надеюсь, что от этой практики стали отходить, но не верю.


  1. pdragon
    31.07.2016 10:25
    +3

    Больше в виде шутки тут позволю себе не согласиться ибо для этого дела переменный ток не обязателен если речь идёт о ноутбуке то его можно запитать постоянным даже не будучи гурёнком в радиотехнике.


  1. boris768
    31.07.2016 16:55

    Всё-таки это не совсем настоящее обновление BIOS/UEFI с помощью Linux. В ядре есть модуль, который поддерживает обновление прямо без перезагрузки для некоторых ноутбуков (кажется для Dell), а также над этим работают и для других материнских плат. Для более старых есть еще и flashrom — очень универсальная программа, которая работает даже под Mac OS и *BSD.


    1. temujin
      31.07.2016 17:13
      +1

      Знаете, я бы очень желал, чтобы обновление прошивки для Linux производилось одной командой в Bash и возможно скоро этот день наступит. А до этого как нибуть 3 файла сами скопируем в ESP.


  1. 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) и скормить это встроенному прошивальщику.


  1. mynameisdaniil
    01.08.2016 00:50

    Погодите, погодите. А что мешает вам обновится просто через интернет?


    1. temujin
      01.08.2016 11:02

      Уточните пожалуйста как. Речь идет о ноутбуке HP EliteBook под управлением Linux, в моем случае — Gentoo Linux.


      1. mynameisdaniil
        01.08.2016 11:43

        В самой паршивке есть опция — обновить с сайта HP. По крайней мере, в моем зетбуке. Наверняка, и у вас она есть. Все что нужно — кабель и роутер с DHCP, чтобы оно могло подключится к интернетам.


        1. temujin
          02.08.2016 09:33

          Она присутствует и в настройках прошивки моего компьютера. Через интернет не получалось обновиться, но может дело в Proxy/NAT настройках. Я проверю с подключенным сетевым кабелем, без всяких прокси.


  1. Notimer
    01.08.2016 10:58

    Как правило для материнских плат — современные UEFI апгрейдят прошивку через собственный интерфейс загрузчика UEFI.
    А что касается таки ноутбуков — да, тут ничего не поделаешь. Можно посмотреть в сторону какой-нибудь LiveCD с Windows PE, а не устраивать танцы с бубном, приведенным выше.


    1. temujin
      01.08.2016 11:15

      Знаете, я искал также Windows PE. Если я прав их разработка прекратилось, во всяком случае все что я находил было эпохи Windows XP. Этот способ, что я описал очень прост. Надо скопировать всего-то 3 файла а раздел ESP уже существует, если у вас UEFI Native режим. Если же нет, то те же 3 файла можно на FAT32 флешку записать, как уже в первом комментарии сказали. Я думаю это проще чем возиться с WinPE.


      1. Digriz
        01.08.2016 12:45
        +1

        Windows PE живее всех живых, входит в комплект Windows ADK.
        Другое дело, что набор библиотек в WinPE ограничен, а прошивальщику могут потребоваться те, что там отсутствуют.