Bagaimana cara mem-flash firmware di Linux dalam praktek?

15

Yah, saya merasa terlalu tua untuk melompati beberapa lingkaran pembakaran untuk memutakhirkan beberapa firmware melalui cara khusus vendor yang biasa: Unduh beberapa alat DOS, buang waktu membuat media boot (Gratis-) DOS dan membuang lebih banyak waktu untuk membuat BIOS sebenarnya boot dari itu dan akhirnya mem-flash upgrade firmware.

Ini sangat tahun 1980-an.

Saya menemukan beberapa alat flash linux dari proyek Coreboot . Tampaknya mendukung berbagai FLASH-chip. Tetapi bagaimana cara kerjanya dalam praktik?

Saya kira ada beberapa jebakan untuk mengubah vendor menyediakan pembaruan firmware ke dalam format yang tepat. Atau bagaimana dengan mengidentifikasi chip tujuan yang tepat?

Saat ini saya mungkin harus memutakhirkan misalnya:

  • firmware dari beberapa disk Seagate 1,5 TB
  • firmware papan Abit Athlon 64 lama (Award bios)
  • Bios / Embedded-Controller-Bios dari Thinkpad

Bagaimana Anda meningkatkan firmware perangkat Anda di sistem Linux?

maxschlepzig
sumber

Jawaban:

11

Flashing dengan FreeDOS, satu reboot dan tidak ada perangkat yang dapat dilepas

  1. Pastikan Anda menggunakan GRUB2 (periksa apakah Anda telah grub-pcmenginstal paket di Ubuntu)
  2. Dapatkan MEMDISK SYSLINUX. Di Ubuntu, instal paket syslinux-commondan memdisk Anda akan berada/usr/lib/syslinux/memdisk
  3. Unduh fdboot.img , simpan di direktori home Anda, atau direktori lain yang dapat Anda ketik dengan mudah dengan tata letak keyboard AS
  4. Sematkan perangkat lunak Anda yang berkedip di gambar 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.EXEdan BIOS.IMGmerupakan contoh)
    5. umount /mnt/floppy
  5. Boot sistem Anda dan interupsi dalam GRUB2 (tekan ESC)
  6. Tekan c untuk masuk ke baris perintah GRUB2.
  7. Muat MEMDISK:
    1. Masukkan linux16 (hd. Sekarang tekan tab. Daftar hardisk akan ditampilkan.
    2. Lengkapi pilihan harddisk sehingga baris mengatakan linux16 (hd0,, misalnya.
    3. Tekan tab sekali lagi untuk mendapatkan daftar partisi. Anda perlu menemukan partisi tempat Anda /usr/lib/syslinuxterpasang di instalasi Linux Anda.
    4. Sekarang Anda memiliki harddisk dan partisi spesifikasi, Anda dapat menyelesaikan jalan sehingga terlihat seperti ini: linux16 (hd0,msdos3)/usr/lib/syslinux/memdisk. Tekan enter.
  8. Muat FreeDOS:
    1. Gunakan penyelesaian tab yang sama untuk menemukan fdboot.img, tetapi dengan perintah initrd16alih-alih linux16. Anda akan berakhir dengan baris seperti ini: initrd16 (hd0,msdos3)/home/janus/fdboot.img. Tekan enter.
  9. Tulis bootdan tekan enter.
  10. Menu boot FreeDOS akan muncul.
  11. Pilih opsi "safe mode", karena Anda tidak memerlukan driver.
  12. Dalam DOS prompt, tulis nama firmware berkedip dieksekusi, misalnya: FLASH.EXE. Tekan enter.
  13. Tunggu proses flashing selesai.
  14. Flasher firmware mungkin mem-boot mesin itu sendiri, atau Anda mungkin mendapatkan prompt kembali. Jika Anda mendapatkan konfirmasi kembali, tekan Control-Alt-Delete untuk mem-boot ulang.
  15. Karena Anda tidak mengubah konfigurasi GRUB secara permanen, itu akan mem-boot kembali ke OS default Anda.

Jika tidak ada cukup ruang pada gambar, gunakan gambar terkecil dari chtaube.eu . Hapus kompresi gambar dan filterlah xxd. Sekarang cari 55aa . Itu harus di 0x1fe. Anda dapat memasang gambar dengan offset=$((0x200))sebagai tanda pemasangan tambahan. Berhati-hatilah karena $(())sintaksnya khusus untuk Bash, tetapi juga akan berfungsi di Zsh.

Atau, lihat https://www.fladi.at/posts/large-freedos-boot-image/

Janus Troelsen
sumber
Anda harus memperbarui jawaban yang sudah ada alih-alih menggandakannya.
maxschlepzig
Saya menyarankan untuk meletakkan baris-baris tersebut di grub.cfg untuk membuatnya menjadi entri menu. Lebih mudah untuk menyalin & menempelkannya, atau setidaknya mengetik ulang menggunakan editor teks asli.
derobert
@derobert: Bagaimana cara menemukan perangkat dan ID partisi Grub2 andal? Anda harus tahu bahwa jika memanggangnya ke dalam konfigurasi. Itu sebabnya penyelesaian tab bagus.
Janus Troelsen
1
@derobert: Anda yakin berbicara tentang Grub2? Format itu terlihat seperti Grub0. * Bagi saya. Kapan msdosditambahkan? Saya akan mencoba menjawab pertanyaan Anda jika Anda mempostingnya. Biarkan aku tahu.
Janus Troelsen
1
@ysangkok itu adalah grub1 dan grub2, msdos hanya tipe partisi ... Saya tidak punya pertanyaan untuk ditanyakan, saya pikir Anda sudah melakukannya ("Bagaimana cara menemukan perangkat Grub2 dan ID partisi andal?").
derobert
7

Setiap perangkat dengan firmware yang dapat diupgrade mungkin akan memiliki metode sendiri untuk melakukan itu. Motherboard khususnya terkenal tidak kompatibel dalam hal ini.

Mengenai hard drive, sekali lagi, ini adalah masalah hak milik. Seagate menyediakan liveCD dan unduhan Windows untuk melakukan pembaruan firmware, tetapi tidak untuk Linux atau alat Unix.

Anda dapat membuat gambar yang dapat di-boot untuk pembaruan Thinkpad BIOS yang dapat di-boot dari GRUB.

Kalau tidak, Anda hanya perlu memeriksa alat untuk pabrikan.

Di sisi lain, jika Anda bekerja dengan mikrokontroler, Anda dapat sering memprogramnya dengan alat yang cukup universal, meskipun masih terbatas (misalnya, chip Atmel biasanya dapat diprogram dengan avrdude).

greyfade
sumber
6

untuk video Seagate 3TB (ST3000VX000-9YW1):

sg_write_buffer -v -m 5 -I <FW file> <dev>
pengguna30578
sumber
3

Saya telah berhasil mem-flash drive Seagate Barracuda 7200.12 ST31000528AS (1TB SATA) dengan metode berikut: ( Gunakan dengan risiko Anda sendiri! )

  1. Unduh ISO dari Seagate: http://www.seagate.com/staticfiles/support/downloads/firmware/Barracuda12-ALL-CC49.iso
  2. pasang / ekstrak PH-CC49.imadari file .iso
  3. dd .ima ke USB thumb-drive: dd if=./PH-CC49.ima of=/dev/sdX bs=512k
  4. Matikan komputer dan lepaskan semua drive kecuali drive yang akan di-flash
  5. Boot dari USB-thumb drive (ini akan boot ke utilitas pembaruan Seagate Firmware
  6. Ikuti instruksi sederhana di layar untuk mem-flash drive
  7. Matikan, sambungkan kembali semuanya, dan hidupkan

Itu dia! Tidak ada Windows, Tidak ada CD besar, tidak ada editan Grub, tidak ada FreeDos, tidak ada Windows yang rapuh .exe (mencobanya tetapi gagal dengan pesan kesalahan yang tidak jelas)

Kredit diberikan ke sumber: http://ubuntuaddicted.blogspot.ca/2014/10/seagate-firmware-flash-using-usb.html (temukan dengan mencari di PH-CC49.ima)

Alecz
sumber
Hanya ingin menghubungkan jawaban Anda dengan jawaban lain yang Anda (tampak seperti orang yang sama?) Berikan di tempat lain: linuxquestions.org/questions/linux-hardware-18/…
Peter Teoh
Ya, itu saya salin-tempel jawaban saya di kedua situs. Sekali lagi, kredit jatuh ke sumbernya.
Alecz
2

Untuk ST2000NM0024-1HT174 seagate saya telah melakukannya: mengunduh firmware dari seagate dan menyimpannya dalam kunci usb. reboot pc saya dengan live usb (atau dvd) dari linux mint mate 17.3. dan unzip semua utilitas seagate langsung di Desktop. menyalin firmware perintah pada Desktop, kemudian mengganti nama perintah seaflashlin_33_054 menjadi lebih sederhana seaflashlin Setelah Membuka terminal dan menulis:

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

mint mint # cd Desktop

mint Desktop # ./seaflashlin

bash: ./seaflashlin: Permission denied 

(Kesalahan! Saya mengubah file izin)

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

(ini mengkonfirmasi bahwa firmware saya adalah versi SN02 dan HD ditemukan di / dev / sg0)

Sekarang saya dapat mem-flash BIOS dengan: (xxx.LOD = firmware hard disk)

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

yang mengkonfirmasi bahwa bios diubah dari SN02 ke SN05

Sangat Berbahaya, gunakan ini dengan risiko Anda sendiri!

Semoga berhasil !

erikkssen
sumber
1

Anda dapat menggunakan flashrom untuk memperbarui BIOS motherboard.

Contoh (Abit KN9 Ultra):

Papan tersebut adalah papan AMD Athlon 64, AM2 Socket, chipset Nvidia, dirilis sejak tahun 2006. Papan ini memiliki chip flash 256 KB yang dapat diganti. BIOS diberi label 'Penghargaan', yang tampaknya merupakan merek dagang Phoenix.

Flashrom mendukung chipset itu dan chip flash itu.

Dukungan dapat diuji dengan perintah seperti:

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

Masuk akal untuk membuat cadangan konten flash chip saat ini, pertama:

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

Itu kemudian dapat dibandingkan dengan file gambar vanila dari vendor (menggunakan misalnya xxddan vimdiff).

Beberapa perbedaan diharapkan - karena beberapa BIOS juga menyimpan informasi tambahan (mis. DMI) dan konfigurasi (mis. Alamat MAC) dalam flash. Ini juga halnya dengan Abit KN9 Ultra. Data DMI disimpan dalam 1872 byte pertama - dan mudah dibuat kembali oleh BIOS selama booting. Alamat MAC disimpan pada offset 0x74E30.

File firmware vendor dikemas dalam arsip zip yang berisi awdflash.exedan BINfile, misalnya M520A_23.BIN. Dalam contoh ini, file bin berisi gambar BIOS apa adanya, yaitu dapat langsung ditulis melakukan chip flash dengan perintah seperti:

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

Bergantung pada pembaruan, mungkin diperlukan untuk menghapus CMOS untuk reboot berikutnya - jika tidak, BIOS mungkin tidak memulai. Di papan itu CMOS dapat dihapus melalui pengaturan jumper. Kliring melalui perangkat lunak juga dimungkinkan (mis. Via CmosPwd ).

Untuk menjaga alamat MAC default unik, gambar vendor baru dapat ditambal sebelum menginstal, misalnya:

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

Perangkap:

  • Penulisan flash mungkin gagal karena papan khusus motherboard mengaktifkan (yaitu untuk menonaktifkan penulisan proteksi) kode yang belum diimplementasikan oleh flashrom, belum.
maxschlepzig
sumber
0

Pengalaman kecil saya adalah saya menggunakan Flashrom untuk memperbarui Intel Motherboard BIOS saya dan itu berfungsi dengan baik. Secara umum sepertinya alat yang sangat bagus.

KellyClowers
sumber
Bisakah Anda memposting contoh perintah baris yang Anda gunakan untuk itu?
maxschlepzig
0

Menggunakan floppy upgrade DOS yang di-boot dengan GRUB seperti yang disebutkan sebelumnya berfungsi untuk sebagian besar perangkat keras. Dalam beberapa kasus, Anda dapat menemukan alat asli. Dell bahkan menyiapkan repositori yang terintegrasi dengan sistem pengemasan distro:

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

Sayangnya, sebagian besar pembaruan membutuhkan reboot mesin untuk menyelesaikannya.

zdzichu
sumber
0

Mencoba:

hdparm --fwdownload (DAN SANGAT HATI-HATI!)

Namun berhati-hatilah!

Stoatwblr
sumber