作为一个骨灰级 Linux 发烧友,我的电脑到手基本都是第一时间换装 Linux 发行版。这样设备厂商出厂自带的 Windows 系统几乎毫无作用,但我又不能把它干掉——我还得靠它来更新厂商发布的 BIOS。为了偶尔更 BIOS 的需求而不得不保留这近 100GB 磁盘占用的 Windows 着实有些蛋疼,当然我知道可以用类似 WIN2GO 的玩意来更 BIOS,但这又有什么区别呢,还是离不开 Windows。
终于赶在 2024 年的尾巴,我在 Twitter 上闲逛时发现有人提到了纯 Linux 环境更新 BIOS 的方案:https://x.com/felixonmars/status/1876646199207604351
虽然寥寥数语,但激起了心中折腾的一团火:有戏&干之!
我手头笔记本清一色都是联想的 ThinkBook,先拿家里的机器 A 开刀,配置如下:
|
|
- 下载 Framework 家的 UEFI shell 更新工具,我们只用到
H2OFFT-Sx64.efi
,把他保存至/boot/efi
:https://downloads.frame.work/bios/Framework_Laptop_13_13th_Gen_Intel_Core_BIOS__3.05_EFI.zip - 下载 UEFI-Shell,将
shellx64.efi
保存至/boot/efi
:https://github.com/pbatard/UEFI-Shell/releases/tag/24H2 - 去联想驱动官网下载你笔记本型号对应的 BIOS 更新程序,通常会是
j6cn50ww.exe
的名字 - 尝试用
7z
解压这个exe
文件:7z e j6cn50ww.exe
,可能有类似的输出:Comments: This installation was built with Inno Setup.
- 我们需要
innoextract
来解包:innoextract -e j6cn50ww.exe
,你会得到一个新的exe
,我这里的名字是J6CN50WW.exe
- 再用
7z
解压:7z e J6CN50WW.exe
,这次我们应该可以顺利得到真实的 BIOS 固件WinJ6CN50WW.fd
- 将
WinJ6CN50WW.fd
保存至/boot/efi
- 添加 UEFI-Shell 启动项,编辑
/etc/grub.d/40_custom
,填入如下内容后执行sudo update-grub
:1 2 3 4 5 6
menuentry "UEFI Shell" { insmod part_gpt insmod chain set root='(hd0,gpt1)' chainloader /shellx64.efi }
- 重启进入 UEFI-Shell,输入:
FS0:
回车进入 EFI 分区,再输入:H2OFFT-Sx64.efi WinJ6CN50WW.fd
回车 - 此时熟悉的 BIOS 更新界面出现,耐心等待进度条走完即可完成更新
终于可以把自带的 Windows 分区扔进垃圾堆了✌️
注意:对于某些比较新的联想机型,可能7z
就能直接解压得到 BIOS 固件了,一般是 xxx.bin
的命名,innoextract
并不是必须的;还有7z
也不不是必须的,你可以换任何能解包exe
的工具,比如bsdtar
之类。
|
|