그래서 HP Z230 워크스테이션의 BIOS를 업데이트하려고 합니다(이유는 묻지 마세요...).
이는 1-2 조합입니다. "xwbios" 커널 모듈은 hp-lxbios-mod..src.rpm이라는 소스 rpm 역할을 하고 "lxbios" 응용 프로그램 rpm hp-lxbios..rpm은 실제 업데이트를 수행합니다.
rpm 다운로드 링크입니다 sp97093.tgz 파일은 이 페이지의 BIOS 탭 아래에 있습니다. 압축을 풀면 lxbios 폴더 아래에 두 개의 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 포트 중 하나에 연결해야 합니다. 더 편리하다면 내장 하드 드라이브에서 FAT 포맷 파티션을 사용할 수도 있습니다.
- 커피 한잔 마시고 다시 와서 알아보세요