因此,我正在尝试更新 HP Z230 工作站的 BIOS(不要问为什么......)。
它是一对二的组合:“xwbios”内核模块作为名为 hp-lxbios-mod..src.rpm 的源 rpm,而“lxbios”应用程序 rpm hp-lxbios..rpm 则执行实际更新。
这是下载 rpm 的链接 文件 sp97093.tgz 位于该页面的 BIOS 选项卡下。解压后,在 lxbios 文件夹下,您将找到两个 rpm 和描述 rpm 安装过程的自述文件。
我在 Arch 上,我已经放弃尝试使用一些 rpm 工具,我正在尝试手动安装该软件(或至少编译它)(也许稍后会构建一个 PKGBUILD)。
内核模块
我已经解压了 hp-lxbios-mod..src.rpm,其中包含 rpm .spec 文件和另一个包含实际内容的 .tz 文件:
hp-lxbios-mod/mymod.c
hp-lxbios-mod/mymod.mod.c
hp-lxbios-mod/xwbios.c
hp-lxbios-mod/xwbios.mod.c
hp-lxbios-mod/xwbios.h
hp-lxbios-mod/Makefile
hp-lxbios-mod/mkit
Makefile 看起来 (...) 简单
#obj-m := mymod.o
obj-m := xwbios.o
clean:
rm -f *.o *.ko
install:
mkdir -p /opt/hp/hp-lxbios/xwkernel
cp xwbios.ko /opt/hp/hp-lxbios/xwkernel/
这mkit
是一个 bash 脚本,它查找内核源代码所在并启动 make
#!/bin/bash
if [ -d /lib/modules/`uname -r`/build ]; then
ksrc=/lib/modules/`uname -r`/build
elif [ -d /lib/modules/`uname -r`/source ]; then
ksrc=/lib/modules/`uname -r`/source
else
echo "*** mkit: Error - unable to define kernel source location"
exit -1
fi
echo "Kernel source dir is $ksrc"
# Setup kernel build of xwkernel module
rm -f $ksrc/xwkernel
ln -s /opt/hp/hp-lxbios/xwkernel $ksrc/xwkernel
make -C $ksrc M=$PWD modules
make 启动正常,但我立即遇到编译错误
Kernel source dir is /lib/modules/5.3.6-arch1-1-ARCH/build
make: Entering directory '/usr/lib/modules/5.3.6-arch1-1-ARCH/build'
CC [M] /home/gls/Downloads/bios_iupdate/lxbios/hp-lxbios-mod/xwbios.o
/home/gls/Downloads/bios_iupdate/lxbios/hp-lxbios-mod/xwbios.c:125:23: error: initialization of ‘long int (*)(struct file *, unsigned int, long unsigned int ’ from incompatible pointer type ‘int (*)(struct inode *, struct file *, unsigned int, long unsigned int)’ [-Werror=incompatible-pointer-types]
125 | .unlocked_ioctl = xwbios_ioctl,
| ^~~~~~~~~~~~
/home/gls/Downloads/bios_iupdate/lxbios/hp-lxbios-mod/xwbios.c:125:23: note: (near initialization for ‘xwbios_fops.unlocked_ioctl’)
/home/gls/Downloads/bios_iupdate/lxbios/hp-lxbios-mod/xwbios.c: In function ‘xwbios_exit’:
/home/gls/Downloads/bios_iupdate/lxbios/hp-lxbios-mod/xwbios.c:666:5: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
666 | if (pReqPwdBuffer)
| ^~
/home/gls/Downloads/bios_iupdate/lxbios/hp-lxbios-mod/xwbios.c:668:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
668 | if (pRepsetGetInfo != NULL)
| ^~
cc1: some warnings being treated as errors
make[1]: *** [scripts/Makefile.build:281: /home/gls/Downloads/bios_iupdate/lxbios/hp-lxbios-mod/xwbios.o] Error 1
make: *** [Makefile:1626: _module_/home/gls/Downloads/bios_iupdate/lxbios/hp-lxbios-mod] Error 2
make: Leaving directory '/usr/lib/modules/5.3.6-arch1-1-ARCH/build'
我真的不知道如何解决。我认为存在一些兼容性问题,也许我可能会在那里放置一个丢失的标志?
实际刷新BIOS
即将推出..
答案1
当我看到它需要一个自定义内核模块以及它有多旧时,我没有费心尝试让它使用现代内核进行编译。
我决定尝试通过 FreeDOS USB 驱动器安装它,结果证明这也是浪费时间。
相反,在不必要地组装启动盘后,我最终使用了系统设置实用程序中的选项。