TL;DR
- ArchLinuxにてpacman -Syuした際に、DKMSによるドライバ更新が失敗した
- 原因はカーネルバージョンアップに際し、レガシー関数pci_alloc_consistentにエラーが出るようになったため
- 既に対応パッチが出てるので、リポジトリを取り直して再ビルドしましょう
m-tsudo · GitHub
詳細
pacmanでこんな内容のエラーが出ました。
:: パッケージを取得します... linux-5.19.1.arch2-1-x86_64 178.4 MiB 4.32 MiB/s 00:41 [#####################################################################################] 100% (10/16) Updating module dependencies... depmod: ERROR: failed to load symbols from /lib/modules/5.19.1-arch2-1/kernel/sound/soc/intel/avs/snd-soc-avs.ko.zst: Invalid argument (11/16) Install DKMS modules ==> dkms install --no-depmod pt3_drv/0.0.1 -k 5.19.1-arch2-1 Error! Bad return status for module build on kernel: 5.19.1-arch2-1 (x86_64) Consult /var/lib/dkms/pt3_drv/0.0.1/build/make.log for more information. ==> WARNING: `dkms install --no-depmod pt3_drv/0.0.1 -k 5.19.1-arch2-1' exited 10
ログファイルの内容はこんな感じ。
最後の方にある「いくつかの警告はエラーとして取り扱われます」 という一文がなんとなく怪しいですね。
$ cat /var/lib/dkms/pt3_drv/0.0.1/build/make.log DKMS make.log for pt3_drv-0.0.1 for kernel 5.19.1-arch2-1 (x86_64) 2022年 8月 16日 火曜日 22:08:37 JST eval `sed -e "s/\[0\]//" ./dkms.conf`; \ GREV=`git rev-list HEAD | wc -l 2> /dev/null`; \ if [ $GREV != 0 ] ; then \ printf "#define DRV_VERSION \"${PACKAGE_VERSION}rev$GREV\"\n#define DRV_RELDATE \"`git show --date=short --format=%ad | sed -n '1p' 2> /dev/null`\"\n#define DRV_NAME \"${BUILT_MODULE_NAME}\"\n" > version.h; \ else \ printf "#define DRV_VERSION \"${PACKAGE_VERSION}\"\n#define DRV_RELDATE \"$PACKAGE_RELDATE\"\n#define DRV_NAME \"${BUILT_MODULE_NAME}\"\n" > version.h; \ fi fatal: detected dubious ownership in repository at '/var/lib/dkms/pt3_drv/0.0.1/build' To add an exception for this directory, call: git config --global --add safe.directory /var/lib/dkms/pt3_drv/0.0.1/build make -C /lib/modules/5.19.1-arch2-1/build M=`pwd` V=0 modules make[1]: 警告: jobserver が利用不可: 今回は -j1 を使います. 親 make ルールに `+' を追加しましょう. make[1]: ディレクトリ '/usr/lib/modules/5.19.1-arch2-1/build' に入ります CC [M] /var/lib/dkms/pt3_drv/0.0.1/build/pt3_pci.o /var/lib/dkms/pt3_drv/0.0.1/build/pt3_pci.c: 関数 ‘pt3_pci_init_one’ 内: /var/lib/dkms/pt3_drv/0.0.1/build/pt3_pci.c:923:14: エラー: 関数 ‘pci_set_dma_mask’ の暗黙的な宣言です [-Werror=implicit-function-declaration] 923 | rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(64)); | ^~~~~~~~~~~~~~~~ /var/lib/dkms/pt3_drv/0.0.1/build/pt3_pci.c:925:22: エラー: 関数 ‘pci_set_consistent_dma_mask’ の暗黙的な宣言です [-Werror=implicit-function-declaration] 925 | rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ cc1: いくつかの警告はエラーとして取り扱われます make[2]: *** [scripts/Makefile.build:249: /var/lib/dkms/pt3_drv/0.0.1/build/pt3_pci.o] エラー 1 make[1]: *** [Makefile:1843: /var/lib/dkms/pt3_drv/0.0.1/build] エラー 2 make[1]: ディレクトリ '/usr/lib/modules/5.19.1-arch2-1/build' から出ます make: *** [Makefile:12: pt3_drv.ko] エラー 2
自分でオプションを変更してもよかったのですが、この類のエラーは自分の環境だけではないだろうと思い、
upstreamを確認したところ以下のようなコミットを見つけました。
commit c10619da580e3a801b205df2ba4a95a850a38786 Author: fix@elementz <fix@elemsoft.com> Date: Sat Jun 18 01:15:05 2022 +0900 Fix compile error on kernel 5.18. M pt3_dma.c M pt3_pci.c
という訳で、あとはgitからソースを再取得してインストール&DKMSをやり直して終了です。
$ sudo /bin/bash ./dkms.install [sudo] fuha のパスワード: Deleting module pt3_drv-0.0.1 completely from the DKMS tree. rm -vf /lib/modules/`uname -r`/kernel/drivers/video/pt3_drv.ko* /etc/udev/rules.d/99-pt3.rules '/usr/src/pt3_drv-0.0.1/pt3_tc.h' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_bus.c' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_bus.h' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_mx.c' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_i2c.h' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_i2c.c' を削除しました '/usr/src/pt3_drv-0.0.1/dkms.install' を削除しました '/usr/src/pt3_drv-0.0.1/.gitignore' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_tc.c' を削除しました '/usr/src/pt3_drv-0.0.1/Makefile' を削除しました '/usr/src/pt3_drv-0.0.1/COPYING' を削除しました '/usr/src/pt3_drv-0.0.1/.git/logs/HEAD' を削除しました '/usr/src/pt3_drv-0.0.1/.git/logs/refs/heads/master' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/logs/refs/heads' を削除しました '/usr/src/pt3_drv-0.0.1/.git/logs/refs/remotes/origin/HEAD' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/logs/refs/remotes/origin' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/logs/refs/remotes' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/logs/refs' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/logs' を削除しました '/usr/src/pt3_drv-0.0.1/.git/description' を削除しました '/usr/src/pt3_drv-0.0.1/.git/objects/pack/pack-74a2bbe7e502032cbbc16ae0607eb906cb1d65ea.idx' を削除しました '/usr/src/pt3_drv-0.0.1/.git/objects/pack/pack-74a2bbe7e502032cbbc16ae0607eb906cb1d65ea.pack' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/objects/pack' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/objects/info' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/objects' を削除しました '/usr/src/pt3_drv-0.0.1/.git/HEAD' を削除しました '/usr/src/pt3_drv-0.0.1/.git/refs/heads/master' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/refs/heads' を削除しました '/usr/src/pt3_drv-0.0.1/.git/refs/remotes/origin/HEAD' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/refs/remotes/origin' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/refs/remotes' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/refs/tags' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/refs' を削除しました '/usr/src/pt3_drv-0.0.1/.git/packed-refs' を削除しました '/usr/src/pt3_drv-0.0.1/.git/hooks/fsmonitor-watchman.sample' を削除しました '/usr/src/pt3_drv-0.0.1/.git/hooks/pre-merge-commit.sample' を削除しました '/usr/src/pt3_drv-0.0.1/.git/hooks/pre-push.sample' を削除しました '/usr/src/pt3_drv-0.0.1/.git/hooks/push-to-checkout.sample' を削除しました '/usr/src/pt3_drv-0.0.1/.git/hooks/pre-rebase.sample' を削除しました '/usr/src/pt3_drv-0.0.1/.git/hooks/applypatch-msg.sample' を削除しました '/usr/src/pt3_drv-0.0.1/.git/hooks/post-update.sample' を削除しました '/usr/src/pt3_drv-0.0.1/.git/hooks/pre-receive.sample' を削除しました '/usr/src/pt3_drv-0.0.1/.git/hooks/pre-applypatch.sample' を削除しました '/usr/src/pt3_drv-0.0.1/.git/hooks/commit-msg.sample' を削除しました '/usr/src/pt3_drv-0.0.1/.git/hooks/update.sample' を削除しました '/usr/src/pt3_drv-0.0.1/.git/hooks/prepare-commit-msg.sample' を削除しました '/usr/src/pt3_drv-0.0.1/.git/hooks/pre-commit.sample' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/hooks' を削除しました '/usr/src/pt3_drv-0.0.1/.git/config' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/branches' を削除しました '/usr/src/pt3_drv-0.0.1/.git/index' を削除しました '/usr/src/pt3_drv-0.0.1/.git/info/exclude' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git/info' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/.git' を削除しました '/usr/src/pt3_drv-0.0.1/td/check_lfsr.c' を削除しました '/usr/src/pt3_drv-0.0.1/td/.gitignore' を削除しました '/usr/src/pt3_drv-0.0.1/td/Makefile' を削除しました '/usr/src/pt3_drv-0.0.1/td/td.c' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/td' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_com.h' を削除しました '/usr/src/pt3_drv-0.0.1/dkms.uninstall' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_qm.c' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_ioctl.h' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_pci.c' を削除しました '/usr/src/pt3_drv-0.0.1/README' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_dma.h' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_pci.h' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_qm.h' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_dma.c' を削除しました '/usr/src/pt3_drv-0.0.1/etc/99-pt3.rules' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1/etc' を削除しました '/usr/src/pt3_drv-0.0.1/pt3_mx.h' を削除しました '/usr/src/pt3_drv-0.0.1/dkms.conf' を削除しました ディレクトリ '/usr/src/pt3_drv-0.0.1' を削除しました Creating symlink /var/lib/dkms/pt3_drv/0.0.1/source -> /usr/src/pt3_drv-0.0.1 Sign command: /usr/lib/modules/5.19.1-arch2-1/build/scripts/sign-file Signing key: /var/lib/dkms/mok.key Public certificate (MOK): /var/lib/dkms/mok.pub Building module: Cleaning build area.... make -j2 KERNELRELEASE=5.19.1-arch2-1 KVER=5.19.1-arch2-1 dkms.......................... Signing module /var/lib/dkms/pt3_drv/0.0.1/build/pt3_drv.ko Cleaning build area...kj pt3_drv.ko.zst: Running module version sanity check. - Original module - No original module exists within this kernel - Installation - Installing to /usr/lib/modules/5.19.1-arch2-1/updates/dkms/ depmod.................
あとがき
注意点として、pacmanによる更新をした直後だと「uname -r」で取れるカーネルバージョンが昔のバージョンのままのため、linux-headerのバージョンが合わずMakeが失敗する。 Make前に一回再起動することで回避ができる。