Ubuntu 20.04安装DisplayLink驱动时遭遇evdi依赖缺失、内核模块编译失败等系列问题求助
我最近在折腾Ubuntu 20.04上的USB转HDMI DisplayLink驱动,之前在22.04上按照自己写的安装步骤操作,全程顺畅没毛病,结果到20.04这儿直接卡壳,一堆问题找上门,实在没辙了来求助!
首先,我执行常规的安装命令:
sudo apt install displaylink-driver
结果直接弹出依赖错误,说displaylink-driver需要evdi版本在1.14.1到1.15.0之间,但这个evdi就是装不上:
Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: displaylink-driver : Depends: evdi (>= 1.14.1) but it is not going to be installed Depends: evdi (< 1.15.0) but it is not going to be installed E: Unable to correct problems, you have held broken packages.
后来看到有建议说装evdi-dkms试试,我就执行了:
sudo apt install evdi-dkms
结果内核模块编译直接失败,完整输出如下:
Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: libevdi0 The following NEW packages will be installed: evdi-dkms libevdi0 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 34.4 kB of archives. After this operation, 173 kB of additional disk space will be used. Do you want to continue? [Y/n] Get:1 http://us.archive.ubuntu.com/ubuntu focal/universe amd64 evdi-dkms all 1.6.0+dfsg-1ubuntu3 [25.5 kB] Get:2 http://us.archive.ubuntu.com/ubuntu focal/universe amd64 libevdi0 amd64 1.6.0+dfsg-1ubuntu3 [8,972 B] Fetched 34.4 kB in 0s (74.8 kB/s) Selecting previously unselected package evdi-dkms. (Reading database ... 499689 files and directories currently installed.) Preparing to unpack .../evdi-dkms_1.6.0+dfsg-1ubuntu3_all.deb ... Unpacking evdi-dkms (1.6.0+dfsg-1ubuntu3) ... Selecting previously unselected package libevdi0. Preparing to unpack .../libevdi0_1.6.0+dfsg-1ubuntu3_amd64.deb ... Unpacking libevdi0 (1.6.0+dfsg-1ubuntu3) ... Setting up evdi-dkms (1.6.0+dfsg-1ubuntu3) ... Loading new evdi-1.6.0+dfsg DKMS files... Building for 5.15.0-41-generic Building initial module for 5.15.0-41-generic ERROR (dkms apport): kernel package linux-headers-5.15.0-41-generic is not supported Error! Bad return status for module build on kernel: 5.15.0-41-generic (x86_64) Consult /var/lib/dkms/evdi/1.6.0+dfsg/build/make.log for more information. dpkg: error processing package evdi-dkms (--configure): installed evdi-dkms package post-installation script subprocess returned error exit status 10 Setting up libevdi0 (1.6.0+dfsg-1ubuntu3) ... Processing triggers for libc-bin (2.31-0ubuntu9.9) ... Errors were encountered while processing: evdi-dkms E: Sub-process /usr/bin/dpkg returned an error code (1)
这之后更糟,连sudo apt upgrade都跑失败了:
sudo apt upgrade
输出如下:
Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Done 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 1 not fully installed or removed. After this operation, 0 B of additional disk space will be used. Do you want to continue? [Y/n] Setting up evdi-dkms (1.6.0+dfsg-1ubuntu3) ... Removing old evdi-1.6.0+dfsg DKMS files... ------------------------------ Deleting module version: 1.6.0+dfsg completely from the DKMS tree. ------------------------------ Done. Loading new evdi-1.6.0+dfsg DKMS files... Building for 5.15.0-41-generic Building initial module for 5.15.0-41-generic ERROR (dkms apport): kernel package linux-headers-5.15.0-41-generic is not supported Error! Bad return status for module build on kernel: 5.15.0-41-generic (x86_64) Consult /var/lib/dkms/evdi/1.6.0+dfsg/build/make.log for more information. dpkg: error processing package evdi-dkms (--configure): installed evdi-dkms package post-installation script subprocess returned error exit status 10 Errors were encountered while processing: evdi-dkms E: Sub-process /usr/bin/dpkg returned an error code (1)
没办法,我只能执行sudo dpkg -r evdi-dkms把这个麻烦的包删掉,这才让apt恢复正常,但又回到了最初装不了displaylink-driver的死循环。
我本来想干脆升级到22.04一了百了,结果发现/boot分区满了,升级操作直接卡壳,这条路也走不通。
按照错误提示,我去看了/var/lib/dkms/evdi/1.6.0+dfsg/build/make.log,发现是编译的时候找不到drm/drmP.h这个头文件:
DKMS make.log for evdi-1.6.0+dfsg for kernel 5.15.0-41-generic (x86_64) Thu 28 Sep 2023 07:05:36 PM MST make: Entering directory '/usr/src/linux-headers-5.15.0-41-generic' CC [M] /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_drv.o CC [M] /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_connector.o CC [M] /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_modeset.o CC [M] /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_encoder.o CC [M] /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_main.o CC [M] /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_fb.o CC [M] /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_gem.o /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_drv.c:11:10: fatal error: drm/drmP.h: No such file or directory 11 | #include <drm/drmP.h> | ^~~~~~~~~~~~ compilation terminated. make[1]: *** [scripts/Makefile.build:285: /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_drv.o] Error 1 make[1]: *** Waiting for unfinished jobs.... CC [M] /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_painter.o /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_connector.c:14:10: fatal error: drm/drmP.h: No such file or directory 14 | #include <drm/drmP.h> | ^~~~~~~~~~~~ compilation terminated. /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_modeset.c:15:10: fatal error: drm/drmP.h: No such file or directory 15 | #include <drm/drmP.h> | ^~~~~~~~~~~~ compilation terminated. make[1]: *** [scripts/Makefile.build:285: /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_modeset.o] Error 1 make[1]: *** [scripts/Makefile.build:285: /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_connector.o] Error 1 /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_encoder.c:14:10: fatal error: drm/drmP.h: No such file or directory 14 | #include <drm/drmP.h> | ^~~~~~~~~~~~ compilation terminated. make[1]: *** [scripts/Makefile.build:285: /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_encoder.o] Error 1 /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_gem.c:11:10: fatal error: drm/drmP.h: No such file or directory 11 | #include <drm/drmP.h> | ^~~~~~~~~~~~ compilation terminated. make[1]: *** [scripts/Makefile.build:285: /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_gem.o] Error 1 /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_main.c:15:10: fatal error: drm/drmP.h: No such file or directory 15 | #include <drm/drmP.h> | ^~~~~~~~~~~~ compilation terminated. make[1]: *** [scripts/Makefile.build:285: /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_main.o] Error 1 /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_painter.c:12:10: fatal error: drm/drmP.h: No such file or directory 12 | #include <drm/drmP.h> | ^~~~~~~~~~~~ compilation terminated. make[1]: *** [scripts/Makefile.build:285: /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_painter.o] Error 1 /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_fb.c:20:10: fatal error: drm/drmP.h: No such file or directory 20 | #include <drm/drmP.h> | ^~~~~~~~~~~~ compilation terminated. make[1]: *** [scripts/Makefile.build:285: /var/lib/dkms/evdi/1.6.0+dfsg/build/evdi_fb.o] Error 1 make: *** [Makefile:1875: /var/lib/dkms/evdi/1.6.0+dfsg/build] Error 2 make: Leaving directory '/usr/src/linux-headers-5.15.0-41-generic' ERROR (dkms apport): kernel package linux-headers-5.15.0-41-generic is not supported
我尝试手动编译evdi的源码,结果又遇到其他缺失的头文件,实在搞不定;想装libdrm-dev来补全依赖,结果因为系统里的版本太新,依赖要求的老版本装不上;后来我手动编译安装了libdrm,再运行官方的驱动安装包,结果还是提示缺libdrm,不让继续:
sudo ./displaylink-driver-5.8.0-63.33.run
输出:
Verifying archive integrity... 100% MD5 checksums are OK. All good. Uncompressing DisplayLink Linux Driver 5.8.0-63.33 100% Distribution discovered: Ubuntu 20.04.4 LTS [ Installing dependencies ] Need to update package list. apt update? (Y/n) n Unsatisfied dependencies. Missing component: libdrm. This is a fatal error, cannot install DisplayLink Linux Software.
真的是折腾到心态爆炸,这时候特别理解有人为啥宁愿用Windows了...有没有大佬能指点下怎么解决这些问题啊?
备注:内容来源于stack exchange,提问作者Gabriel Staples

