Jak w praktyce flashować oprogramowanie układowe w systemie Linux?

15

Cóż, czuję się za stary, aby przeskakiwać przez kilka płonących obręczy, aby zaktualizować kilka oprogramowania układowego w zwykły sposób specyficzny dla producenta: Pobierz niektóre narzędzia DOS, marnuj trochę czasu na tworzenie (darmowego) nośnika rozruchowego DOS i marnowanie więcej czasu, aby BIOS faktycznie uruchom z tego i wreszcie flashuj aktualizację oprogramowania.

Tak jest w latach 80-tych.

Natknąłem się na jakieś narzędzie flash linux z projektu Coreboot . Wygląda na to, że obsługuje różne układy FLASH. Ale jak to działa w praktyce?

Wydaje mi się, że istnieją pewne pułapki powodujące konwersję aktualizacji oprogramowania układowego dostarczonych przez dostawcę do odpowiedniego formatu. A co z identyfikacją odpowiedniego układu docelowego?

Obecnie prawdopodobnie muszę zaktualizować na przykład:

  • oprogramowanie niektórych dysków Seagate 1,5 TB
  • oprogramowanie starej płyty Abit Athlon 64 (biografie nagród)
  • Bios / Embedded-Controller-Bios z Thinkpad

Jak zaktualizować oprogramowanie wewnętrzne urządzeń w systemie Linux?

maxschlepzig
źródło

Odpowiedzi:

11

Flashowanie za pomocą FreeDOS, jeden restart i brak urządzeń wymiennych

  1. Upewnij się, że używasz GRUB2 (sprawdź, czy masz pakiet grub-pczainstalowany na Ubuntu)
  2. Zdobądź MEMDISK SYSLINUX. W systemie Ubuntu zainstaluj pakietsyslinux-common a twój memdisk będzie się w nim znajdował/usr/lib/syslinux/memdisk
  3. Pobierz fdboot.img , zapisz go w swoim katalogu domowym lub w innym katalogu, który możesz łatwo wpisać za pomocą układu klawiatury w USA
  4. Osadź swoje oprogramowanie flashujące na obrazie 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.EXEi BIOS.IMGsą przykładami)
    5. umount /mnt/floppy
  5. Uruchom system i przerwij go w GRUB2 (naciśnij ESC)
  6. Naciśnij c, aby wejść do linii poleceń GRUB2.
  7. Załaduj MEMDISK:
    1. Enter linux16 (hd. Teraz naciśnij tab. Zostanie wyświetlona lista dysków twardych.
    2. Dokonaj wyboru dysku twardego, aby linux16 (hd0,na przykład napisał:
    3. Naciśnij tab jeszcze raz, aby uzyskać listę partycji. Musisz znaleźć partycję, na której /usr/lib/syslinuxjest zamontowany twój system Linux.
    4. Teraz masz specyfikację twardym dysku i partycji, można wykonać ścieżkę tak, że wygląda tak: linux16 (hd0,msdos3)/usr/lib/syslinux/memdisk. Naciśnij enter.
  8. Załaduj FreeDOS:
    1. Użyj tego samego uzupełnienia tabulatora, aby znaleźć fdboot.img, ale z poleceniem initrd16zamiast linux16. Skończysz z linii tak: initrd16 (hd0,msdos3)/home/janus/fdboot.img. Naciśnij enter.
  9. Napisz booti naciśnij enter.
  10. Pojawi się menu startowe FreeDOS.
  11. Wybierz opcję „trybu awaryjnego”, ponieważ nie potrzebujesz sterowników.
  12. W DOS, wpisz nazwę pliku wykonywalnego oprogramowania miga, na przykład: FLASH.EXE. Naciśnij enter.
  13. Poczekaj na zakończenie flashowania.
  14. Flasher oprogramowania układowego może uruchomić sam komputer lub możesz otrzymać monit z powrotem. Jeśli pojawi się monit z powrotem, naciśnij klawisze Control-Alt-Delete, aby ponownie uruchomić komputer.
  15. Ponieważ nie zmieniłeś konfiguracji GRUBa na stałe, uruchomi się on ponownie w domyślnym systemie operacyjnym.

Jeśli na obrazie nie ma wystarczającej ilości miejsca, użyj najmniejszego obrazu z chtaube.eu . Rozpakuj obraz i przefiltruj go xxd. Teraz wyszukaj 55aa . Powinno być 0x1fe. Możesz zamontować obraz offset=$((0x200))jako dodatkową flagę montowania. Uwaga: $(())składnia jest specyficzna dla Bash, ale będzie działać również w Zsh.

Alternatywnie, patrz https://www.fladi.at/posts/large-freedos-boot-image/

Janus Troelsen
źródło
Powinieneś zaktualizować swoją istniejącą odpowiedź zamiast powielać ją.
maxschlepzig
Sugerowałbym umieszczenie tych wierszy w grub.cfg, aby stał się pozycją menu. Łatwiej je skopiować i wkleić lub przynajmniej wpisać ponownie za pomocą prawdziwego edytora tekstu.
derobert
@derobert: Jak niezawodnie znaleźć identyfikator urządzenia Grub2 i identyfikator partycji? Musisz wiedzieć, że jeśli wypiekasz go do konfiguracji. Właśnie dlatego uzupełnianie kart jest fajne.
Janus Troelsen
1
@derobert: Czy na pewno mówisz o Grub2? Ten format wygląda dla mnie jak Grub0. *. Kiedy jest msdosdodany? Postaram się odpowiedzieć na twoje pytanie, jeśli je opublikujesz. Daj mi znać.
Janus Troelsen
1
@ysangkok, który jest zarówno grub1, jak i grub2, msdos to tylko typ partycji ... Nie mam pytania, pomyślałem, że tak („Jak niezawodnie znaleźć identyfikator urządzenia Grub2 i identyfikator partycji?”).
derobert
7

Każde urządzenie z aktualizowanym oprogramowaniem będzie prawdopodobnie miało swoje własne metody. W szczególności płyty główne są w tym zakresie notorycznie niekompatybilne.

Jeśli chodzi o dyski twarde, znowu jest to kwestia zastrzeżona. Seagate zapewnia płyty LiveCD i pliki do pobrania dla systemu Windows w celu przeprowadzenia aktualizacji oprogramowania układowego, ale nie udostępnia narzędzi dla systemu Linux ani Unix.

Możesz budować obrazy rozruchowe dla aktualizacji systemu BIOS Thinkpad, które można uruchomić z GRUB-a.

W przeciwnym razie będziesz musiał po prostu skonsultować się z producentem narzędzi.

Z drugiej strony, jeśli pracujesz z mikrokontrolerami, często możesz programować je za pomocą dość uniwersalnych narzędzi, choć nadal w ograniczonym zakresie (np. Chipy Atmel zwykle można programować avrdude).

greyfade
źródło
6

dla wideo Seagate 3 TB (ST3000VX000-9YW1):

sg_write_buffer -v -m 5 -I <FW file> <dev>
użytkownik30578
źródło
3

Udało mi się sflashować dysk Seagate Barracuda 7200.12 ST31000528AS (1 TB SATA) za pomocą następującej metody: ( Używaj na własne ryzyko! )

  1. Pobierz ISO z Seagate: http://www.seagate.com/staticfiles/support/downloads/firmware/Barracuda12-ALL-CC49.iso
  2. podłącz / wypakuj PH-CC49.imaz pliku .iso
  3. dodaj .ima na pamięć USB: dd if=./PH-CC49.ima of=/dev/sdX bs=512k
  4. Wyłącz komputer i odłącz wszystkie dyski oprócz dysków, które mają być flashowane
  5. Uruchom z napędu USB (uruchomi się to w narzędziu aktualizacji oprogramowania układowego Seagate)
  6. Postępuj zgodnie z prostymi instrukcjami na ekranie, aby sflashować dyski
  7. Wyłącz, podłącz wszystko z powrotem i włącz

Otóż ​​to! Bez systemu Windows, bez dużych płyt CD, bez edycji Grub, bez FreeDos, bez wadliwych plików .exe Windowsa (próbowałem, ale nie udało się wyświetlić niewyraźnego komunikatu o błędzie)

Kredyt trafia do źródła: http://ubuntuaddicted.blogspot.ca/2014/10/seagate-firmware-flash-using-usb.html (znaleziono go, wyszukując PH-CC49.ima)

Alecz
źródło
Po prostu chcę połączyć swoją odpowiedź z inną odpowiedzią, którą (wyglądając jak ta sama osoba) podałeś w innym miejscu: linuxquestions.org/questions/linux-hardware-18/…
Peter Teoh
Tak, to ja kopiowałem swoją odpowiedź na obu stronach. Ponownie, kredyt trafia do źródła.
Alecz
2

Zrobiłem to dla mojego Seagate ST2000NM0024-1HT174: pobrałem oprogramowanie wewnętrzne z Seagate i zapisałem je w kluczu USB. zrestartowałem komputer z Live USB (lub DVD) Linux Mate Mate 17.3. i rozpakuj wszystkie narzędzia Seagate bezpośrednio na pulpicie. skopiowałem oprogramowanie na komendę na pulpicie, a następnie zmieniłem nazwę na komendę seaflashlin_33_054 na prościej seaflashlin po otwarciu terminala i napisałem:

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

mint mint # cd Desktop

mint Desktop # ./seaflashlin

bash: ./seaflashlin: Permission denied 

(Błąd! Zmieniam plik uprawnień)

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

(to potwierdza, że ​​moje oprogramowanie układowe jest w wersji SN02, a HD znajduje się w / dev / sg0)

Teraz mogę sflashować bios za pomocą: (xxx.LOD = dysk twardy oprogramowania układowego)

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

które potwierdzają zmianę bios z SN02 na SN05

Bardzo niebezpieczne, używaj tego na własne ryzyko!

Powodzenia !

erikkssen
źródło
1

Możesz użyć Flashrom, aby zaktualizować BIOS płyty głównej.

Przykład (Abit KN9 Ultra):

Płytka to płyta AMD Athlon 64, AM2 Socket, chipset Nvidia, wydana od 2006 roku. Ma wymienną pamięć flash 256 KB. BIOS jest oznaczony „Award”, który wydaje się być znakiem towarowym Phoenix.

Flashrom obsługuje ten mikroukład i ten układ flash.

Wsparcie można przetestować za pomocą polecenia:

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

Warto wykonać kopię zapasową bieżącej zawartości układu flash, najpierw:

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

Następnie można go porównać do pliku obrazu waniliowego od dostawcy (używając np. xxdIvimdiff ).

Spodziewane są pewne różnice - ponieważ niektóre BIOS-y przechowują także dodatkowe informacje (np. DMI) i konfigurację (np. Adresy MAC) we flashu. Dotyczy to również Abit KN9 Ultra. Dane DMI są przechowywane w pierwszych 1872 bajtach - i są łatwo ponownie generowane przez BIOS podczas rozruchu. Adresy MAC są przechowywane z przesunięciem 0x74E30.

Pliki firmware sprzedawca są pakowane w archiwum zip, który zawiera awdflash.exei BINpliku, np M520A_23.BIN. W tym przykładzie plik bin zawiera obraz systemu BIOS w takiej postaci, w jakiej jest, tzn. Można go zapisać bezpośrednio za pomocą układu flash za pomocą polecenia:

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

W zależności od aktualizacji może być konieczne wyczyszczenie pamięci CMOS podczas następnego restartu - w przeciwnym razie BIOS może się nie uruchomić. Na tej płycie CMOS można wyczyścić za pomocą ustawienia zworek. Możliwe jest również czyszczenie za pomocą oprogramowania (np. Przez CmosPwd ).

Aby zachować unikalne domyślne adresy MAC, nowy obraz dostawcy można załatać przed flashowaniem, np .:

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

Pułapki:

  • Zapis Flash może się nie powieść z powodu kodu włączającego płytę główną (tj. Wyłączającego ochronę przed zapisem), który nie jest jeszcze zaimplementowany przez Flashrom.
maxschlepzig
źródło
0

Moje małe doświadczenie polega na tym, że użyłem Flashrom do aktualizacji BIOSu płyty głównej Intel i działało dobrze. Ogólnie wydaje się, że to naprawdę miłe narzędzie.

KellyClowers
źródło
Czy mógłbyś zamieścić przykładowy wiersz poleceń, którego użyłeś do tego?
maxschlepzig
0

Korzystanie z uaktualnienia DOS dyskietka uruchomiona za pomocą GRUB-a, jak wspomniano wcześniej, działa na większości urządzeń. W niektórych przypadkach można znaleźć natywne narzędzia. Dell przygotowuje nawet repozytoria, które integrują się z systemem pakowania distro:

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

Niestety większość aktualizacji wymaga ponownego uruchomienia komputera.

zdzichu
źródło
0

Próbować:

hdparm --fwdownload (I BĄDŹ BARDZO OSTROŻNY!)

Uważaj jednak!

Stoatwblr
źródło