Làm thế nào để flash firmware trong Linux trong thực tế?


15

Chà, tôi cảm thấy quá già khi nhảy qua vài vòng đốt để nâng cấp một số phần mềm thông qua cách dành riêng cho nhà cung cấp thông thường: Tải xuống một số công cụ DOS, lãng phí thời gian để tạo phương tiện khởi động DOS (Free-) và lãng phí nhiều thời gian hơn để tạo BIOS Thực sự khởi động từ đó và cuối cùng flash nâng cấp firmware.

Đây là những năm 1980.

Tôi bắt gặp một số công cụ flash linux từ dự án Coreboot . Nó dường như hỗ trợ các chip FLASH khác nhau. Nhưng làm thế nào nó hoạt động trong thực tế?

Tôi đoán có một số cạm bẫy chuyển đổi nhà cung cấp nâng cấp firmware thành định dạng đúng. Hoặc những gì về việc xác định đúng chip đích?

Hiện tại có lẽ tôi phải nâng cấp chẳng hạn:

  • phần sụn của một số đĩa Seagate 1.5 TB
  • phần sụn của một bảng Abit Athlon 64 cũ (Giải thưởng bios)
  • Bios / Embedded-Controller-Bios of Thinkpad

Làm thế nào để bạn nâng cấp chương trình cơ sở của bạn tại một hệ thống Linux?

Câu trả lời:


11

Nhấp nháy với FreeDOS, một lần khởi động lại và không có thiết bị di động

  1. Đảm bảo bạn đang sử dụng GRUB2 (kiểm tra xem bạn đã grub-pccài đặt gói trên Ubuntu chưa)
  2. Hãy nắm giữ MEMDISK của SYSLINUX. Trên Ubuntu, cài đặt gói syslinux-commonvà memdisk của bạn sẽ nằm trong/usr/lib/syslinux/memdisk
  3. Tải xuống fdboot.img , lưu nó trong thư mục chính của bạn hoặc một số thư mục khác mà bạn có thể dễ dàng nhập với bố cục bàn phím Hoa Kỳ
  4. Nhúng phần mềm nhấp nháy của bạn vào hình ảnh 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.EXEBIOS.IMGlà ví dụ)
    5. umount /mnt/floppy
  5. Khởi động hệ thống của bạn và ngắt nó trong GRUB2 (nhấn ESC)
  6. Nhấn c để nhập dòng lệnh của GRUB2.
  7. Tải MEMDISK:
    1. Nhập linux16 (hd. Bây giờ nhấn tab. Một danh sách các đĩa cứng sẽ được hiển thị.
    2. Hoàn thành sự lựa chọn đĩa cứng để dòng nói linux16 (hd0,, ví dụ.
    3. Nhấn tab một lần nữa để có danh sách các phân vùng. Bạn cần tìm phân vùng nơi /usr/lib/syslinuxcài đặt Linux của bạn.
    4. Bây giờ bạn có đặc tả ổ cứng và phân vùng, bạn có thể hoàn thành đường dẫn để nó trông như thế này : linux16 (hd0,msdos3)/usr/lib/syslinux/memdisk. Nhấn Enter.
  8. Tải FreeDOS:
    1. Sử dụng cùng một tab hoàn thành để tìm fdboot.img, nhưng với lệnh initrd16thay vì linux16. Bạn sẽ kết thúc với một dòng như thế này : initrd16 (hd0,msdos3)/home/janus/fdboot.img. Nhấn Enter.
  9. Viết bootvà nhấn enter.
  10. Menu khởi động FreeDOS sẽ xuất hiện.
  11. Chọn tùy chọn "chế độ an toàn", vì bạn không cần trình điều khiển.
  12. Trong lời nhắc của DOS, hãy viết tên của chương trình cơ sở nhấp nháy thực thi, ví dụ : FLASH.EXE. Nhấn Enter.
  13. Đợi đèn flash kết thúc.
  14. Flasher firmware có thể tự khởi động máy hoặc bạn có thể lấy lại lời nhắc. Nếu bạn nhận được lời nhắc trở lại, nhấn Control-Alt-Delete để khởi động lại.
  15. Khi bạn không thay đổi cấu hình GRUB vĩnh viễn, nó sẽ khởi động lại vào hệ điều hành mặc định của bạn.

Nếu không có đủ không gian trên hình ảnh, hãy sử dụng hình ảnh nhỏ nhất từ chtaube.eu . Giải nén hình ảnh và lọc nó mặc dù xxd. Bây giờ tìm kiếm 55aa . Nó nên ở 0x1fe. Bạn có thể gắn hình ảnh với offset=$((0x200))một cờ gắn bổ sung. Coi chừng $(())cú pháp là đặc trưng của Bash, nhưng cũng sẽ hoạt động trong Zsh.

Ngoài ra, hãy xem https://www.fladi.at/posts/large-freedos-boot-image/


Bạn nên cập nhật câu trả lời hiện có của mình thay vì sao chép nó.
maxschlepzig

Tôi sẽ đề nghị đưa những dòng đó vào grub.cfg để biến nó thành một mục menu. Dễ dàng hơn để sao chép và dán chúng, hoặc ít nhất là gõ lại bằng trình soạn thảo văn bản thực sự.
derobert

@derobert: Làm thế nào để tôi tìm thấy thiết bị và phân vùng ID đáng tin cậy? Bạn cần biết rằng nếu nướng nó vào cấu hình. Đó là lý do tại sao việc hoàn thành tab là tốt đẹp.
Janus Troelsen

1
@derobert: Bạn có chắc là bạn đang nói về Grub2? Định dạng đó trông giống như Grub0. * Với tôi. Khi nào được chuẩn bị msdostrước? Tôi sẽ cố gắng trả lời câu hỏi của bạn nếu bạn đăng nó. Cho tôi biết.
Janus Troelsen

1
@ysangkok đó là cả grub1 và grub2, msdos chỉ là loại phân vùng ... Tôi không có câu hỏi nào, tôi nghĩ bạn đã làm ("Làm thế nào để tôi tìm thấy thiết bị Grub2 và ID phân vùng đáng tin cậy?").
derobert

7

Mỗi thiết bị có phần mềm nâng cấp có thể sẽ có phương pháp riêng để thực hiện điều đó. Bo mạch chủ nói riêng là không tương thích nổi tiếng về vấn đề này.

Đối với ổ đĩa cứng, một lần nữa, đây là một vấn đề độc quyền. Seagate cung cấp tải xuống liveCD và Windows để thực hiện cập nhật chương trình cơ sở, nhưng không phải công cụ Linux hoặc Unix.

Bạn có thể xây dựng hình ảnh có thể khởi động để cập nhật BIOS Thinkpad có thể được khởi động từ GRUB.

Nếu không, bạn sẽ phải kiểm tra với nhà sản xuất các công cụ.

Mặt khác, nếu bạn đang làm việc với các bộ vi điều khiển, bạn có thể thường xuyên lập trình cho chúng bằng các công cụ khá phổ biến, mặc dù vẫn ở một cơ sở hạn chế (ví dụ, chip Atmel thường có thể được lập trình avrdude).



3

Tôi đã flash thành công ổ đĩa Seagate Barracuda 7200.12 ST31000528AS (1TB SATA) với phương pháp sau: ( Sử dụng có nguy cơ của riêng bạn! )

  1. Tải xuống ISO từ Seagate: http://www.seagate.com/staticfiles/support/doads/firmware/Barracuda12-ALL-CC49.iso
  2. gắn kết / giải nén PH-CC49.imatừ tập tin .iso
  3. dd .ima cho ổ USB: dd if=./PH-CC49.ima of=/dev/sdX bs=512k
  4. Tắt máy tính và ngắt kết nối tất cả các ổ đĩa ngoại trừ ổ đĩa để được flash
  5. Khởi động từ ổ USB-ngón tay cái (điều này sẽ khởi động vào tiện ích cập nhật Firmware Seagate
  6. Thực hiện theo các hướng dẫn đơn giản trên màn hình để flash (các) ổ đĩa
  7. Tắt nguồn, kết nối lại mọi thứ và bật nguồn

Đó là nó! Không có Windows, không có CD cồng kềnh, không chỉnh sửa Grub, không FreeDos, không Windows .exe (đã thử nhưng không thành công với thông báo lỗi tối nghĩa)

Tín dụng đi vào nguồn: http : // ubfoxaddicted.blogspot.ca/2014/10/seagate-firmware-flash-USE-usb.html (tìm thấy nó bằng cách tìm kiếm PH-CC49.ima)


Chỉ muốn liên kết câu trả lời của bạn với câu trả lời khác mà bạn (trông giống như cùng một người?) Đã đưa ra ở nơi khác: linuxquestions.org/questions/linux-hardware-18/ trộm
Peter Teoh

Vâng, đó là tôi sao chép câu trả lời của tôi trên cả hai trang web. Một lần nữa, tín dụng đi đến nguồn.
Alecz

2

Đối với cổng biển ST2000NM0024-1HT174 của tôi, tôi đã làm như vậy: tải xuống chương trình cơ sở từ cảng biển và lưu trữ nó trong một khóa usb. khởi động lại máy tính của tôi với một usb (hoặc dvd) trực tiếp của linux mint mate 17.3. và giải nén tất cả tiện ích seagate trực tiếp trên Desktop. sao chép phần sụn một lệnh trên Desktop, sau đó đổi tên lệnh seaflashlin_33_054 thành đơn giản hơn là seaflashlin Sau khi mở terminal và viết:

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

mint mint # cd Desktop

mint Desktop # ./seaflashlin

bash: ./seaflashlin: Permission denied 

(Lỗi! Tôi thay đổi tệp quyền)

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

(điều này xác nhận rằng phần sụn của tôi là phiên bản SN02 và HD được định vị tại / dev / sg0)

Bây giờ tôi có thể Flash bios với: (xxx.LOD = firmware cứng)

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

xác nhận rằng bios đã được thay đổi từ SN02 thành SN05

Rất nguy hiểm, sử dụng điều này có nguy cơ của riêng bạn!

Chúc may mắn !


1

Bạn có thể sử dụng flashrom để cập nhật BIOS của bo mạch chủ.

Ví dụ (Abit KN9 Ultra):

Bảng mạch là bo mạch AMD Athlon 64, ổ cắm AM2, chipset Nvidia, được phát hành từ năm 2006. Nó có chip flash 256 KB có thể thay thế. BIOS được gắn nhãn 'Giải thưởng', dường như là thương hiệu của Phoenix.

Flashrom hỗ trợ chipset đó và chip flash đó.

Sự hỗ trợ có thể được kiểm tra bằng một lệnh như:

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

Trước tiên, nên sao lưu nội dung hiện tại của chip flash:

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

Sau đó, nó có thể được so sánh với một tệp hình ảnh vanilla từ nhà cung cấp (sử dụng ví dụ xxdvimdiff).

Một số khác biệt được mong đợi - bởi vì một số BIOS 'cũng lưu trữ thông tin bổ sung (ví dụ DMI) và cấu hình (ví dụ: địa chỉ MAC) trong flash. Đây cũng là trường hợp với Abit KN9 Ultra. Dữ liệu DMI được lưu trữ trong 1872 byte đầu tiên - và dễ dàng được tạo lại bởi BIOS trong khi khởi động. Các địa chỉ MAC được lưu trữ ở offset 0x74E30.

Các tập tin firmware nhà cung cấp được đóng gói trong kho lưu trữ zip có chứa awdflash.exemột BINtập tin, ví dụ M520A_23.BIN. Trong ví dụ này, tệp bin chứa hình ảnh BIOS nguyên bản, tức là nó có thể được ghi trực tiếp làm chip flash với một lệnh như:

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

Tùy thuộc vào bản cập nhật, có thể cần phải xóa CMOS cho lần khởi động lại tiếp theo - nếu không thì BIOS có thể không khởi động được. Trên bảng đó, có thể xóa CMOS thông qua cài đặt jumper. Xóa thông qua phần mềm cũng có thể (ví dụ qua CmosPwd ).

Để giữ địa chỉ MAC mặc định duy nhất, hình ảnh nhà cung cấp mới có thể được vá trước khi flash, ví dụ:

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

Cạm bẫy:

  • Việc ghi flash có thể thất bại do mã kích hoạt bo mạch cụ thể của bo mạch chủ (nghĩa là để vô hiệu hóa mã bảo vệ ghi) chưa được flashrom thực hiện.

0

Kinh nghiệm nhỏ của tôi là tôi đã sử dụng Flashrom để cập nhật BIOS bo mạch chủ Intel của mình và nó hoạt động tốt. Nói chung nó có vẻ như là một công cụ thực sự tốt đẹp.


Bạn có thể gửi một dòng lệnh ví dụ bạn đã sử dụng cho điều đó?
maxschlepzig

0

Sử dụng DOS nâng cấp đĩa mềm khởi động với GRUB như đã đề cập trước khi hoạt động cho phần lớn phần cứng. Trong một số trường hợp, bạn có thể tìm thấy các công cụ bản địa. Dell thậm chí còn chuẩn bị các kho lưu trữ tích hợp với hệ thống đóng gói distro:

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

Đáng buồn thay, hầu hết các bản cập nhật yêu cầu khởi động lại máy để hoàn thành.


0

Thử:

hdparm --fwdownload (VÀ RẤT CẨN THẬN!)

Tuy nhiên, hãy cẩn thận!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.