Flashrom как пользоваться
Перейти к содержимому

Flashrom как пользоваться

  • автор:

Универсальная утилита для чтения/записи flash-чипов — [flashrom]

Наиболее универсальная утилита для прошивки Flash ROM чипов в Linux и DOS — FlashROM:

  • релизы — download.flashrom.org/releases
  • актуальные срезы — download.flashrom.org/snapshots

Прикрепляю zip архив со свежей версией flashrom rom.by/files/flashrom_0.zip (периодически обновляется)

  • 300 семейств чипов flash ROM а также их варианты.
  • 220 поддерживаемых чипсетов
  • 401 поддерживаемых материнских плат
  • Parallel, LPC, FWH и SPI интерфейсы.
  • Поддержка прошивки на плате и внешних программаторов.
  • Flash chip package agnostic. DIP32, PLCC32, DIP8, SO8/SOIC8, TSOP32, TSOP40, TSOP48 and more have all been verified to work.
  • Специальный код включения прошивки для нестандартных материнских плат.
  • 50 PCI устройства, 9 USB, 1 параллельное устройство и все программаторы основанные на последовательном интерфейсе могут быть перепрошиты или использованы для перепрошивки.
  • Нет необходимости в физическом доступе. Доступа администратора достаточно для поддержки встроенных и PCI программаторов, прав пользователя достаточно для USB и основанных на последовательном интерфейсе программаторов.
  • Не нужны загрузочные дискеты, CD-ROM или флешки.
  • Не нужна клавиатура или монитор. Просто перепрошивайтесь через SSH.
  • Не нужна перезагрузка. Перепрошивайте ROM в запущенной системе, проверяйте правильность записи, радуйтесь жизни. Новый BIOS будет доступен в следующий раз.
  • «Горячая» перепрошивка.
  • Возможность использования в скриптах.
  • Скорость. flashrom намного быстрее чем программы от производителя.
  • Поддержка Linux, FreeBSD, NetBSD, DragonFly BSD, Nexenta, Solaris, Mac OS X и а DOS, частичная поддержка Windows (нет встроенных/PCI программаторов).

поддерживаемые устройства и чипы можно посмотреть командой «flashrom -L»

Спасибо всем, кто помогал проекту все эти годы.
Домашняя страница проекта flashrom.org/

Наиболее значимые улучшения в последней версии:
===== 0.9.6.1 =====
Указание программатора (может быть встроенный) теперь необхожимо явно с помощью опции -p
Опция записи логов -o
Проверка на дупликаты опций -i
===== 0.9.5 =====
Добавлена поддержка:
FTDI FT2232-based: Dangerous Prototypes Bus Blaster, TIAO/DIYGADGET USB Multi-Protocol Adapter (TUMPA), GOEPEL PicoTAP
Rayer-compatible: Xilinx parallel III (DLC5)
Linux SPI интерфейс (spidev)
AMD Hudson
Intel Tunnelcreek
RDC R6030 чипсет (bifferboard, в составе Vortex86)
Добавлена технология Intel Hardware Sequencing blogs.coreboot.org/blog/2011/06/11/gsoc-2011-flashrom-part-1/
Поддержка SPI в serprog, ускорение работы в dediprog
Начальная поддержка архитектур PPC, ARM
При вызове с флагом -LV печатает поддерживаемый вольтаж для всех чипов
Три уровня сообщений -V, -VV и -VVV
===== 0.9.4 =====
Добавлена поддержка:
OpenMoko Neo1973/Neo FreeRunner — отладочная плата версий 2 или 3 (FTDI FT2232-based (r1231))
Olimex ARM-USB-TINY, ARM-USB-TINY-H, ARM-USB-OCD, b ARM-USB-OCD-H, FTDI FT2232-based (r1331)
Open Graphics Project development card, OGD1 (r1241)
Angelbird Wings PCIe SSD/88SX7042 (r1258)
ITE IT85xx embedded controllers (r1262)
Intel NIC (r1297)
Множество новых чипов, чипсетов и материнских плат.
Улучшено взаимодествие с пользователем
Улучшена поддержка Dediprog SF100
Добавлен пакет для Mac OS X (с помощью DirectHW)
Улучшено отображение статуса разблокировки и защиты флеш-чипа.
Улучшена поддержка как payload для coreboot
Поддержка более одного Super I/O или EC на одном компьютере
Всегда проверяется читабельность чипа перед записью
Добавлена поддержка записи на NVIDIA MCP6x/MCP7x.
Добавлена поддержка эмуляции SPI флешек
Исправление множества ошибок и улучшения кода.
===== 0.9.3 =====
Поддержка новых материнских плат, чипсетов и чипов flash ROM.
Поддержка Dr. Kaiser PC-Waechter PCI устройств (FPGA).
Поддержка прошивки SPI чипов через Bus Pirate.
Поддержка программатора Dediprog SF100.
Выборочная блочная очистка для всех видов чипов flash ROM.
Автоматическая разблокировка.
Поддержка программаторов выбираема на этапе компиляции.
Автоматическое определение чипов flash ROM.
Возможности материнской платы определяются автоматически.
Определение материнской платы через DMI.
Определение ноутбуков предотвращает их порчу.
Поддержка тестового режима для всех операций.
Поддержка в Windows USB и последовательных внешних программаторов.
Поддержка NetBSD.
Поддержка DOS.
Изменены опции командной строки. Подробнее в помощи к программе.
Поддержка некоторых видеокарт NVIDIA.
Генерация процедур для тестирования новых чипов.
Поддержка bit-banging SPI.
Поддержка чипсетов Nvidia MCP6*/MCP7*.
Поддержка Highpoint ATA/RAID контроллеров.

Полный перечень поддерживаемых устройств в файле rom.by/files/list.txt (сгенерирован командой flashrom -L)

Вложение Размер
pciutils-3.1.7-DOS.rar 122.34 КБ
list.txt 58.34 КБ
flashrom-0.9.4.zip 163.45 КБ
  • 53963 просмотра

Прошиваем BIOS из линукса

столкнулся с такой проблемой.
шеф дал ноут, который принес из сервиски.
грит, поставь вынь.
ставлю вынь — не хочет ибо установщик не находит хард, который есть sata.
в сервиске биос поставили старый, без поддержки usb что сильно зарудняет работу и возможности определения в ручную типа соединения харда.
через диск биос не обновить ибо в досе он не видит привод почемуто.
но вот линь поставился на ура и все увидел(хотя usb все таки проигнорировал)
ноут Acer Aspire 5110
пришла мысля поставить линь и через него прошить bios.
порылся в и-нете и наткнулся на статью.
думаю пригодиться.

Для прошивания БИОСа в линуксе требуется только две вещи — сама прошивка БИОСа и программа, которая будет этот самый БИОС прошивать. Программу можно скачать в исходниках отсюда: http://openbios.info/FlashRom или же в Debian-based (например в Ubuntu) дистрибутивах поставить с помощью APT:

#apt-get install flashrom

Перед записью новой прошивки в БИОС, желательно сохранить старую версию, то есть скопировать прошивку, которая уже прошита в БИОСе, чтобы потом можно было легко восстановить все обратно:

#flashrom -r MyBIOS.bin

Где MyBIOS.bin — это имя файла, в который сохранится старая версия прошивки. После сохранения, можно уже на свой страх и риск записывать скачанную прошивку в БИОС:

#sudo flashrom -w NewBIOS.bin

Где NewBIOS.bin — это имя скачанной прошивки. Также, можно добавить ключ -v чтобы программа проверила записанную прошивку и еще можно добавить ключ -V чтобы вывод работы был более информативным:

#sudo flashrom -Vvw NewBIOS.bin

С остальными же ключами можно ознакомиться с помощью —help

$flashrom —help

На примере была испытана материнская плата GIGABYTE GA-965P-DQ6 rev2.0 с Ubuntu 8.04 GNU/Linux на борту
FlashRom при первом запуске без ключей показал вот такую информацию:

krik@krik-desktop:~/temp$ sudo flashrom
[sudo] password for krik:
Calibrating delay loop. OK.
No coreboot table found.
Found chipset «Intel ICH8/ICH8R», enabling flash write. OK.
Found chip «Macronix MX25L8005» (1024 KB) at physical address 0xfff00000.
Found chip «Macronix unknown Macronix SPI chip» (0 KB) at physical address 0x0.
Multiple flash chips were detected: MX25L8005 unknown Macronix SPI chip
Please specify which chip to use with the -c option.

На материнской плате установлено два чипа BIOS. Один главный, второй — запасной (в случае повреждения первого, прошивка восстанавливается со второго). Флэшер нашел оба этих чипа и предложил выбрать, который использовать. Чтобы выбрать чипсет — надо использовать ключ -c. Для этой материнской платы, чтобы прочитать уже стоящею прошивку БИОСа в файл, пришлось запустить ее с такими параметрами:

krik@krik-desktop:~/temp$ sudo flashrom -r MyBIOS.bin -c MX25L8005

Где MyBIOS.bin — это файл, куда сохранялась прошивка, а MX25L8005 — выбранный чипсет. После того, как прошивка была забекапена, можно уже приступать непосредственно к записи новой прошивки, которую можно скачать для этой материнской платы отсюда — http://www.gigabyte.ru/products/mb/bios/ga-965p-dq6_20.html но перед записью прошивки в БИОС можно проверить, ту ли прошивку вы скачали — достаточно сравнить размер MyBIOS.bin и 965PDQ6.12K или открыть оба файла в hex-редакторе и сравнить начало и конец. Если все в порядке, приступаем:

krik@krik-desktop:~/temp$ sudo flashrom -Vvw -c MX25L8005 965PDQ6.12K

Где файл 965PDQ6.12K — и есть сама прошивка с официального сайта (на сайте расположены exe-файлы, но это всего-лишь SFX-RAR архив с самой прошивкой и программой-флэшером для ДОСа). Теперь можно перезагрузиться с новым биосом.
Настройки NVRAM (CMOS)

В линуксе не только можно прошивать БИОС, но и также сохранять или записывать его текущие настройки, причем штатными средствами. Нужно всего-лишь подгрузить модуль nvram и считать информацию с устройства /dev/nvram:

#modprobe nvram
#sudo dd if=/dev/nvram of=my_bios_cfg.bin

Где my_bios_cfg.bin — это двоичный файл, куда сохранятся текущие настройки биоса. Записать настройки обратно можно тем-же путем, только поменяв if на of и of на if:

#sudo dd of=/dev/nvram if=my_bios_cfg.bin

Используем flashrom

Для прошивки SPI Flash можно пользоваться специализированными программаторами но при отсутствии таковых можно применить случайно оказавшийся под рукой микрокомпьютер с Linux на борту. Например OrangePi One с Armbian или RaspberryPi.

Подключение

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

Так что сделаем это заранее.

TODO Здесь должно быть фото

TODO А здесь табличка

Сборка

Качаем свежие исходники flashrom. На данный момент это версия 0.9.9.

Распаковываем полученный файл:

tar xvf flashrom-0.9.9.tar.bz2 cd flashrom-0.9.9 

В armbian уже установлен компилятор, так что можем сразу запустить сборку:

make CONFIG_ENABLE_LIBPCI_PROGRAMMERS=no CONFIG_ENABLE_LIBUSB1_PROGRAMMERS=no 

Параметры указывают не использовать PCI и USB программаторы.

Если же поддержка USB программаторов нужна, то предварительно установим библиотеку для работы с USB:

apt-get install libusb-1.0-0-dev 

И библиотеку для работы с устройствами на базе FTDI если ваш программатор основан на этой микросхеме:

apt-get install libftdi-dev 
make CONFIG_ENABLE_LIBPCI_PROGRAMMERS=no 

В случае успеха у нас появится бинарный файл.

ls -l flashrom -rwxr-xr-x 1 root root 322308 May 12 15:45 flashrom 
file flashrom flashrom: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=69769b4071bbff19ebe936fecb11fe36a0cc5c5f, not stripped 

Прошивка

Для начала проверим видит ли программатор подключённый чип.

flashrom -p linux_spi:dev=/dev/spidev0.0 flashrom v0.9.9-r1955 on Linux 3.4.112-sun8i (armv7l) flashrom is free software, get the source code at https://flashrom.org Calibrating delay loop. OK. No EEPROM/flash device found. Note: flashrom can never write if the flash chip isn't found automatically. 
flashrom -p linux_spi:dev=/dev/spidev0.0 flashrom v0.9.9-r1955 on Linux 3.4.112-sun8i (armv7l) flashrom is free software, get the source code at https://flashrom.org Calibrating delay loop. OK. Found Spansion flash chip "S25FL032A/P" (4096 kB, SPI) on linux_spi. No operations were specified. 

На сладкое

Во flashrom наконец добавили поддержку “народного” программатора на базе микросхемы CH341A

Supported USB devices for the ch341a_spi programmer: Vendor Device USB IDs Status Winchiphead (WCH) CH341A 1a86:5512 OK 

К сожалению поддерживается только SPI но не I2C.

Прошивка чипов с SPI интерфейсом при помощи Raspberry Pi

Как-то раз мне потребовалось прошить чип Flash памяти типа 25×40 Если прошивка заливается в чип через SPI интерфейс, то я обычно использую дешёвый китайский программатор CH341A. Но в этот раз чип никак не хотел прошиваться, хотя статусная полоска прогресса записи добегала до 100% без ошибок.

Тогда я решил подключить чип к SPI линии Raspberry Pi и прошить чип при помощи RasPi и программы Flashrom Сделать это оказалось несложно. Для тех, кто захочет использовать RasPi в качестве программатора я приведу в этом блоге небольшую инструкцию.

Подключаем чип к Raspberry Pi

CS - SPI_CE0 DO - MISO WP - 3.3V GND - GND VCC - 3.3V HOLD -3.3V CLK - SPI_CLK DIO - MOSI

Устанавливаем Flashrom

Перед установкой активируем SPI-интерфейс через raspi-config, либо подгружаем spi-модули ядра вручную при помощи modprobe Устанавливаем необходимые пакеты, от которых зависит успешная компиляция Flashrom: sudo apt-get install subversion pciutils pciutils-dev libusb-0.1 libusb-1.0 libusb-1.0-dev

Скачиваем последнюю версию исходников Flashrom из SVN репозитория, компилируем, устанавливаем

$ svn co svn://flashrom.org/flashrom/trunk flashrom $ cd flashrom $ make $ sudo make install

Прошиваем чип

Flashrom умеет определять тип подключенного чипа, стирать чип, записывать/считывать прошивку, верифицировать (проверять соответствие файла прошивки с записанной в чип информацией) чип.

Для прошивки чипа используется команда: sudo flashrom -w /home/pi/firmware.bin -V -p linux_spi:dev=/dev/spidev0.0 здесь -w — команда на запись прошивки (write), после неё указывается путь до файла с прошивкой (/home/pi/firmware.bin), -p — тип программатора. Если в качестве программатора выступает Raspberry Pi, то тип будет linux_spi:dev=/dev/spidev0.0, V — verbose режим (вывод служебных сообщений во время прошивки)

Перед записью чип желательно очистить командой sudo flashrom -E -p linux_spi:dev=/dev/spidev0.0

Считать прошивку в файл можно командой sudo flashrom -r /путь_до_файла/ -p linux_spi:dev=/dev/spidev0.0

Верификация sudo flashrom -v /путь_до_файла/ -p linux_spi:dev=/dev/spidev0.0

Если запустить flashrom без параметров, то он попытается определить тип подключенного чипа sudo flashrom -p linux_spi:dev=/dev/spidev0.0 Более подробно о командах flashrom можно прочитать тут: man flashrom

https://www.flashrom.org/Supported_hardware — на этой странице можно найти список чипов, с которыми flashrom реально тестировался

На этом всё. Всем добра!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *