BIOS 升级

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page BIOS Update and the translation is 100% complete.

Other languages:
English • ‎español • ‎français • ‎italiano • ‎日本語 • ‎한국어 • ‎polski • ‎русский • ‎中文(中国大陆)‎

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

警告
如果硬件正常工作,通常不需要升级 BIOS。如果升级出现问题,可能会对 BIOS 活着系统固件造成永久性损害,并且你可能失去保修资格。操作时千万小心!

获取固件信息

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

你也可以用 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 环境

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

下载 FreeDOS 和工具:

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

定制 FreeDOS 镜像

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

KERNEL 启用 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

替换 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添加一条:

FILE /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 提示符:

CODE
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

参考