すべてのDKMS管理のカーネルモジュールが、Ubuntu 18.04マシンへのロード中に失敗し始めました。 acpi_call
で気づいたので、それを使って説明します。
# uname -r
4.15.0-99-generic
# modinfo acpi_call.ko
filename: /lib/modules/4.15.0-99-generic/updates/dkms/acpi_call.ko
license: GPL
srcversion: 72B6FB9451F0D2139482F11
depends:
retpoline: Y
name: acpi_call
vermagic: 4.15.0-99-generic SMP mod_unload
signat: PKCS#7
signer:
sig_key:
sig_hashalgo: md4
# modprobe acpi_call
modprobe: ERROR: could not insert 'acpi_call': Exec format error
DKMSで再インストールしてみましたが、役に立ちませんでした。
# dkms status acpi-call
acpi-call, 1.1.0, 4.15.0-99-generic, x86_64: installed
# dkms remove acpi-call/1.1.0 --all
-------- Uninstall Beginning --------
Module: acpi-call
Version: 1.1.0
Kernel: 4.15.0-99-generic (x86_64)
-------------------------------------
Status: Before uninstall, this module version was ACTIVE on this kernel.
acpi_call.ko:
- Uninstallation
- Deleting from: /lib/modules/4.15.0-99-generic/updates/dkms/
- Original module
- No original module was found for this module on this kernel.
- Use the dkms install command to reinstall any previous module version.
depmod...
DKMS: uninstall completed.
------------------------------
Deleting module version: 1.1.0
completely from the DKMS tree.
------------------------------
Done.
# dkms install acpi-call/1.1.0
Creating symlink /var/lib/dkms/acpi-call/1.1.0/source ->
/usr/src/acpi-call-1.1.0
DKMS: add completed.
Kernel preparation unnecessary for this kernel. Skipping...
Building module:
cleaning build area...
make -j8 KERNELRELEASE=4.15.0-99-generic -C /lib/modules/4.15.0-99-generic/build M=/var/lib/dkms/acpi-call/1.1.0/build...
Signing module:
- /var/lib/dkms/acpi-call/1.1.0/4.15.0-99-generic/x86_64/module/acpi_call.ko
Nothing to do.
cleaning build area...
DKMS: build completed.
acpi_call.ko:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.15.0-99-generic/updates/dkms/
depmod...
DKMS: install completed.
# modprobe acpi_call
modprobe: ERROR: could not insert 'acpi_call': Exec format error
/lib/modules/4.15.0-99-generic/updates/dkms
の他のモジュールでもまったく同じ問題が発生します。
私はmodprobe -f
も試しましたが、別のエラーメッセージが表示されました:
# modprobe -f acpi_call
modprobe: ERROR: could not insert 'acpi_call': Required key not available
これにより MOK rabbit hole が表示されましたが、新しいMOKを登録してsign-file
-.ko
ファイルを登録した後でも、Required key not available
エラーが発生します。検証を無効にしても、modprobe -f
はExec format error
で失敗します。
また、dmesg
に次の行があることに気づきました:
[ 617.320431] module: x86/modules: Skipping invalid relocation target, existing value is nonzero for type 1, loc 0000000057734886, val ffffffffc0d56a43
ここで何がうまくいかず、どうすれば修正できますか?
問題は、私のシステムのデフォルトのGCCが(失敗したfreehdl
アップグレードが原因で)GCC-9に変更されたことです。これにより、Ubuntuカーネルのビルドに使用されたGCCバージョンと比較して、DKMSでモジュールをビルドするために使用される異なる(そして明らかにABI互換ではない?)GCCバージョンが発生しました。
GCC-7にダウングレード(およびすべてのDKMSモジュールを再構築)した後、セキュアブートのサポートを含め、すべてが以前と同様に機能するようになりました。