更新 HP BIOS(以 rpm 形式打包)

更新 HP BIOS(以 rpm 形式打包)

因此,我正在尝试更新 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 驱动器安装它,结果证明这也是浪费时间。

相反,在不必要地组装启动盘后,我最终使用了系统设置实用程序中的选项。

  1. 提取压缩包:tar xvf sp100126.tgz
  2. 将闪存映像(例如DOS Flash/J61_0396.bin)放置在 FAT 格式的 USB 驱动器的根目录下。 (我实际上将整个DOS Flash/目录复制到拇指驱动器的根目录,所以我不确定是否还flshuefi.cpu需要其他文件。)
  3. 启动进入系统设置实用程序(F10启动时或ESC首先获取菜单)。
  4. 转到File->Flash System ROM
  5. 选择 USB 驱动器。至少在 Z620 上,USB 驱动器必须插入黑色 USB 2.0 端口之一。如果更方便的话,您可能可以使用内置硬盘上的 FAT 格式分区。
  6. 喝杯咖啡,回来发现 截屏

相关内容