flashrom--Linux的一款更新BIOS工具及使用举例
  WcMlrurH7Ysw 2023年11月02日 42 0

前言

有人让我说说不是品牌机如何自己更新维护BIOS,Windows下比较普遍,而Linux下教程嘛一言难尽,站内确实找不到有效的,反而是张冠李戴将更新主板BIOS说成了更新显卡BIOS。用一篇文章翻译flashrom的帮助,希望读者一篇文章搞懂这个小工具。

安装

算是一款比较通用的小工具了,因此绝大多数发行版或者相关的源都会提供这个软件。本文以CentOS Linux 7为例,演示安装、操作过程。相对于部分系统,CentOS系统在操作上更为严谨,软件大多需要提供完整的参数,不会自动补全一些内容,让用户感到困扰。

yum install epel-release -

首先安装epel源,CentOS的Base库、os库、Extra库小的可怜显然没有这玩意儿。当然epel源其实也不是非常大啦。然后进行更新操作。

yum update -y

在更新结束之后就开始安装。

yum install flashrom -

然后就安装结束了。可以查看下当前的版本,以及帮助文件。

flashrom -h

flashrom使用

这是一款小工具,通过帮助文件就能够了解到如何使用了。

flashrom v1.0.1 on Linux 3.10.0-1160.92.1.el7.x86_64 (x86_64)
flashrom is free software, get the source code at https://flashrom.org

Please note that the command line interface for flashrom has changed between
0.9.5 and 0.9.6 and will change again before flashrom 1.0.

Usage: flashrom [-h|-R|-L|-p <programmername>[:<parameters>] [-c <chipname>]
[-E|(-r|-w|-v) <file>] [(-l <layoutfile>|--ifd) [-i <imagename>]...] [-n] [-N] [-f]]
[-V[V[V]]] [-o <logfile>]

 -h | --help                        print this help text
 -R | --version                     print version (release)
 -r | --read <file>                 read flash and save to <file>
 -w | --write <file>                write <file> to flash
 -v | --verify <file>               verify flash against <file>
 -E | --erase                       erase flash memory
 -V | --verbose                     more verbose output
 -c | --chip <chipname>             probe only for specified flash chip
 -f | --force                       force specific operations (see man page)
 -n | --noverify                    don't auto-verify
 -N | --noverify-all                verify included regions only (cf. -i)
 -l | --layout <layoutfile>         read ROM layout from <layoutfile>
      --ifd                         read layout from an Intel Firmware Descriptor
 -i | --image <name>                only flash image <name> from flash layout
 -o | --output <logfile>            log output to <logfile>
 -L | --list-supported              print supported devices
 -p | --programmer <name>[:<param>] specify the programmer device. One of
    internal, dummy, nic3com, nicrealtek, gfxnvidia, drkaiser, satasii, atavia,
    it8212, ft2232_spi, serprog, buspirate_spi, dediprog, rayer_spi, pony_spi,
    nicintel, nicintel_spi, nicintel_eeprom, ogp_spi, satamv, linux_spi,
    usbblaster_spi, pickit2_spi, ch341a_spi.

You can specify one of -h, -R, -L, -E, -r, -w, -v or no operation.
If no operation is specified, flashrom will only probe for flash chips.

这是CentOS的epel源提供的版本包含的帮助信息。下面来写几个使用方式。很多教程会没有写-p参数,选择操作对象,如果缺乏这个参数,就会出现以下提示:

#flashrom -r test.rom

flashrom v1.0.1 on Linux 3.10.0-1160.92.1.el7.x86_64 (x86_64)
flashrom is free software, get the source code at https://flashrom.org

Please select a programmer with the --programmer parameter.
Previously this was not necessary because there was a default set.
To choose the mainboard of this computer use 'internal'. Valid choices are:
internal, dummy, nic3com, nicrealtek, gfxnvidia, drkaiser, satasii, atavia,
it8212, ft2232_spi, serprog, buspirate_spi, dediprog, rayer_spi, pony_spi,
nicintel, nicintel_spi, nicintel_eeprom, ogp_spi, satamv, linux_spi,
usbblaster_spi, pickit2_spi, ch341a_spi.

有效的就是Please select a programmer with the --programmer parameter.这句话,--programmer与-p作用相同。下方也给出了一些指定对应的目标的例子,internal, dummy, nic3com, nicrealtek, gfxnvidia之类的,先以操作主板为例。请不要随便在真实计算机进行下方操作,除非你已经阅读完本文,对操作已经有足够的了解。

flashrom -r demo.rom -p internal
# 从主板目前使用的BIOS读取到文件
flashrom -w demo.rom -p internal
# 通过文件更新BIOS到主板本身的BIOS。危险操作!!!
flashrom -v demo.rom -p internal
# 对比文件与主板当前运行的BIOS的差异
flash -E -p internal
# 清空BIOS。危险操作!!!

读取就是保存备份当前运行中的BIOS文件。flashrom的操作结果类似与编程器,因此获取到的文件本质就是“编程器固件”。当你刷砖了主板,你可以通过编程器配合夹子,直接“救砖”。绝大多数主板的BIOS都可以通过编程器在线烧录,也有部分主板可以拆卸。BIOS有8脚和16脚的区别,要选择对应的夹子。如果是8脚可拆卸的,可以直接安装在编程器上,而如果是16脚的,就需要额外购买一个烧录座了。做工上乘的烧录座,电商价格不足10元包邮吧大概。因为相当于“自动操作”,因此先进行擦除这个命令在普通的过程中不是很有必要,报错不是因为没有先擦除,以报错提示信息为准。

正因为如此,此方式操作会保存主板BIOS上存储的一切信息,因此可能你仅仅是重启过,两次读取出来的信息就有细微的差距,导致两个文件的校验和不同。同时,如果将一块主板提取的文件用在另外一台相同型号的主板,会导致另外一块主板的网卡MAC地址也变成提取的主板上的MAC地址了。

写入过程,我们可以看到其实相当于Windows下一些编程器软件的“自动操作了”。只需要-w,就可以直接刷新,而无需清空。除非你刷入了一个错误的BIOS,否则下一次启动,就是按照你写入的文件继续运行了。正因为是“编程器”固件,因此主板厂商提供的文件往往“大小不匹配”。flashrom更新BIOS相当于dd镜像,将文件复制到SPI存储芯片,而厂商提供的工具只会更新需要的部分。

同时也因为这个操作,BIOS内容会被完整的保存下来,因此这个操作适合于当要尝试更新BIOS的过程前,先将BIOS内容备份下来放在自己的电脑或者其他后续方便访问到的位置,然后再进行“作死”尝试,万一出现问题,可以通过编程器直接写入恢复。

作为一个“作死”行为前“打一个快照”,便于随时通过外部的编程器恢复主板的BIOS。

前面提到了擦除,那么什么情况下有用呢?好像确实木有。当BIOS文件大小和存储芯片不同的时候,可以通过-f参数强制写入。

flashrom -w demo.rom -p internal -f

对主板BIOS的操作是通过南桥或者PCH芯片访问的,性能强劲,基本上能够发挥25存储芯片的潜能,8MB大小的BIOS进行操作也不到5秒,写入有擦除与编程两个步骤也不过10秒,相对于“土豪金编程器”这种速度,天壤之别了。

从-p internal指定位置,我们也可以看出,其实可以向很多设备操作。例如帮助信息最后一个ch341a_spi,这不就是“土豪金编程器”么?

确实可以将编程器连接到Linux的电脑,然后对存储芯片进行操作了。

flashrom -w demo.rom -p ch341a_spi

同样的道理,也可以用于对显卡的操作,与主板BIOS不同,对显卡的“救砖”会方便许多。某些用途的成品系统提供对显卡BIOS的批量管理,本质也是调用了flashrom,目前没有见过“自己实现”的,哪怕仅仅是“借鉴”flashrom代码实现自己的操作接口程序。如果为显卡写入了错误的信息,在下一次启动中,显卡就无法工作了。在这个情况下操作系统还是能继续对显卡的BIOS进行写入的,因此只要Linux系统能够进行SSH或者telnet类似的远程操作控制,网络没有问题,哪怕只有唯一1张显卡,“砖”了之后,还是能够不需要外部硬件自我恢复的。

当前flashrom能够支持什么芯片?可以用-L获取到。内容相当长,可以重定向或者保存到特性的文本文档,或者通过more类似的阅读。

flashrom -L | more

对于主板,internal肯定没错,显卡如果只接了一张,或者之连接了一个编程器,通过flashrom只需要指定操作设备,就可以正常继续了。如果连接了两个,例如电脑上有两张N卡,如何区分呢?

请看接下来第二篇文章,分享一段我编写的PHP。这是我为实现自己的多显卡系统批量某种管理平台所写的底层基础。通过第二篇文章,将深入的体验到flashrom的一些更高级、更巧妙、更有趣的用法。

文章最后再补充一点。如何正确的输出更详细的操作流程?

flashrom -r test.rom -p internal -V 

这个输出结果非常大,做好准备。至于你想要怎么准备,还是不管他,随你咯。重定向到一个文本文件也是可以的。至于网上某些教程提供的例子,不要试了,至少我没发现哪个系统可以用这个方式运行

flashrom -rv test.rom -p internal
flashrom -r test.rom -p internal -v

这些方式都是错的。V是大写,位置也不能这么放。前者会提示Error: Extra parameter found.后者会提示flashrom: option requires an argument -- 'v'。如果参考网上的flashrom -rv test.rom -p internal,或者flashrom -r test.rom用法出现了错误的,可以阅读下本文章,尝试一下目前正确的用法。

此类基础的小工具,使用方法的时效性应该还是相当长的。部分系统可以忽略-p internal,直接开始对主板BIOS的操作,但是只是非常少的一部分,比如为Server LTS版本也为用户创建games文件夹的某发行版。难道这是鼓励系统管理员在生产或者测试场景的服务器运行游戏?

话都说到这了,那么,Linux下游戏也有的,甚至是cli控制台,文字风格的2048,俄罗斯方块。一个很没用的命令,枯燥的等待过程中玩一下。对RH系来说,同样来自epel。

yum install sl

输入sl回车,很无聊,自己试试吧。就像无聊骰子,无聊的等待可以来一发,不过不要浪费了太多的精神,或者误了时辰。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  wwLZeziuqjLR   2023年12月06日   26   0   0 sarcentos
  wwLZeziuqjLR   2023年12月11日   31   0   0 Dockercentos
  LE2wsiBPlOhg   2023年12月06日   32   0   0 Dockercentos
  wwLZeziuqjLR   2023年12月08日   100   0   0 Dockercentosbash
  wwLZeziuqjLR   2023年12月07日   34   0   0 Dockercentos
  wwLZeziuqjLR   2023年12月06日   26   0   0 abTime数据centos
WcMlrurH7Ysw