Как прошить прошивку под Linux на практике?

15

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

Это так 1980-х годов.

Я сталкиваюсь с некоторыми инструментами флеш-памяти Linux из проекта Coreboot . Кажется, для поддержки различных FLASH-чипов. Но как это работает на практике?

Я предполагаю, что есть некоторые подводные камни, преобразующие обновления встроенного ПО, поставляемые поставщиком, в правильный формат. Или как насчет идентификации правильного чипа назначения?

В настоящее время я, вероятно, должен обновить, например:

  • прошивка некоторых дисков Seagate 1,5 ТБ
  • прошивка старой платы Abit Athlon 64 (премиальный биос)
  • Биос / Встраиваемый контроллер-Биос Thinkpad

Как обновить прошивку вашего устройства в системе Linux?

maxschlepzig
источник

Ответы:

11

Перепрошивка с FreeDOS, одна перезагрузка и без сменных устройств

  1. Убедитесь, что вы используете GRUB2 (проверьте, установлен ли у вас пакет grub-pcв Ubuntu)
  2. Возьмите ПАМЯТЬ SYSLINUX. В Ubuntu установите пакет, syslinux-commonи ваш memdisk будет находиться в/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. Загрузить MEMDISK:
    1. Введите linux16 (hd. Теперь нажмите вкладку. Список жестких дисков будет показан.
    2. Завершите выбор жесткого диска, например, чтобы в строке было написано linux16 (hd0,.
    3. Нажмите Tab еще раз, чтобы получить список разделов. Вам нужно найти раздел, где вы /usr/lib/syslinuxсмонтированы в вашей установке Linux.
    4. Теперь у вас есть жесткий диск и раздел спецификации, вы можете завершить путь , так что это выглядит следующим образом : linux16 (hd0,msdos3)/usr/lib/syslinux/memdisk. Нажмите Ввод.
  8. Загрузить FreeDOS:
    1. Используйте ту же вкладку завершения для поиска fdboot.img, но с командой initrd16вместо linux16. Вы будете в конечном итоге с линией , как это: initrd16 (hd0,msdos3)/home/janus/fdboot.img. Нажмите Ввод.
  9. Напишите bootи нажмите ввод.
  10. Появится загрузочное меню FreeDOS.
  11. Выберите «безопасный режим», так как вам не нужны драйверы.
  12. В DOS строке напишите название прошивки мигания исполняемый, например: FLASH.EXE. Нажмите Ввод.
  13. Подождите, пока мигание не закончится.
  14. Прошивка прошивки может загрузить саму машину, или вы можете получить приглашение обратно. Если вы получите приглашение обратно, нажмите Control-Alt-Delete для перезагрузки.
  15. Поскольку вы не изменили конфигурацию GRUB навсегда, она загрузится прямо в вашу ОС по умолчанию.

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

В качестве альтернативы см. Https://www.fladi.at/posts/large-freedos-boot-image/

Янус Троелсен
источник
Вы должны обновить свой существующий ответ, а не дублировать его.
maxschlepzig
Я бы предложил поместить эти строки в grub.cfg, чтобы сделать его пунктом меню. Проще скопировать и вставить их, или хотя бы перепечатать, используя настоящий текстовый редактор.
Дероберт
@derobert: Как мне надежно найти идентификатор устройства и раздела Grub2? Вы должны знать это, если запекаете его в конфиг. Вот почему завершение вкладки приятно.
Янус Троелсен
1
@derobert: Вы уверены, что говорите о Grub2? Этот формат выглядит как Grub0. * Для меня. Когда это msdosготово? Я постараюсь ответить на ваш вопрос, если вы отправите его. Дай мне знать.
Янус Троелсен
1
@ysangkok - это и grub1, и grub2, msdos - это просто тип раздела ... У меня нет вопросов, я подумал, что вы ответили («Как мне надежно найти устройство Grub2 и идентификатор раздела?»).
Дероберт
7

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

Что касается жестких дисков, опять же, это частный вопрос. Seagate предоставляет liveCD и загрузки Windows для выполнения обновлений прошивки, но не для инструментов Linux или Unix.

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

В противном случае вам просто нужно будет проконсультироваться с производителем об инструментах.

С другой стороны, если вы работаете с микроконтроллерами, вы часто можете программировать их с помощью довольно универсальных инструментов, хотя все еще на ограниченном уровне (например, микросхемы Atmel обычно можно программировать avrdude).

greyfade
источник
6

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

sg_write_buffer -v -m 5 -I <FW file> <dev>
user30578
источник
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)

Alecz
источник
Просто хочу связать свой ответ с другим ответом, который вы (выглядели как тот же человек?) Дали в другом месте: linuxquestions.org/questions/linux-hardware-18/…
Питер Теох,
Да, это я копировал свой ответ на обоих сайтах. Опять же, кредит переходит к источнику.
Alecz
2

Для моего seagate ST2000NM0024-1HT174 я так и сделал: скачал прошивку с seagate и сохранил ее в ключе usb. перезагрузил мой компьютер с живым usb (или dvd) linux mint mate 17.3. и распакуйте все утилиты seagate прямо на рабочий стол. Скопировал прошивку командой на рабочий стол, затем переименовал команду 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

Очень опасно, используйте это на свой страх и риск!

Удачи !

erikkssen
источник
1

Вы можете использовать flashrom для обновления BIOS материнской платы.

Пример (Abit KN9 Ultra):

Плата AMD AMD Athlon 64, AM2 Socket, чипсет Nvidia, выпущенная с 2006 года. Она имеет флэш-чип на 256 КБ, который можно заменить. BIOS отмечен знаком «Award», который, по-видимому, является торговой маркой 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. В этом примере файл 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.
maxschlepzig
источник
0

Мой небольшой опыт заключается в том, что я использовал Flashrom для обновления BIOS материнской платы Intel, и он работал нормально. В общем, это похоже на действительно хороший инструмент.

KellyClowers
источник
Не могли бы вы опубликовать пример командной строки, которую вы использовали для этого?
maxschlepzig
0

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

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

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

zdzichu
источник
0

Пытаться:

hdparm --fwdownload (И ОЧЕНЬ ОСТОРОЖНЫ!)

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

Stoatwblr
источник