J'essaie donc d'installer ce pilote pour activer displaylink. Le 12.04, il a averti que mon noyau était obsolète et j'ai donc installé le noyau 3.14. Il a ensuite passé la vérification du noyau, mais n'a pas réussi à construire le noyau evdi. J'ai ensuite mis à niveau l'ensemble du système d'exploitation vers 14.04, ainsi que le noyau. L'erreur montre toujours. Mon terminal ressemble à ceci:
blaineatkins@ubuntu:~$ cd ~/Downloads
blaineatkins@ubuntu:~/Downloads$ Sudo ./displaylink-driver-1.3.54.run
[Sudo] password for blaineatkins:
Verifying archive integrity... All good.
Uncompressing DisplayLink Linux Driver 1.3.54 100%
DisplayLink Linux Software 1.3.54 install script called: install
Distribution discovered: Ubuntu 14.04.5 LTS
Installing
Configuring EVDI DKMS module
Registering EVDI kernel module with DKMS
Building EVDI kernel module with DKMS
ERROR (code 3): Failed to build evdi/1.3.54. Consult /var/lib/dkms/evdi/1.3.54/build/make.log for details..
blaineatkins@ubuntu:~/Downloads$
Et voici le contenu du journal qu'il mentionne:
DKMS make.log for evdi-1.3.54 for kernel 3.14.0-031400-generic (x86_64)
Sat Jul 22 10:13:12 PHT 2017
make KBUILD_VERBOSE=1 SUBDIRS=/var/lib/dkms/evdi/1.3.54/build SRCROOT=/var/lib/dkms/evdi/1.3.54/build CONFIG_MODULE_SIG= -C /lib/modules/3.14.0-031400-generic/build modules
make[1]: Entering directory `/usr/src/linux-headers-3.14.0-031400-generic'
test -e include/generated/autoconf.h -a -e include/config/auto.conf || ( \
echo >&2; \
echo >&2 " ERROR: Kernel configuration is invalid."; \
echo >&2 " include/generated/autoconf.h or include/config/auto.conf are missing.";\
echo >&2 " Run 'make oldconfig && make prepare' on kernel src to fix it."; \
echo >&2 ; \
/bin/false)
mkdir -p /var/lib/dkms/evdi/1.3.54/build/.tmp_versions ; rm -f /var/lib/dkms/evdi/1.3.54/build/.tmp_versions/*
make -f scripts/Makefile.build obj=/var/lib/dkms/evdi/1.3.54/build
gcc -Wp,-MD,/var/lib/dkms/evdi/1.3.54/build/.evdi_drv.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/src/linux-headers-3.14.0-031400-generic/Arch/x86/include -Iarch/x86/include/generated -Iinclude -I/usr/src/linux-headers-3.14.0-031400-generic/Arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I/usr/src/linux-headers-3.14.0-031400-generic/include/uapi -Iinclude/generated/uapi -include /usr/src/linux-headers-3.14.0-031400-generic/include/linux/kconfig.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m64 -mno-mmx -mno-sse -mpreferred-stack-boundary=3 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_X86_X32_ABI -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -Wframe-larger-than=1024 -fstack-protector -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -DCC_HAVE_ASM_GOTO -Iinclude/drm -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(evdi_drv)" -D"KBUILD_MODNAME=KBUILD_STR(evdi)" -c -o /var/lib/dkms/evdi/1.3.54/build/.tmp_evdi_drv.o /var/lib/dkms/evdi/1.3.54/build/evdi_drv.c
if [ "-pg" = "-pg" ]; then if [ /var/lib/dkms/evdi/1.3.54/build/evdi_drv.o != "scripts/mod/empty.o" ]; then /usr/src/linux-headers-3.14.0-031400-generic/scripts/recordmcount "/var/lib/dkms/evdi/1.3.54/build/evdi_drv.o"; fi; fi;
gcc -Wp,-MD,/var/lib/dkms/evdi/1.3.54/build/.evdi_modeset.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/src/linux-headers-3.14.0-031400-generic/Arch/x86/include -Iarch/x86/include/generated -Iinclude -I/usr/src/linux-headers-3.14.0-031400-generic/Arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I/usr/src/linux-headers-3.14.0-031400-generic/include/uapi -Iinclude/generated/uapi -include /usr/src/linux-headers-3.14.0-031400-generic/include/linux/kconfig.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m64 -mno-mmx -mno-sse -mpreferred-stack-boundary=3 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_X86_X32_ABI -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -Wframe-larger-than=1024 -fstack-protector -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -DCC_HAVE_ASM_GOTO -Iinclude/drm -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(evdi_modeset)" -D"KBUILD_MODNAME=KBUILD_STR(evdi)" -c -o /var/lib/dkms/evdi/1.3.54/build/.tmp_evdi_modeset.o /var/lib/dkms/evdi/1.3.54/build/evdi_modeset.c
/var/lib/dkms/evdi/1.3.54/build/evdi_modeset.c: In function ‘evdi_crtc_mode_set’:
/var/lib/dkms/evdi/1.3.54/build/evdi_modeset.c:67:10: error: ‘struct drm_crtc’ has no member named ‘primary’
if (crtc->primary == NULL) {
^
In file included from include/drm/drmP.h:45:0,
from /var/lib/dkms/evdi/1.3.54/build/evdi_modeset.c:14:
/var/lib/dkms/evdi/1.3.54/build/evdi_modeset.c:74:23: error: ‘struct drm_crtc’ has no member named ‘primary’
efb = to_evdi_fb(crtc->primary->fb);
^
include/linux/kernel.h:833:49: note: in definition of macro ‘container_of’
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
^
/var/lib/dkms/evdi/1.3.54/build/evdi_modeset.c:74:8: note: in expansion of macro ‘to_evdi_fb’
efb = to_evdi_fb(crtc->primary->fb);
^
/var/lib/dkms/evdi/1.3.54/build/evdi_modeset.c: In function ‘evdi_sched_page_flip’:
/var/lib/dkms/evdi/1.3.54/build/evdi_modeset.c:136:11: error: ‘struct drm_crtc’ has no member named ‘primary’
fb = crtc->primary->fb;
^
/var/lib/dkms/evdi/1.3.54/build/evdi_modeset.c: In function ‘evdi_crtc_page_flip’:
/var/lib/dkms/evdi/1.3.54/build/evdi_modeset.c:192:40: error: ‘struct drm_crtc’ has no member named ‘primary’
struct drm_framebuffer *old_fb = crtc->primary->fb;
^
/var/lib/dkms/evdi/1.3.54/build/evdi_modeset.c:200:7: error: ‘struct drm_crtc’ has no member named ‘primary’
crtc->primary->fb = fb;
^
make[2]: *** [/var/lib/dkms/evdi/1.3.54/build/evdi_modeset.o] Error 1
make[1]: *** [_module_/var/lib/dkms/evdi/1.3.54/build] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.14.0-031400-generic'
make: *** [all] Error 2
Vous pouvez résoudre ce problème soit
J'ai testé cela avec logiciel graphique USB DisplayLink pour Ubuntu (1.3.54) dans les machines virtuelles VirtualBox exécutant les versions 64 bits de 14.04 LTS et 16.04 LTS.
Vous utilisez actuellement le noyau 3.14 que vous avez installé dans 12.04 avant de passer à 14.04, car 14.04 LTS est livré avec un noyau 3.13 et GRUB liste automatiquement la version la plus numérotée en premier et démarre à la première entrée répertoriée. . Vous pouvez le vérifier en exécutant uname -r
. Notez la ligne supérieure dans le journal de génération DisplayLink:
DKMS make.log for evdi-1.3.54 for kernel 3.14.0-031400-generic (x86_64)
Les erreurs de construction que vous obtenez apparaissent en fonction du noyau que vous avez installé. Je ne parviens pas à les reproduire avec un noyau officiel Ubuntu.
Si vous ne l'avez installé que pour que ce pilote fonctionne, je vous recommande de le désinstaller avant de continuer, bien que je ne puisse pas vous dire comment le faire, car je ne sais pas comment vous l'avez installé. Bien que DisplayLink nécessite une version de noyau de 3.14 ou supérieure, vous n'avez pas besoin de cette version spécifiquement (et ce n'est pas l'une des versions officiellement fournies pour Ubuntu 14.04).
J'ai testé les deux options suivantes sur des machines virtuelles et j'ai pu créer et installer le pilote DisplayLink avec succès.
Vous venez de passer de 12.04 LTS à 14.04 LTS. Si vous n'avez aucune raison spécifique de rester avec 14.04, vous devriez envisager de passer à 16.04. Non seulement cela devrait résoudre ce problème, mais il sera également pris en charge plus longtemps et il contient d’autres logiciels plus récents officiellement emballés pour celui-ci.
Pour mettre à niveau, exécutez:
do-release-upgrade
En omettant Sudo
, il est un peu plus facile d’éviter de passer accidentellement à la mauvaise version. (Une autre méthode consiste à vérifier que /etc/update-manager/release-upgrades
possède une ligne Prompt=lts
sans aucun caractère principal #
.) Il devrait indiquer:
Checking for a new Ubuntu release
Get:1 Upgrade tool signature [836 B]
Get:2 Upgrade tool [1,265 kB]
Fetched 1,266 kB in 0s (0 B/s)
authenticate 'xenial.tar.gz' against 'xenial.tar.gz.gpg'
extracting 'xenial.tar.gz'
[Sudo] password for blaineatkins:
C'est-à-dire, devrait indiquer xenial
comme version à mettre à niveau. Ensuite, vous pouvez entrer votre mot de passe et effectuer la mise à niveau.
Cependant, 14.04 reste en vigueur jusqu'en avril 2019 et il n'y a aucune raison générale de ne pas l'utiliser. De plus, vous préférerez peut-être rester avec 14.04 pour diverses raisons. En particulier, si vous vous appuyez sur (ou préférez simplement) pstart plutôt que systemd , cela peut être une raison pour rester avec 14.04 un peu plus longtemps.
Les versions LTS d'Ubuntu obtiennent les noyaux officiellement rapportés des versions ultérieures d'Ubuntu, afin de prendre en charge le nouveau matériel et les pilotes - exactement de la situation dans laquelle vous vous trouvez . Le noyau 4.4 de Ubuntu 16.04 LTS est officiellement rétroporté à 14.04 LTS. Une façon de l'installer est simplement de lancer:
Sudo apt install linux-generic-lts-xenial
Puis redémarrez.
C’est tout ce que j’avais à faire pour que le pilote DisplayLink soit construit et installé sans erreur. Cependant, mon système 14.04 est une machine virtuelle sur laquelle aucune interface graphique n'est installée.
S'il s'agit d'un système de bureau (c'est-à-dire que vous exécutez un environnement de bureau graphique), puis LTSEnablementStack recommande installer d'autres packages . Cela peut vous aider à éviter une situation dans laquelle vous devez installer des packages ultérieurement.
Vous exécuteriez cette commande à la place (et redémarrez tout de même après):
Sudo apt install --install-recommends linux-generic-lts-xenial xserver-xorg-core-lts-xenial xserver-xorg-lts-xenial xserver-xorg-video-all-lts-xenial xserver-xorg-input-all-lts-xenial libwayland-egl1-mesa-lts-xenial
J'ai changé apt-get
en apt
, ce qui produit un résultat un peu plus lisible par l'homme. (14.04 a apt
; certaines versions précédentes ne le sont pas.) Le drapeau --install-recommends
est probablement inutile car c'est la valeur par défaut et il est peu probable que vous l'ayez modifié, mais vous avez gagné ne pas faire de mal.
Avec un noyau Ubuntu officiel (avec un numéro de version suffisamment élevé), l'installation devrait réussir. Cette section est destinée principalement aux autres lecteurs qui n’ont peut-être pas été aussi avancés que vous lors de l’installation du pilote. Vous (et tous ceux qui savent comment effectuer le reste de l'installation du pilote) n'avez pas à suivre cette partie vous-même.
Installer des dépendances:
Sudo apt update
Sudo apt install build-essential linux-headers-generic dkms
Après cd
ing dans le répertoire où vous avez décompressé le fichier DisplayLink USB Graphics Software for Ubuntu 1.3.54.Zip
, exécutez le programme d'installation:
Sudo ./displaylink-driver-1.3.54.run
Il doit construire (au moins une partie de) le pilote dans les coulisses, et sur certains ordinateurs, cela peut être lent, alors ne vous inquiétez pas si cela ne se termine pas immédiatement.
Vous devriez voir quelque chose comme ceci comme sortie:
Verifying archive integrity... All good.
Uncompressing DisplayLink Linux Driver 1.3.54 100%
DisplayLink Linux Software 1.3.54 install script called: install
Distribution discovered: Ubuntu 16.04.2 LTS
Installing
Configuring EVDI DKMS module
Registering EVDI kernel module with DKMS
Building EVDI kernel module with DKMS
Installing EVDI kernel module to kernel tree
EVDI kernel module built successfully
Installing x64-ubuntu-1604/DisplayLinkManager
Installing libraries
Installing firmware packages
Installing license file
Adding udev rule for DisplayLink DL-3xxx/5xxx devices
Si vous voyez quelque chose comme ça et qu'il n'y a pas d'erreur, l'installation a fonctionné. Je suggère de redémarrer avant d'essayer d'utiliser votre périphérique DisplayLink, bien que l'exécution de Sudo modprobe evdi
semble charger le pilote avec succès, même sans redémarrage intermédiaire.
Lorsque le pilote est chargé dans le noyau, le résultat de lsmod | grep evdi
devrait être similaire à:
evdi 53248 0
drm_kms_helper 155648 2 evdi,vboxvideo
drm 364544 5 ttm,evdi,drm_kms_helper,vboxvideo
syscopyarea 16384 3 evdi,drm_kms_helper,vboxvideo
sysfillrect 16384 3 evdi,drm_kms_helper,vboxvideo
sysimgblt 16384 3 evdi,drm_kms_helper,vboxvideo
Si vous n'avez pas de périphérique DisplayLink connecté, il est possible que le module ne soit pas chargé automatiquement dans le noyau. Si elle est attachée, alors devrait être chargé. Vous pouvez essayer Sudo modprobe evdi
. Pour poster une nouvelle question sur les problèmes survenant avec ce pilote après l’installer, je vous recommande d’inclure la sortie complète de lsmod
(c’est-à-dire sans le | grep evdi
) ainsi que uname -a
.