それで、HP Z230ワークステーションのBIOSをアップデートしようとしています(理由は尋ねないでください...)。
これは1-2の組み合わせです。 「xwbios」カーネルモジュールはhp-lxbios-mod..src.rpmというソースrpmとして機能し、「lxbios」アプリケーションrpm hp-lxbios..rpmは実際の更新を実行します。
rpmダウンロードリンクです sp97093.tgzファイルは、このページのBIOSタブの下にあります。解凍すると、lxbiosフォルダの下に2つのrpmとrpmのインストールプロセスを説明する追加情報ファイルがあります。
私はArchを使用しており、いくつかのrpmツールの使用を放棄してソフトウェアを手動でインストールしたい(または少なくともコンパイル)(後でPKGBUILDをビルドすることもできます)。
カーネルモジュール
rpm .specファイルと実際の内容を含む別の.tzファイルを含むhp-lxbios-mod..src.rpmを解凍しました。
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
、カーネルのソースコードがどこにあるかを探してmakeを起動するbashスクリプトです。
#!/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ドライブからインストールしてみることにしましたが、やはり時間の無駄でした。
代わりに、不必要に起動ディスクを組み立てた後、システム設定ユーティリティのオプションを使用するようになりました。
- 圧縮パッケージを抽出します。
tar xvf sp100126.tgz
DOS Flash/J61_0396.bin
FATでフォーマットされたUSBドライブのルートディレクトリにフラッシュイメージ(たとえば)を配置します。 (実際にはディレクトリ全体をサムドライブのルートにコピーしたので、他のファイルが必要かどうかDOS Flash/
はわかりません。)flshuefi.cpu
- システム設定ユーティリティから起動します(
F10
起動時またはESC
初めてメニューを表示)。 File
-> に移動Flash System ROM
- USBドライブを選択します。少なくともZ620では、USBドライブを黒いUSB 2.0ポートの1つに接続する必要があります。さらに便利な場合は、内蔵ハードドライブでFATフォーマットパーティションを使用することもできます。
- 一杯のコーヒーを飲んで戻ってきてください。