我尝试在 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.0
对8.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
未签名。