BIOS 升级

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page BIOS Update and the translation is 68% complete.
Outdated translations are marked like this.

This article describes how to apply a BIOS update on a Gentoo system.

硬件生产商经常会提供BIOS 和其他固件的更新。要安装(经常被称成为“刷新)这些更新并不很简单,有时需要一些额外的工作。

警告
如果硬件正常工作,通常不需要升级 BIOS。如果升级出现问题,可能会对 BIOS 活着系统固件造成永久性损害,并且你可能失去保修资格。操作时千万小心!
附注
The most prominent and widely used system has historically been the x86-based IBM PC compatible computer and its BIOS, which is why system firmware is sometimes called a BIOS even when it is not an IBM PC compatible BIOS, such as the AlphaBIOS of the DEC Alpha architecture or the OpenBIOS, an implementation of Open Firmware (IEEE-1275). EFI/UEFI, the successor of the PC BIOS, is also often called "(U)EFI-BIOS". Hence, the term "BIOS update" often refers to a system firmware update that is not really a PC BIOS.

This article focuses on the PC BIOS and early versions of its successor EFI/UEFI. On x86 (U)EFI System Class 1 and Class 2 have a BIOS compatible mode called "Legacy BIOS" or "CSM" (short for Compatiblity Support Module), which makes the UEFI behave like a PC BIOS. UEFI System Class 3, the standard since around 2020, no longer has a CSM.

On other firmwares the process of updating the system firmware may have similarities, but can also be completely different.

获取固件信息

首先你需要确认主板生产商和型号。请检查系统附带的用户手册,通常用户手册涵盖所有需要的信息。

你也可以用 sys-apps/dmidecode 来获取一些信息。dmidecode 通过查看主板上的 DMI table 来提供关于固件和硬件模块的丰富细节。

root #dmidecode -t bios -t baseboard

最后,如果可以直接查看主板,需要的信息或许会直接在主板上找到。

警告
直接查看电脑主板可能会导致失去保修!

在硬件厂商的网站搜索固件更新,下载硬件更新必要的包。硬件生产商通常会将硬件升级文件打包为zip,exe 或者 iso 格式。

user $unzip 7235v1A.zip
Archive:  7235v1A.zip
   creating: 7235v1A/
inflating: 7235v1A/7235v1x.txt
inflating: 7235v1A/AWFL865.EXE
inflating: 7235v1A/How to flash the BIOS.DOC
inflating: 7235v1A/W7235IMS.1A0

BIOS 选项

很多 BIOS 有一个选项可以从外部记忆棒或者软盘读取二进制映像。进入 BIOS 设置并查找此选项。如果 BIOS 不支持此选项,请继续下一节。

引导光盘

通常硬件厂商会提供一个光盘镜像的下载,作为引导媒介。该文件应该以 .iso 为后缀,可以烧录到一张空的 CD-R(W)中。支持烧录的工具之一是 cdrecord:

root #cdrecord BOOT-CD.iso
附注
两个包都提供cdrecord 命令。你只需要安装其中的一个: app-cdr/cdrtoolsapp-cdr/cdrkit

在 BIOS 启动菜单中选择从光盘启动,按照你的硬件厂商网站上的说明进行更新。

FreeDOS 环境

附注
There is a convenient FreeDOS boot on the SystemRescue that works well for this and will save much effort, allowing readers to skip this section. See the note at the end of the Using SystemRescue to boot FreeDOS section for details.

FreeDOS 可以用来运行基于 DOS 的 BIOS 更新工具。首先必须首创建一个“定制”的 FreeDOS 镜像,包含必要的 BIOS 工具。然后通过下面的方法用这个镜像启动。

下载 FreeDOS 和工具:

  • FreeDOS - 下载fdboot.img 文件。
  • FreeDOS bootsector - 下载 sys-freedos-linux.zip 文件。
  • DOS-Flash 程序和你的硬件厂商网站提供的新的BIOS。

定制 FreeDOS 镜像

首先下载安装必要的软件,并在内核中启用 loopback device 选项:

内核 启用 loopback device
Device Drivers  --->
    [*] Block devices  --->
        <M>   Loopback device support

如果模块还没有加载使用modprobe 加载:

root #modprobe loop

安装必要的软件:

root #emerge --ask dev-lang/nasm app-arch/unzip sys-fs/dosfstools

使用dd创建一个大小约 20M 的镜像文件。文件名必须是 freedos.img,用于替换 SystemRescueCD 中的文件:

root #dd if=/dev/null of=freedos.img bs=1024 seek=20480

为镜像创建文件系统:

root #mkfs.fat freedos.img

将 bootsector 写入镜像文件:

root #unzip sys-freedos-linux.zip && ./sys-freedos.pl --disk=freedos.img

现在拷贝 FreeDOS 文件到新镜像。

创建加载点:

root #mkdir -p /mnt/freedos /mnt/freedos_new

挂载原来的镜像:

root #mount -o loop fdboot.img /mnt/freedos

挂载新的镜像:

root #mount -o loop freedos.img /mnt/freedos_new

拷贝 FreeDOS 系统文件到新镜像:

root #cp -ar /mnt/freedos/* /mnt/freedos_new/

现在拷贝 flash 刷新程序和新的 BIOS 到镜像文件:

root #cp -ar FLASH-PROGRAM BIOS-UPDATE /mnt/freedos_new

卸载两个镜像:

root #umount /mnt/freedos_new /mnt/freedos
附注
DOS 下文件名最多只能显示8个字符。如果文件名长度超过此限制,对这些文件进行重命名是个好主意。

使用 SystemRescueCD 启动 FreeDOS

SystemRescueCD 自带一个版本的 FreeDOS,这个版本可以替换掉原有的镜像,创建一个包含刷新我们的固件所必须的程序的、可以启动的记忆棒。

下载 SystemRescueCD 并准备 LiveUSB

创建一个可启动的记忆棒

使用默认的方法创建 SystemRescueCD 启动媒介, 脚本 usb_inst.sh 将会引导安装过程。

警告
这会删除记忆棒上所有的数据。确保使用前的记忆棒任务所有数据已经正确备份!

/mnt 下创建目录:

root #mkdir /mnt/SysRescueCD

挂载 CD 镜像:

root #mount -o loop systemrescuecd-x86-VERSION.iso /mnt/SysRescueCD

运行安装脚本:

root #/mnt/SysRescueCD/usb_inst.sh

卸载 CD 镜像:

root #umount /mnt/SysRescueCD
附注
If you simply wish to update your BIOS, there is no need to tinker with the FreeDOS image on SystemRescue. After creating the bootable SystemRescue stick as described above mount the USB stick to a directory. Copy the BIOS update there. You are done! Boot on the USB stick and choose DOS tools ---> FREEDOS from the SystemRescue startup menu. You will find the DOS truncated name of your BIOS update file in the A: directory. If you don't see it try C:. I don't believe this harms the SystemRescue instance on the USB stick, but if it does it is easy enough to recreate when you are done.

替换 FreeDOS 镜像

是时候替换掉记忆棒中的 SystemRescueCD 原有的 FreeDOS 镜像了。

挂载SystemRescueCD记忆棒 (/dev/sdX1需要修过为记忆棒设备名称):

root #mount /dev/sdX1 /mnt/SysRescueCD

替换 freedos.img 文件:

root #cp freedos.img /mnt/SysRescueCD/bootdisk/

卸载 SytemRescueCD 记忆棒:

root #umount /mnt/SysRescueCD

在 GRUB 中直接启动 FreeDOS 镜像

如果你不想借助其他媒介,直接从 grub (或者其他启动器)中直接启动你的FreeDOS镜像,你可以使用 syslinux 中的memdisk 工具。

root #emerge --ask sys-boot/syslinux

挂载你的/boot分区 (如果需要的话):

root #mount /boot

拷贝memdisk和你新建的 FreeDOS 镜像到 /boot:

root #cp /usr/share/syslinux/memdisk /boot
root #cp freedos.img /boot

编辑 /boot/grub/grub.conf 文件, 给FreeDOS添加一条:

文件 /boot/grub/grub.confgrub.conf 条目实例
title FreeDOS (BIOS update)
kernel /boot/memdisk floppy
initrd /boot/freedos.img

BIOS 升级

重启并选择从 USB 启动或者你新加的 grub 启动项。如果使用SystemRescueCD,在 GRUB 命令行中输入:

freedos

这将启动到我们新的 FreeDOS 镜像,你应该会看到 DOS 提示符:

代码
C:\

现在你可以按照生产商的提示升级 BIOS。一些有用的 DOS 命令:

cd <dir>
改变目录。
dir
列出当前目录中的文件。
type [drive][path]filename
显示一个文件的内容。

Flashrom

一些主板能支持 flashing (直接从系统升级通过2个sys-apps/flashrom 包) 。在这种情况下,只需要下载BIOS镜像文件,继续之前,首先查看列表supported hardware

如果硬件支持,首先我们检查我们新的 BIOS 镜像:

root #flashrom -v W7235IMS.1A0

如果没有问题,让我们进行更新:

root #flashrom -vw W7235IMS.1A0

UEFI Firmware Capsule

附注
Since EFI/UEFI is the successor of the PC BIOS on x86, the same tools as for BIOS updates were often used on early (U)EFI systems.

For modern UEFI, firmware updates can be upgraded using UEFI Capsules (introduced with UEFI 2.0[1]). This method is available on Linux and Windows.[2] Vendors have to provide firmware updates for the use with Linux, which they do via the Linux Vendor Firmware Service (LVFS).[3]

Refer to fwupd for further details.

参考

References