Як на практиці прошивати прошивку під Linux?


15

Ну, я відчуваю себе занадто старим, щоб перестрибувати через кілька обручів, щоб оновити кілька прошивок звичайним способом, який залежить від постачальника: Завантажте деякі інструменти DOS, витрачайте час на створення (безкоштовного) завантажувального середовища DOS і витрачайте більше часу на створення BIOS насправді завантажиться з цього і, нарешті, спалах оновлення прошивки.

Це так 1980-ті.

Я натрапив на якийсь флеш-інструмент Linux від проекту Coreboot . Здається, підтримує різні FLASH-чіпи. Але як це працює на практиці?

Я думаю, що існують деякі підводні камені, які перетворюють оновлення програмного забезпечення постачальника у потрібний формат. А як щодо визначення правильного мікросхеми призначення?

В даний час мені, мабуть, доведеться оновити, наприклад:

  • прошивка деяких дисків Seagate 1,5 ТБ
  • прошивка старої плати Abit Athlon 64 (біографія премії)
  • Bios / Embedded-Controller-Bios Thinkpad

Як оновити прошивку пристроїв у системі Linux?

Відповіді:


11

Миготить за допомогою FreeDOS, однієї перезавантаження та відсутніх знімних пристроїв

  1. Переконайтесь, що ви використовуєте GRUB2 (перевірте, чи grub-pcвстановлений пакет на Ubuntu)
  2. Отримайте ЗАГАЛЬНІСТЬ SYSLINUX. В Ubuntu встановіть пакет, syslinux-commonі ваш мемдіск буде проживати в ньому/usr/lib/syslinux/memdisk
  3. Завантажте файл fdboot.img , збережіть його у домашньому каталозі чи іншому каталозі, який ви можете легко набрати за допомогою американської розкладки клавіатури
  4. Вставте своє миготливе програмне забезпечення у зображення FreeDOS:
    1. sudo -s
    2. mkdir -p /mnt/floppy
    3. mount -o loop -t msdos fdboot.img /mnt/floppy
    4. cp -via FLASH.EXE BIOS.IMG /mnt/floppy/( FLASH.EXEі BIOS.IMGє прикладами)
    5. umount /mnt/floppy
  5. Завантажте систему та перервіть її в GRUB2 (натисніть ESC)
  6. Натисніть c, щоб увійти в командний рядок GRUB2.
  7. Завантажити ПАМ'ЯТКУ:
    1. Введіть linux16 (hd. Тепер натисніть на вкладку. Буде показаний список жорстких дисків.
    2. Виконайте вибір жорсткого диска таким чином, щоб у рядку написано linux16 (hd0,, наприклад.
    3. Натисніть вкладку ще раз, щоб отримати список розділів. Вам потрібно знайти розділ, на якому /usr/lib/syslinuxвін встановлений у вашій інсталяції Linux.
    4. Тепер у вас є жорсткий диск і розділ специфікації, ви можете завершити шлях , так що це виглядає наступним чином : linux16 (hd0,msdos3)/usr/lib/syslinux/memdisk. Натисніть Enter.
  8. Завантажте FreeDOS:
    1. Використовуйте те саме завершення вкладки, щоб знайти fdboot.img, але initrd16замість команди linux16. Ви будете в кінцевому підсумку з лінією , як це: initrd16 (hd0,msdos3)/home/janus/fdboot.img. Натисніть Enter.
  9. Напишіть bootі натисніть Enter.
  10. З'явиться меню завантаження FreeDOS.
  11. Виберіть варіант "безпечного режиму", оскільки драйвери вам не потрібні.
  12. В DOS рядку напишіть назву прошивки миготіння виконуваний, наприклад: FLASH.EXE. Натисніть Enter.
  13. Зачекайте, коли миготіння закінчиться.
  14. Прошивка мікропрограмного забезпечення може завантажувати саму машину, або ви можете отримати відповідне повідомлення. Якщо ви повернетесь до запиту, натисніть Control-Alt-Delete для перезавантаження.
  15. Оскільки ви не змінили конфігурацію GRUB назавжди, вона завантажиться прямо назад до вашої ОС за замовчуванням.

Якщо на зображенні недостатньо місця, використовуйте найменше зображення від chtaube.eu . Віддаліть зображення і відфільтруйте його xxd. Тепер шукайте 55aa . Це повинно бути в 0x1fe. Ви можете монтувати зображення offset=$((0x200))як додатковий прапор. Слідкуйте за тим, щоб $(())синтаксис був специфічним для Bash, але він також працюватиме в Zsh.

Як варіант, див. Https://www.fladi.at/posts/large-freedos-boot-image/


Вам слід оновити існуючу відповідь, а не дублювати її.
maxschlepzig

Я б запропонував помістити ці рядки в grub.cfg, щоб зробити це меню. Простіше скопіювати та вставити їх або принаймні повторно ввести за допомогою реального редактора тексту.
дероберт

@derobert: Як надійно знайти ідентифікатор пристрою та розділу Grub2? Вам знадобиться це знати, якщо випікати його в конфігурацію. Тому заповнення вкладок приємно.
Янус Трольсен

1
@derobert: Ви впевнені, що говорите про Grub2? Цей формат мені схожий на Grub0. * Коли це попередньо msdos? Я спробую відповісти на ваше запитання, якщо ви його опублікуєте. Дай мені знати.
Янус Трольсен

2
@ysangkok - це і grub1, і grub2, msdos - це лише тип розділу ... У мене не виникає питання, я думав, що ви це зробили ("Як я надійно знайду ідентифікатор пристрою Grub2 та розділ?").
дероберт

7

Кожен пристрій з оновленою прошивкою, ймовірно, має свої методи для цього. Зокрема, материнські плати, як відомо, несумісні в цьому плані.

Що стосується жорстких дисків, це знову ж таки справа. Seagate надає живі диски та завантаження Windows для оновлення програмного забезпечення, але не інструменти Linux або Unix.

Ви можете створювати завантажувальні зображення для оновлень BIOS Thinkpad, які можна завантажувати з GRUB.

Інакше вам просто доведеться проконсультуватися у виробника щодо інструментів.

З іншого боку, якщо ви працюєте з мікроконтролерами, часто їх можна запрограмувати досить універсальними інструментами, хоча все ще на обмеженій основі (наприклад, мікросхеми Atmel зазвичай можна запрограмувати avrdude).


6

для відео від Seagate 3TB (ST3000VX000-9YW1):

sg_write_buffer -v -m 5 -I <FW file> <dev>

3

Я успішно прошив привід Seagate Barracuda 7200.12 ST31000528AS (1 ТБ SATA) таким способом: ( Використовуйте на свій страх і ризик! )

  1. Завантажте ISO з Seagate: http://www.seagate.com/staticfiles/support/downloads/firmware/Barracuda12-ALL-CC49.iso
  2. кріплення / витяг PH-CC49.imaз .iso файлу
  3. Додайте .ima на USB-накопичувач: dd if=./PH-CC49.ima of=/dev/sdX bs=512k
  4. Вимкніть комп’ютер та відключіть усі накопичувачі, окрім накопичувачів, які потрібно блимати
  5. Завантажтеся з USB-накопичувача (це завантажиться в утиліту оновлення прошивки Seagate
  6. Дотримуйтесь простих інструкцій на екрані, щоб прошивати накопичувачі
  7. Вимкніть живлення, підключіть все назад і ввімкніть живлення

Це воно! Ні Windows, ні об'ємні компакт-диски, ні редагування Grub, ні FreeDos, ні лукаві Windows .exe (спробував, але не вдалось із незрозумілим повідомленням про помилку)

Кредит надходить до джерела: http://ubuntuaddicted.blogspot.ca/2014/10/seagate-firmware-flash-using-usb.html (знайдено його за допомогою пошуку PH-CC49.ima)


Просто хочу зв’язати свою відповідь з іншою відповіддю, яку ви (схожий на цю ж людину?) Дали деінде: linuxquestions.org/questions/linux-hardware-18/…
Петро Тео

Так, це було копіювання моєї відповіді на обох сайтах. Знову ж таки, кредит йде до джерела.
Алеч

2

Для мого Seagate ST2000NM0024-1HT174 я зробив це: завантажив прошивку з Seagate і зберігав її в ключі usb. перезавантажив мій ПК з живим usb (або dvd) linux mint mate 17.3. і розпакуйте всю утиліту Seagate прямо на Desktop. скопіювали вбудовану програму команди на Desktop, а потім перейменували команду seaflashlin_33_054 на більш просто seaflashlin Після відкриття терміналу і написали:

mint@mint ~ $ sudo su    (enter in Superuser live mint)

mint mint # cd Desktop

mint Desktop # ./seaflashlin

bash: ./seaflashlin: Permission denied 

(Помилка! Я змінюю файл дозволу)

mint Desktop # ls -l
total 69284
drwxr-xr-x 5 mint mint      120 Nov  3 11:14 EntCap-Makara-SATA-SN05
-rw-r--r-- 1 mint mint 68386705 Nov  2 19:36 EntCap-Makara-SATA-SN05.zip
-rw-r--r-- 1 mint mint  2032640 Sep 10  2015 MakaraEntCapSATA-STD-512E-SN05.LOD
-rw-r--r-- 1 mint mint      312 Dec 17  2015 MK-SN05.CFS
-rw-r--r-- 1 mint mint   369127 Sep 11  2015 READMEFIRST-EnterpriseCapacity3.5-Makara-SATA firmware update.pdf
-rw-r--r-- 1 mint mint   104280 Oct 26  2015 seaflashlin
-rw-r--r-- 1 mint mint    31848 Oct 26  2015 seaflashlin.046.txt
-rwxr-xr-x 1 mint mint     7874 Nov  3 11:13 ubiquity.desktop

mint Desktop # chmod ugo+rxw *

mint Desktop # ls -l

total 69284
drwxrwxrwx 5 mint mint      120 Nov  3 11:14 EntCap-Makara-SATA-SN05
-rwxrwxrwx 1 mint mint 68386705 Nov  2 19:36 EntCap-Makara-SATA-SN05.zip
-rwxrwxrwx 1 mint mint  2032640 Sep 10  2015 MakaraEntCapSATA-STD-512E-SN05.LOD
-rwxrwxrwx 1 mint mint      312 Dec 17  2015 MK-SN05.CFS
-rwxrwxrwx 1 mint mint   369127 Sep 11  2015 READMEFIRST-EnterpriseCapacity3.5-Makara-SATA firmware update.pdf
-rwxrwxrwx 1 mint mint   104280 Oct 26  2015 seaflashlin
-rwxrwxrwx 1 mint mint    31848 Oct 26  2015 seaflashlin.046.txt
-rwxrwxrwx 1 mint mint     7874 Nov  3 11:13 ubiquity.desktop

mint Desktop # ./seaflashlin  

usage:
seaflashlin_i386 {-m <model_number> -f <fw_file> | -c <cfs_file>} [-d <sg_device>]
seaflashlin_i386 -f <fw_file> -d <sg_device>

Options:
    -i  PRINT IDENT INFO
    -v  PRINT VERSION AND EXIT (overrides all other arguments)
    -l  SHOW LICENSE
    -o  TIMEOUT VALUE (seconds)
    -x  TEST CFS FILE
Modes supported:
    -e  DEFERRED SIZE (ATA ONLY)
    -s  SEGMENT SIZE (1 segment = 512 bytes)
    -p  FORCE ATA PASSTHROUGH
    -w  FORCE WRITE BUFFER CMD
    -u  NON-SEGMENTED
e.g:
    seaflashlin_i386 -s 64 -f test.lod -d /dev/sg0
returns:
    0    No error found
    1    Fatal error in command line options
    2    FW Download Failed
    3    Invalid device

mint Desktop # ./seaflashlin -i

================================================================================
 Seagate Firmware Download Utility v0.4.6 Build Date: Oct 26 2015
 Copyright (c) 2014 Seagate Technology LLC, All Rights Reserved
 Thu Nov  3 11:20:52 2016
================================================================================
ATA       /dev/sg0 MN: ST2000NM0024-1HT174     SN: Z4H010XY             FW: SN02
PIONEER   /dev/sg1 MN: DVD-RW  DVR-221         SN:                      FW: 1.00
PIONEER   /dev/sg2 MN: DVD-RW  DVR-221         SN:                      FW: 1.00
SanDisk   /dev/sg3 MN: Cruzer Micro            SN:                      FW: 8.02

(це підтверджує, що моя прошивка є версією SN02, а HD - знайти за адресою / dev / sg0)

Тепер я можу прошивати біографії за допомогою: (xxx.LOD = жорсткий диск прошивки)

mint Desktop # ./seaflashlin -f MakaraEntCapSATA-STD-512E-SN05.LOD -d /dev/sg0

================================================================================
 Seagate Firmware Download Utility v0.4.6 Build Date: Oct 26 2015
 Copyright (c) 2014 Seagate Technology LLC, All Rights Reserved
 Thu Nov  3 11:26:21 2016
================================================================================
Flashing microcode file MakaraEntCapSATA-STD-512E-SN05.LOD to /dev/sg0
 .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  :  !
Microcode Download to /dev/sg0 SUCCESSFUL

mint Desktop # ./seaflashlin -i
================================================================================
 Seagate Firmware Download Utility v0.4.6 Build Date: Oct 26 2015
 Copyright (c) 2014 Seagate Technology LLC, All Rights Reserved
 Thu Nov  3 11:26:45 2016
================================================================================
ATA       /dev/sg0 MN: ST2000NM0024-1HT174     SN: Z4H010XY             FW: SN05
PIONEER   /dev/sg1 MN: DVD-RW  DVR-221         SN:                      FW: 1.00
PIONEER   /dev/sg2 MN: DVD-RW  DVR-221         SN:                      FW: 1.00
SanDisk   /dev/sg3 MN: Cruzer Micro            SN:                      FW: 8.02

які підтверджують, що біос змінено з SN02 на SN05

Дуже небезпечно, використовуйте це на свій страх і ризик!

Удачі !


1

Ви можете використовувати flashrom для оновлення BIOS материнської плати.

Приклад (Abit KN9 Ultra):

Дошка - плата AMD Athlon 64, AM2 Socket, чіпсет Nvidia, випущена з 2006 року. У неї є флеш-чіп 256 Кб, який можна замінити. BIOS позначений «Премією», яка, схоже, є торговою маркою Phoenix.

Flashrom підтримує цей чіпсет і флеш-чіп.

Підтримка може бути протестована за допомогою команди типу:

# flashrom --programmer internal
Calibrating delay loop... OK.
Found chipset "NVIDIA MCP55".
Enabling flash write... OK.
Enabling full flash access for board "abit KN9 Ultra"... OK.
Found PMC flash chip "Pm49FL004" (512 kB, LPC, FWH) mapped at physical address 0x00000000fff80000.

Спершу має сенс створити резервну копію поточного вмісту флеш-чіпа:

# flashrom --programmer internal -c Pm49FL004 -r backup.bin

Потім його можна порівняти з файлом зображення ванілі від постачальника (використовуючи, наприклад, xxdі vimdiff).

Очікуються деякі відмінності, оскільки деякі BIOS також зберігають додаткову інформацію (наприклад, DMI) та конфігурацію (наприклад, MAC адреси) у спалах. Так само і з Abit KN9 Ultra. Дані DMI зберігаються в перших 1872 байтах - і легко відновлюються BIOS під час завантаження. MAC-адреси зберігаються при зміщенні 0x74E30.

Файли прошивки постачальника упаковані в zip-архів, який містить awdflash.exeі BINфайл, наприклад M520A_23.BIN. У цьому прикладі бін-файл містить зображення BIOS таким, яким він є, тобто його можна безпосередньо записати виконати флеш-чіп з командою типу:

# flashrom --programmer internal -c Pm49FL004 -w M520A_23.BIN

Calibrating delay loop... OK.
Found chipset "NVIDIA MCP55".
Enabling flash write... OK.
Enabling full flash access for board "abit KN9 Ultra"... OK.
Found PMC flash chip "Pm49FL004" (512 kB, LPC, FWH) mapped at physical address 0x00000000fff80000.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.

Залежно від оновлення, можливо, буде потрібно очистити CMOS для наступної перезавантаження - інакше BIOS може не запуститися. На цій платі CMOS можна очистити за допомогою перемички. Очищення за допомогою програмного забезпечення також можливе (наприклад, через CmosPwd ).

Для збереження унікальних MAC-адрес за замовчуванням нове зображення постачальника може бути виправлене перед миготінням, наприклад:

dd if=backup.bin of=mac.bin bs=1 count=16 skip=$(echo 16 i 74E30 p | dc)
dd if=mac.bin of=M520A_23_with_mac.bin bs=1 seek=$(echo 16 i 74E30 p | dc) \
   conv=notrunc

Підводні камені:

  • Спалах запис може руйнуватися з - за конкретну материнську плату плати дозволяє (наприклад , для відключення захисту від запису) коду , який не реалізований на FlashROM, поки.

0

Мій невеликий досвід полягає в тому, що я використовував Flashrom для оновлення моєї BIOS на материнській платі Intel, і це працювало чудово. Взагалі це здається справді приємним інструментом.


Чи можете ви розмістити приклад командного рядка, який ви використовували для цього?
maxschlepzig

0

Використання диспетчера оновлення DOS, завантажених GRUB, як було зазначено раніше, працює для більшості апаратних засобів. У деяких випадках можна знайти рідні інструменти. Dell навіть готує сховища, які інтегруються в систему упаковки distro:

http://linux.dell.com/wiki/index.php/Repository/firmware

На жаль, більшість оновлень вимагає перезавантаження машини для завершення.


0

Спробуйте:

hdparm --fwdownload (І БУДУТЬ ДУЖЕ ДОБРО!)

Однак будьте обережні!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.