如何使用纯Linux更新InsydeH2O BIOS
内容提要
作者为摆脱BIOS更新对Windows的依赖,探索纯Linux方案:下载Framework的H2OFFT-Sx64.efi和UEFI Shell,从联想驱动页获取BIOS更新exe,用7z或innoextract解出固件fd文件,放入/boot/efi,并在GRUB添加UEFI Shell启动项;重启进入Shell后运行刷写工具完成更新,从而删除Windows分区。
延伸解读
为何要摆脱Windows更新BIOS
许多Linux用户在新笔记本上安装Linux后,仍保留Windows分区,只因厂商BIOS更新工具通常只提供Windows版。作者也是如此,为了偶尔的BIOS更新,不得不保留约100GB的Windows分区,这既浪费空间又违背了纯Linux的初衷。即使使用Windows To Go,也依然依赖Windows。因此,探索纯Linux更新BIOS的方法,对于希望彻底删除Windows的Linux用户来说,具有实际意义。
关键工具与文件准备
实现纯Linux更新需要几个关键文件:Framework提供的H2OFFT-Sx64.efi刷写工具、UEFI Shell的shellx64.efi,以及从联想驱动页面下载的对应机型BIOS更新exe。这些文件都需要放入EFI系统分区(/boot/efi)。其中,H2OFFT-Sx64.efi是InsydeH2O BIOS的刷写工具,而UEFI Shell则提供了在Linux外执行efi程序的环境。准备时需注意选择与机型匹配的BIOS更新文件。
从exe中提取固件的技巧
联想BIOS更新exe通常使用Inno Setup打包,直接使用7z可能无法解出固件。此时可先用innoextract解包,得到一个新的exe,再用7z提取,最终获得.fd固件文件。对于较新的联想机型,7z可能直接解出.bin固件,无需innoextract。此外,7z并非唯一选择,任何能解包exe的工具(如bsdtar)均可。这一步骤的灵活性有助于适应不同机型的打包方式。
操作流程与风险提示
在GRUB中添加UEFI Shell启动项后,重启进入Shell,切换到EFI分区(FS0:),运行H2OFFT-Sx64.efi和固件文件即可开始刷写。刷写过程中需确保电源稳定,避免中断。作者成功在ThinkBook上完成更新并删除了Windows分区,但此方法涉及BIOS刷写,操作不当可能导致设备无法启动。建议仅在了解风险并做好数据备份的前提下尝试,且不同机型可能存在差异。
Q&A
为什么在Linux系统上更新InsydeH2O BIOS需要保留Windows分区?
因为厂商提供的BIOS更新工具通常只能在Windows下运行,所以即使主要使用Linux,也需要保留Windows分区来执行BIOS更新。
在纯Linux环境下更新InsydeH2O BIOS需要准备哪些工具和文件?
需要下载Framework的H2OFFT-Sx64.efi刷写工具、UEFI Shell的shellx64.efi,以及从联想驱动页面下载对应机型的BIOS更新exe文件。
如何从联想提供的BIOS更新exe文件中提取出固件fd文件?
先用7z尝试解压exe,如果提示是Inno Setup打包的,则使用innoextract解包,得到新的exe后再用7z解压,最终得到.fd固件文件。
怎样在GRUB中添加UEFI Shell启动项以便刷写BIOS?
编辑/etc/grub.d/40_custom文件,添加一个menuentry,内容包含insmod part_gpt、insmod chain、set root='(hd0,gpt1)'和chainloader /shellx64.efi,然后运行sudo update-grub。
进入UEFI Shell后,执行BIOS刷写的具体命令是什么?
在UEFI Shell中,先输入FS0:切换到EFI分区,然后运行H2OFFT-Sx64.efi WinJ6CN50WW.fd(其中WinJ6CN50WW.fd是固件文件名),按回车后会出现BIOS刷写界面,等待完成即可。
对于较新的联想机型,提取BIOS固件有什么更简单的方法?
部分较新联想机型可以直接用7z解压出BIOS固件,通常命名为xxx.bin,这样就不需要innoextract了。另外,7z也不是必须的,可以用任何能解压exe的工具,比如bsdtar。