在Linux下如何刷新固件?


15

好吧,我感觉太老了,无法跳过通过通用的特定于供应商的方式升级的固件:下载一些DOS工具,浪费时间创建(Free-)DOS引导介质,并浪费更多时间来制作BIOS从那里实际启动,最后刷新固件升级。

这就是1980年代。

我遇到了Coreboot项目中的一些linux flash工具。它似乎支持各种FLASH芯片。但是它在实践中如何运作?

我想将供应商提供的固件升级转换为正确的格式存在一些陷阱。或确定正确的目标芯片呢?

当前,例如,我可能必须升级:

  • 某些Seagate 1.5 TB磁盘的固件
  • 旧的Abit Athlon 64主板的固件(Award BIOS)
  • Thinkpad的BIOS /嵌入式控制器-BIOS

如何在Linux系统上升级设备固件?

Answers:


11

使用FreeDOS闪烁,一次重启,没有可移动设备

  1. 确保您正在使用GRUB2(检查是否grub-pc在Ubuntu上安装了软件包)
  2. 掌握SYSLINUX的MEMDISK。在Ubuntu上,安装软件包syslinux-common,您的内存磁盘将驻留在/usr/lib/syslinux/memdisk
  3. 下载fdboot.img,将其保存在您的主目录或其他可以使用美式键盘布局轻松键入的目录中
  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.EXEBIOS.IMG是示例)
    5. umount /mnt/floppy
  5. 引导系统并在GRUB2中中断它(按ESC)
  6. 按c进入GRUB2的命令行。
  7. 加载MEMDISK:
    1. 输入linux16 (hd。现在按Tab。将会显示硬盘列表。
    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的,但在Zsh中也可以使用。

或者,请参阅https://www.fladi.at/posts/large-freedos-boot-image/


您应该更新现有答案,而不要重复它。
maxschlepzig 2012年

我建议将这些行放在grub.cfg中,使其成为菜单项。更容易复制和粘贴它们,或者至少使用真实文本编辑器重新输入。
derobert

@derobert:如何可靠地找到Grub2设备和分区ID?您需要知道是否将其烘焙到配置中。这就是选项卡补全很好的原因。
Janus Troelsen,

1
@derobert:您确定要谈论Grub2吗?在我看来,该格式类似于Grub0。*。什么时候msdos前置?如果您发布问题,我会尽力回答您的问题。让我知道。
Janus Troelsen

1
@ysangkok既是grub1又是grub2,msdos只是分区类型...我没问题要问,我以为你做到了(“如何可靠地找到Grub2设备和分区ID?”)。
derobert

7

每个具有可升级固件的设备都可能会有自己的方法来执行此操作。众所周知,主板在这方面是不兼容的。

对于硬盘驱动器,同样,这是一个专有问题。希捷提供 liveCD和Windows下载来执行固件更新,但不提供Linux或Unix工具。

您可以为可从GRUB启动的Thinkpad BIOS更新构建可启动映像

否则,您只需要向制造商咨询工具。

另一方面,如果您使用的是微控制器,则通常可以使用相当通用的工具对它们进行编程,尽管仍然在有限的基础上(例如,通常可以使用来对Atmel芯片进行编程avrdude)。


6

对于希捷3TB视频(ST3000VX000-9YW1):

sg_write_buffer -v -m 5 -I <FW file> <dev>

3

我已使用以下方法成功刷新了Seagate Barracuda 7200.12 ST31000528AS(1TB SATA)驱动器:(使用后果自负!

  1. 从Seagate下载ISO: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拇指驱动器启动(这将启动到Seagate固件更新实用程序中)
  6. 按照简单的屏幕说明来刷新驱动器
  7. 关闭电源,重新连接一切,然后打开电源

而已!没有Windows,没有大容量CD,没有Grub编辑,没有FreeDos,没有片状Windows .exe(尝试过,但由于出现错误消息而失败)

图片来源:http://ubuntuaddicted.blogspot.ca/2014/10/seagate-firmware-flash-using-usb.html(通过搜索PH-CC49.ima找到)


(?看上去像同一人)只是想你的答案链接到另一个答案你在其他地方给: linuxquestions.org/questions/linux-hardware-18/...
彼得赵明福

是的,那是我在两个网站上复制粘贴我的答案。再次,信誉归功于来源。
Alecz

2

对于Seagate ST2000NM0024-1HT174,我已这样做:从Seagate下载固件并将其存储在USB密钥中。使用Linux Mintmate 17.3的实时USB(或DVD)重新启动了我的电脑。并直接在桌面上解压缩所有seagate实用程序。在终端上复制固件命令,然后将命令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)

现在,我可以使用以下命令刷新BIOS:(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

确认BIOS已从SN02更改为SN05

非常危险,使用此风险自负!

祝好运 !


1

您可以使用flashrom更新主板的BIOS。

示例(升技KN9 Ultra):

该板是2006年发布的AMD Athlon 64板,AM2 Socket,Nvidia芯片组。它具有256 KB的可更换闪存芯片。BIOS被标记为“ Award”,这似乎是Phoenix的商标。

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

然后可以将其与供应商提供的原始图像文件进行比较(使用例如xxdvimdiff)。

可能会有一些差异-因为某些BIOS在闪存中还存储了其他信息(例如DMI)和配置(例如MAC地址)。升技KN9 Ultra也是如此。DMI数据存储在前1872个字节中-可以在引导过程中由BIOS轻松重新生成。MAC地址存储在偏移量0x74E30中。

供应商固件文件打包在zip归档文件中,其中包含awdflash.exeBIN文件,例如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,并且运行良好。总的来说,它似乎是一个非常不错的工具。


您可以张贴一个示例命令行吗?
maxschlepzig 2010年

0

如前所述,使用通过GRUB引导的DOS升级软盘可用于大多数硬件。在某些情况下,您可以找到本机工具。戴尔甚至准备与发行包装系统集成的存储库:

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

可悲的是,大多数更新都需要计算机重新启动才能完成。


0

尝试:

hdparm --fwdownload (非常小心!)

但是,要小心!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.