วิธีการแฟลชเฟิร์มแวร์ภายใต้ Linux ในทางปฏิบัติ?


15

ฉันรู้สึกว่าแก่เกินไปสำหรับการกระโดดผ่านห่วงการเบิร์นหลายครั้งเพื่ออัปเกรดเฟิร์มแวร์หลายวิธีผ่านวิธีการเฉพาะของผู้จำหน่ายตามปกติ: ดาวน์โหลดเครื่องมือ DOS บางอย่างเสียเวลาในการสร้างสื่อบูต DOS (ฟรี) และเสียเวลามากขึ้น จริงๆแล้วบูตจากนั้นและแฟลชอัพเกรดเฟิร์มแวร์ในที่สุด

นี่คือ 1980-ies

ผมเจอบางเครื่องมือลินุกซ์แฟลชจากโครงการ Coreboot ดูเหมือนว่าจะรองรับชิปแฟลชต่างๆ แต่มันทำงานอย่างไรในทางปฏิบัติ?

ฉันเดาว่ามีข้อผิดพลาดบางอย่างที่ทำให้ผู้จำหน่ายอัพเกรดเฟิร์มแวร์เป็นรูปแบบที่ผิดพลาด หรือสิ่งที่เกี่ยวกับการระบุชิปปลายทางที่ถูกต้อง?

ปัจจุบันฉันอาจต้องอัปเกรดตัวอย่างเช่น:

  • เฟิร์มแวร์ของดิสก์ Seagate 1.5 TB บางตัว
  • เฟิร์มแวร์ของบอร์ด Abit Athlon 64 เก่า (Award bios)
  • Bios / Embedded-Controller-Bios ของ Thinkpad

คุณจะอัพเกรดเฟิร์มแวร์อุปกรณ์ของคุณเป็นระบบ Linux ได้อย่างไร?

คำตอบ:


11

กระพริบด้วย FreeDOS รีบูตหนึ่งครั้งและไม่มีอุปกรณ์ถอดได้

  1. ให้แน่ใจว่าคุณกำลังใช้ GRUB2 (ตรวจสอบว่าคุณมีแพ็คเกจที่grub-pcติดตั้งบน Ubuntu)
  2. รับ MEMDISK ของ SYSLINUX บน Ubuntu ให้ติดตั้งแพคเกจsyslinux-commonและ memdisk ของคุณจะอยู่ในนั้น/usr/lib/syslinux/memdisk
  3. ดาวน์โหลดfdboot.imgบันทึกไว้ในโฮมไดเร็กตอรี่ของคุณหรือไดเร็กตอรี่อื่น ๆ ที่คุณสามารถพิมพ์ด้วยเลย์เอาท์คีย์บอร์ดของ US ได้อย่างง่ายดาย
  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และกด Enter
  10. เมนูบู๊ตของ FreeDOS จะปรากฏขึ้น
  11. เลือกตัวเลือก "เซฟโหมด" เนื่องจากคุณไม่ต้องการไดรเวอร์
  12. ในพรอมต์ของ DOS ให้เขียนชื่อของเฟิร์มแวร์ที่สามารถทำการกะพริบได้ตัวอย่างเช่น: FLASH.EXE. กดปุ่มตกลง.
  13. รอให้ไฟกระพริบเสร็จสิ้น
  14. กะพริบของเฟิร์มแวร์อาจบู๊ตเครื่องเองหรือคุณอาจได้รับพรอมต์กลับมา หากคุณได้รับพรอมต์ให้กด Control-Alt-Delete เพื่อรีบูต
  15. เนื่องจากคุณไม่ได้เปลี่ยนการกำหนดค่า GRUB อย่างถาวรมันจะบูตกลับสู่ระบบปฏิบัติการเริ่มต้นของคุณทันที

หากมีพื้นที่ไม่เพียงพอที่ภาพใช้ภาพที่มีขนาดเล็กที่สุดจากchtaube.eu xxdยกเลิกการบีบอัดภาพและตัวกรองมันว่า ตอนนี้ค้นหา55aa 0x1feมันควรจะเป็น คุณสามารถเมานท์รูปภาพด้วยoffset=$((0x200))การเมานท์ธงเพิ่มเติม ระวังว่า$(())ไวยากรณ์เป็น Bash-specific แต่จะทำงานใน Zsh ด้วย

หรือดูhttps://www.fladi.at/posts/large-freedos-boot-image/


คุณควรอัปเดตคำตอบที่มีอยู่แทนที่จะทำซ้ำ
maxschlepzig

ฉันอยากจะแนะนำให้วางสายเหล่านี้ใน grub.cfg เพื่อให้เป็นรายการเมนู ง่ายกว่าในการคัดลอกและวางหรืออย่างน้อยพิมพ์อีกครั้งโดยใช้โปรแกรมแก้ไขข้อความจริง
Derobert

@derobert: ฉันจะค้นหาอุปกรณ์ Grub2 และ ID พาร์ติชันได้อย่างน่าเชื่อถือได้อย่างไร คุณจำเป็นต้องรู้ว่าถ้าอบเข้าไปในการตั้งค่า นั่นเป็นสาเหตุที่ทำให้แท็บเสร็จสมบูรณ์เป็นสิ่งที่ดี
Janus Troelsen

1
@derobert: คุณแน่ใจหรือไม่ว่าคุณกำลังพูดถึง Grub2 รูปแบบนั้นดูเหมือน Grub0. * สำหรับฉัน เมื่อใดที่จะถูกmsdosนำหน้า ฉันจะพยายามตอบคำถามของคุณหากคุณโพสต์ แจ้งให้เราทราบ
Janus Troelsen

1
@ysangkok ทั้ง grub1 และ grub2, msdos เป็นเพียงประเภทพาร์ทิชัน ... ฉันไม่มีคำถามที่จะถามฉันคิดว่าคุณทำแล้ว ("ฉันจะหาอุปกรณ์ Grub2 และ ID พาร์ทิชันได้อย่างน่าเชื่อถือได้อย่างไร")
Derobert

7

อุปกรณ์ทุกตัวที่มีเฟิร์มแวร์ที่สามารถอัปเกรดได้อาจมีวิธีการของตัวเองสำหรับการทำเช่นนั้น โดยเฉพาะอย่างยิ่งเมนบอร์ดที่เข้ากันไม่ได้กับชื่อเสียงในเรื่องนี้

สำหรับฮาร์ดไดรฟ์นี่เป็นเรื่องกรรมสิทธิ์ Seagate มีการดาวน์โหลด liveCD และ Windows เพื่อทำการอัปเดตเฟิร์มแวร์ แต่ไม่ใช่เครื่องมือ Linux หรือ Unix

คุณสามารถสร้างอิมเมจที่สามารถบูตได้สำหรับอัพเดต Thinkpad BIOS ที่สามารถบูตได้จาก GRUB

มิฉะนั้นคุณจะต้องตรวจสอบกับผู้ผลิตเครื่องมือ

ในทางกลับกันถ้าคุณทำงานกับไมโครคอนโทรลเลอร์คุณมักจะสามารถตั้งโปรแกรมด้วยเครื่องมือที่เป็นสากล แต่ก็ยังมีข้อ จำกัด อยู่ (เช่นชิป Atmel สามารถตั้งโปรแกรมด้วยavrdude)



3

ฉันได้ทำการติดตั้งไดรฟ์ Seagate Barracuda 7200.12 ST31000528AS (1TB SATA) เรียบร้อยแล้วด้วยวิธีการต่อไปนี้: ( ใช้ตามความเสี่ยงของคุณเอง! )

  1. ดาวน์โหลด ISO จาก Seagate: http://www.seagate.com/staticfiles/support/downloads/firmware/Barracuda12-ALL-CC49.iso
  2. เมานต์ / แยกPH-CC49.imaจากไฟล์. iso
  3. dd .ima เป็นธัมบ์ไดรฟ์ USB: dd if=./PH-CC49.ima of=/dev/sdX bs=512k
  4. ปิดคอมพิวเตอร์และยกเลิกการเชื่อมต่อไดรฟ์ทั้งหมดยกเว้นไดรฟ์เพื่อทำการแฟลช
  5. บูตจากไดรฟ์ USB-thumb (จะเป็นการบู๊ตในยูทิลิตี้อัพเดตเฟิร์มแวร์ Seagate
  6. ทำตามคำแนะนำง่ายๆบนหน้าจอเพื่อแฟลชไดรฟ์
  7. ปิดเชื่อมต่อทุกอย่างกลับคืนและเปิดเครื่อง

แค่นั้นแหละ! ไม่มี Windows, ไม่มีซีดีขนาดใหญ่, ไม่มีการแก้ไข Grub, ไม่มี FreeDos, ไม่มี. exe ของ Windows ที่ไม่สม่ำเสมอ (ลองใช้งาน แต่ล้มเหลวเนื่องจากมีข้อความแสดงข้อผิดพลาดชัดเจน)

เครดิตไปที่แหล่งที่มา: http://ubuntuaddicted.blogspot.ca/2014/10/seagate-firmware-flash-using-usb.html (พบโดยการค้นหา PH-CC49.ima)


ต้องการเชื่อมโยงคำตอบของคุณกับคำตอบอื่นที่คุณ (ดูเหมือนคนคนเดียวกันใช่ไหม) ให้ที่อื่น: linuxquestions.org/questions/linux-hardware-18/…
Peter Teoh

ใช่นั่นคือฉันคัดลอกวางคำตอบของฉันในทั้งสองเว็บไซต์ อีกครั้งเครดิตไปที่แหล่งที่มา
Alecz

2

สำหรับซีเกทของฉัน ST2000NM0024-1HT174 ฉันได้ทำไปแล้ว: ดาวน์โหลดเฟิร์มแวร์จากซีเกทและเก็บไว้ในคีย์ usb รีบูตเครื่องคอมพิวเตอร์ของฉันด้วย usb สด (หรือ dvd) ของ linux mint mate 17.3 และเปิดเครื่องรูดยูทิลิตี้ซีเกททั้งหมดบนเดสก์ท็อปโดยตรง คัดลอกคำสั่งเฟิร์มแวร์บนเดสก์ท็อปจากนั้นเปลี่ยนชื่อคำสั่ง 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

ยืนยันว่าประวัติถูกเปลี่ยนจาก fron SN02 เป็น SN05

อันตรายมากใช้สิ่งนี้ด้วยความเสี่ยงของคุณเอง!

โชคดี !


1

คุณสามารถใช้flashromเพื่ออัปเดต BIOS ของเมนบอร์ด

ตัวอย่าง (Abit KN9 Ultra):

บอร์ดคือ AMD Athlon 64 board, AM2 Socket, ชิปเซ็ต Nvidia เปิดตัวตั้งแต่ปี 2549 มีชิปแฟลช 256 KB ที่สามารถเปลี่ยนได้ ไบออสนั้นมีเครื่องหมาย 'รางวัล' ซึ่งดูเหมือนจะเป็นเครื่องหมายการค้าของฟีนิกซ์

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 จะถูกเก็บไว้ที่ offset 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

0

ประสบการณ์เล็ก ๆ ของฉันคือฉันใช้ Flashrom เพื่ออัปเดต BIOS เมนบอร์ด Intel ของฉันและทำงานได้ดี โดยทั่วไปดูเหมือนว่าเป็นเครื่องมือที่ดีจริงๆ


คุณสามารถโพสต์บรรทัดคำสั่งตัวอย่างที่คุณใช้สำหรับสิ่งนั้นได้หรือไม่
maxschlepzig

0

การใช้ DOS อัพเกรดฟลอปปี้บูตกับ GRUB ตามที่กล่าวไว้ก่อนหน้านี้ใช้งานได้กับฮาร์ดแวร์ส่วนใหญ่ ในบางกรณีคุณสามารถค้นหาเครื่องมือดั้งเดิม Dell ยังเตรียมพื้นที่เก็บข้อมูลที่รวมเข้ากับระบบบรรจุภัณฑ์ distro:

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

น่าเสียดายที่การอัปเดตส่วนใหญ่ต้องการการรีบูตเครื่องให้เสร็จสมบูรณ์


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.