Linux下如何刷固件?

max*_*zig 16 linux hardware firmware bios flashrom

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

这就是 1980 年代。

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

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

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

  • 一些希捷 1.5 TB 磁盘的固件
  • 旧 Abit Athlon 64 板的固件(Award bios)
  • Thinkpad 的 Bios/Embedded-Controller-Bios

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

Jan*_*sen 11

用 FreeDOS 刷机,一次重启,没有可移动设备

  1. 确保您使用的是 GRUB2(检查您是否grub-pc在 Ubuntu 上安装了该软件包)
  2. 获取 SYSLINUX 的 MEMDISK。在 Ubuntu 上,安装该软件包syslinux-common,您的 memdisk 将驻留在/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. 加载内存盘:
    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并按回车键。
  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/

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

gre*_*ade 7

每个具有可升级固件的设备可能都有自己的方法来做到这一点。特别是主板在这方面是出了名的不兼容。

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

您可以为可从 GRUB 引导的 Thinkpad BIOS 更新构建可引导映像

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

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


小智 6

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

sg_write_buffer -v -m 5 -I <FW file> <dev>
Run Code Online (Sandbox Code Playgroud)