web-dev-qa-db-fra.com

n'a pas réussi à construire evdi en installant les pilotes displaylink

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
1
Blaine

Vous pouvez résoudre ce problème soit

  • passer de Ubuntu 14.04 LTS à Ubuntu 16.04 LTS o
  • installer le noyau à partir de 16.04 LTS qui a été officiellement rétroporté à 14.04 LTS.

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.

Désinstallez (ou au moins arrêtez d’utiliser) le noyau que vous avez installé manuellement.

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.

Option 1: mise à niveau vers 16.04 LTS

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.

Option 2: Installer le noyau Backported 4.4

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.

Installer le pilote

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 cding 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.

Dépannage

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.

2
Eliah Kagan