使用 spi-intel 升级 BIOS¶
许多英特尔 CPU,例如 Baytrail 和 Braswell,都包含 SPI 串行闪存主控制器,用于存储 BIOS 和其他平台特定数据。由于 SPI 串行闪存的内容对于机器的正常运行至关重要,因此它通常受到不同的硬件保护机制的保护,以避免意外(或故意)覆盖内容。
并非所有制造商都保护 SPI 串行闪存,主要是因为它允许直接从操作系统升级 BIOS 映像。
如果某些保护位未设置且未锁定,spi-intel 驱动程序就可以读写 SPI 串行闪存。如果发现其中任何一个已设置,整个 MTD 设备将变为只读,以防止部分覆盖。默认情况下,驱动程序将 SPI 串行闪存的内容暴露为只读,但可以通过内核命令行传递“spi_intel.writeable=1”来更改。
请记住,覆盖 SPI 串行闪存上的 BIOS 映像可能会导致机器无法启动,并需要 Dediprog 等专用设备才能恢复。特此警告!
以下是直接从 Linux 升级 MinnowBoard MAX BIOS 的步骤。
下载并解压最新的 Minnowboard MAX BIOS SPI 映像 [1]。截至撰写本文时,最新映像是 v92。
安装 mtd-utils 软件包 [2]。我们需要它来擦除 SPI 串行闪存。像 Debian 和 Fedora 这样的发行版预装了名为“mtd-utils”的软件包。
将“spi_intel.writeable=1”添加到内核命令行并重启主板(你也可以通过将“writeable=1”作为模块参数传递给 modprobe 来重新加载驱动程序)。
主板再次启动并运行后,找到正确的 MTD 分区(它被命名为“BIOS”)
# cat /proc/mtd dev: size erasesize name mtd0: 00800000 00001000 "BIOS"因此这里是 /dev/mtd0,但它可能有所不同。
首先备份现有映像
# dd if=/dev/mtd0ro of=bios.bak 16384+0 records in 16384+0 records out 8388608 bytes (8.4 MB) copied, 10.0269 s, 837 kB/s验证备份
# sha1sum /dev/mtd0ro bios.bak fdbb011920572ca6c991377c4b418a0502668b73 /dev/mtd0ro fdbb011920572ca6c991377c4b418a0502668b73 bios.bakSHA1 和必须匹配。否则,请勿继续操作!
擦除 SPI 串行闪存。完成此步骤后,请勿重启主板!否则它将无法再启动
# flash_erase /dev/mtd0 0 0 Erasing 4 Kibyte @ 7ff000 -- 100 % complete如果没有错误地完成,你就可以写入新的 BIOS 映像
# dd if=MNW2MAX1.X64.0092.R01.1605221712.bin of=/dev/mtd0验证 SPI 串行闪存的新内容与新的 BIOS 映像是否匹配
# sha1sum /dev/mtd0ro MNW2MAX1.X64.0092.R01.1605221712.bin 9b4df9e4be2057fceec3a5529ec3d950836c87a2 /dev/mtd0ro 9b4df9e4be2057fceec3a5529ec3d950836c87a2 MNW2MAX1.X64.0092.R01.1605221712.binSHA1 和应该匹配。
现在你可以重启主板,并观察新的 BIOS 是否正常启动。
参考¶
[1] https://firmware.intel.com/sites/default/files/MinnowBoard%2EMAX_%2EX64%2E92%2ER01%2Ezip