模块:x86/modules:跳过无效的重定位目标

模块:x86/modules:跳过无效的重定位目标

我尝试在 Debian 10 (v4l2loopback) 上编译一个模块,如下所示:

sudo apt-get install linux-headers-$(uname -r)
git clone https://github.com/umlaeute/v4l2loopback.git
cd v4l2loopback/
make -j4
sudo make install
sudo modprobe v4l2loopback

这给了我一个错误

modprobe: ERROR: could not insert 'v4l2loopback': Exec format error

我试图找出问题所在。 (关于这个问题有一些问题,例如https://github.com/umlaeute/v4l2loopback/issues/208或者https://github.com/umlaeute/v4l2loopback/issues/296,但我认为问题与我的系统配置有关,而不是v4l2loopback)。

1.检查dmesg

我不知道这是什么意思:

[   48.264449] v4l2loopback: loading out-of-tree module taints kernel.
[   48.264505] v4l2loopback: module verification failed: signature and/or required key missing - tainting kernel
[   48.264610] module: x86/modules: Skipping invalid relocation target, existing value is nonzero for type 1, loc 00000000d85e721d, val ffffffffc0ba115b

2. 检查内核头是否与内核安装匹配

从以下输出来看,我认为两者都匹配:

$ sudo modinfo v4l2loopback 
filename:       /lib/modules/4.19.0-2-amd64/extra/v4l2loopback.ko
license:        GPL
author:         Vasily Levin, IOhannes m zmoelnig <[email protected]>,Stefan Diewald,Anton Novikovet al.
description:    V4L2 loopback video device
depends:        videodev
retpoline:      Y
name:           v4l2loopback
vermagic:       4.19.0-2-amd64 SMP mod_unload modversions

$ uname -a
Linux pingu1 4.19.0-2-amd64 #1 SMP Debian 4.19.16-1 (2019-01-17) x86_64 GNU/Linux

所以这不是问题。

3. 用于构建模块的工具链与用于构建内核的工具链相同吗?

内核似乎是用以下命令构建的gcc version 8.2.0

$ cat /proc/version
Linux version 4.19.0-2-amd64 ([email protected]) (gcc version 8.2.0 (Debian 8.2.0-14)) #1 SMP Debian 4.19.16-1 (2019-01-17)

我不知道如何找出构建模块所用的东西。我最好的猜测是:

$ gcc --version
gcc (Debian 8.3.0-6) 8.3.0

所以这是8.2.08.3.0。这是一个较小的版本更改,不会破坏任何内容。

4.depmod之前运行modprobe

这没有什么区别。我认为我没有造成任何影响,因为相关模块没有依赖项。

有人可以帮助下一步做什么吗?

答案1

我遇到了同样的问题,可以通过重新安装内核标头来解决它。

sudo apt update && sudo apt upgrade
sudo apt remove --purge linux-headers-*
sudo apt autoremove && sudo apt autoclean
sudo apt install linux-headers-generic

答案2

我可以解决我的问题:

sudo apt-get install linux-image-4.19.0-6-amd64-unsigned linux-headers-4.19.0-6-amd64
cd v4l2loopback/
make clean
make
sudo make install
sudo depmod
sudo modprobe v4l2loopback

请注意,您需要sudo depmod,否则将找不到内核模块。

因此,关键错误dmesg似乎是

v4l2loopback: module verification failed: signature and/or required key missing - tainting kernel

如果我是对的,那么您需要一个未签名的内核,因为v4l2loopback未签名。

相关内容