failed to build evdi installing displaylink drivers
You can fix this by either
- upgrading from Ubuntu 14.04 LTS to Ubuntu 16.04 LTS or
- installing the kernel from 16.04 LTS that has been officially backported to 14.04 LTS.
I've tested this with DisplayLink USB Graphics Software for Ubuntu (1.3.54) in VirtualBox virtual machines running the 64-bit versions of 14.04 LTS and 16.04 LTS.
Uninstall (or at least stop using) the kernel you manually installed.
You're currently running the 3.14 kernel you installed in 12.04 before upgrading to 14.04, because 14.04 LTS ships with a 3.13 kernel, and GRUB will automatically list the highest numbered version first and boot to the first-listed entry. You can verify this by running uname -r
. Note the top line in the DisplayLink build log:
DKMS make.log for evdi-1.3.54 for kernel 3.14.0-031400-generic (x86_64)
The build errors you're getting appear specific to the kernel you installed. I am unable to reproduce them with an official Ubuntu kernel.
If you only installed it to get this driver to work, then I recommend uninstalling it before proceeding, though I cannot tell you how to do that because I don't know how you installed it. Although DisplayLink requires a kernel version of 3.14 or higher, you don't need that version specifically (and it is not one of the versions officially provided for Ubuntu 14.04).
I have tested both the following options in virtual machines, and I was able to build and install the DisplayLink driver successfully.
Option 1: Upgrade to 16.04 LTS
You just upgraded from 12.04 LTS to 14.04 LTS. If you have no specific reason you want to stick with 14.04, then you should consider upgrading to 16.04. Not only should that fix this problem, but it will also be supported longer and it has other newer software officially packaged for it.
To upgrade, run:
do-release-upgrade
Omitting sudo
makes it a bit easier to ensure you don't accidentally upgrade to the wrong version. (Another way is to check /etc/update-manager/release-upgrades
has a Prompt=lts
line with no leading #
character.) It should say:
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:
That is, should say xenial
as the release to be upgraded to. Then you can enter your password and perform the upgrade.
Option 2: Install the Backported 4.4 Kernel
However, 14.04 remains supported until April 2019 and there is no general reason not to use it. Furthermore, there are various reasons you might prefer to stick with 14.04. In particular, if you are relying on (or just prefer) Upstart rather than systemd, that may be a reason to stick with 14.04 a while longer.
Ubuntu's LTS releases get kernels officially backported from later Ubuntu releases, to support new hardware and drivers--exactly the situation you are in. The 4.4 kernel from Ubuntu 16.04 LTS is officially backported to 14.04 LTS. One way to install it is simply to run:
sudo apt install linux-generic-lts-xenial
Then reboot.
That was all I had to do to get the DisplayLink driver to build and install without errors. However, my 14.04 system is a virtual machine with no GUI installed.
If this is a desktop system (that is, you are running a graphical desktop environment), then LTSEnablementStack recommends installing some other packages. This might help you avoid a situation where you have to install packages later.
You would run this command instead (and still reboot afterwards):
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
I changed apt-get
to apt
, which produces somewhat more human-readable output. (14.04 has apt
; some earlier releases do not.) The --install-recommends
flag is probably unnecessary since that's the default and you're unlikely to have changed it, but it won't do any harm.
Install the Driver
With an official Ubuntu kernel (with a high enough version number), the installation should succeed. This section is provided mainly for other readers who may not have gotten as far as you did in installing the driver. You (and anyone else who knows how to do the rest of the driver installation) do not have to follow this part yourself.
Install dependencies:
sudo apt update
sudo apt install build-essential linux-headers-generic dkms
After cd
ing to the directory where you have unpacked the DisplayLink USB Graphics Software for Ubuntu 1.3.54.zip
file, run the installer:
sudo ./displaylink-driver-1.3.54.run
It has to build (at least part of) the driver behind the scenes, and on some computers this might be slow, so don't worry if it doesn't finish immediately.
You should see something like this as the output:
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
If you see something like that, and there are no errors, then the installation worked. I suggest rebooting before attempting to use your DisplayLink device, though running sudo modprobe evdi
seems to load the driver successfully even without an intervening reboot.
Troubleshooting
When the driver is loaded into the kernel, the output of lsmod | grep evdi
should be similar to:
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
If you don't have a DisplayLink device attached then the module may not be loaded into the kernel automatically. If it is attached then it should be loaded. You can try sudo modprobe evdi
. For posting a new question about problems that occur with this driver after installing it, I recommend including the full output of lsmod
(i.e., without the | grep evdi
) as well as uname -a
.
Related videos on Youtube
Blaine
Updated on September 18, 2022Comments
-
Blaine over 1 year
So i'm trying to install this driver to enable displaylink. On 12.04 It warned that my kernel was outdated, so I installed the 3.14 kernel. It then passed the kernel check, but failed at building evdi kernel. I then upgraded the whole OS to 14.04, as well as the kernel. The error still shows. My terminal looks like this:
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$
And here is the contents of the log it mentions:
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
-
David Foerster almost 7 yearsDid you install the kernel header files?
-
Eliah Kagan almost 7 years@DavidFoerster The build log shows that headers in
/usr/src/linux-headers-3.14.0-031400-generic
exist and were used. That kernel isn't provided officially for Trusty, even as a backport. It's the one that was installed in the 12.04 system before the release upgrade; its version is higher than for normal Precise and Trusty kernels but lower than for kernels available as official backports from later releases. evdi installs successfully in a 4.4 kernel officially backported from Xenial (which is also, among other reasons, why this question really is on topic).
-
-
Blaine almost 7 yearswow, thank you for the very detailed answer. I'm currently stuck in windows (and will be for several days), but I'll get back to you once I get a chance to try it out!
-
johnhenry almost 7 years@Eliah Kagan I have a very similar problem, but in my case this seems to be due to the fact that I have 16.04.02, while Dispalylink seems to work only on 16.04.
https://askubuntu.com/questions/944663/failed-to-build-evdi-installing-dispalylink-driver
What would you recommend I should do? It seems Dell does not have other software for the DA100 adapter and Ubuntu... -
Eliah Kagan almost 7 years@johnhenry
make.log
may help. You tried to read it after heynnema's request but got "Permission denied". You can usesudo cat /var/lib/dkms/evdi/1.3.54/build/make.log
. Or copy the file and take ownership of the copy:cd ~/Desktop && sudo cp /var/lib/dkms/evdi/1.3.54/build/make.log . && sudo chown $USER: make.log
. Please edit your question to provide it (and any other relevant information). If it's too long to include, you can use paste.ubuntu.com and include a link. -
johnhenry almost 7 years@EliahKagan done! Please see my edited question. Thanks!
-
johnhenry almost 7 years@EliahKagan by the last comment I mean that I have ave updated my question with your request, but the problem still holds...just to clarify.
-
Eliah Kagan almost 7 years@johnhenry heynnema mentioned the .run installer showed 16.04.2, but I don't think that's conclusive. The build isn't targeting the latest kernel officially available for 16.04. Maybe you're on a non-HWE kernel. Please add output of
lsb_release -a
,uname -a
, andapt list linux-{,headers-}generic\*
, and if you can the filename of the .iso you installed from, to your question. Except new HWE packages, point releases upgrade when you update your system and 16.04.3 is out. -
johnhenry almost 7 years@EliahKagan I have updated my question with the answer to your requests. Unfortunately I canot provide the filename of the .iso I installed from, because my computer (Dell XPS 13 9360) had it already installed as default. Please let me know what your suggestions are to fix this issue, thanks a lot
-
Eliah Kagan almost 7 years@johnhenry That's OK, the .iso wasn't very important. I do suggest mentioning that Ubuntu is preinstalled in the question. You have a non-HWE 4.4 kernel, probably upgraded from a preinstalled 4.4 kernel, so 4.4 is known to work with the machine. 4.10 HWE kernels may work, but I suggest you keep trying to install the driver with a 4.4 kernel first. I've successfully installed it on 16.04 with 4.4 and 4.10 kernels, including 4.4.0-89, which you have, and 4.4.0-91, a recent security update I recommend installing.
-
Eliah Kagan almost 7 years@johnhenry
sudo apt update && sudo apt upgrade
should upgrade it. If the problem was damaged headers this will fix it as you'll getlinux-headers-4.4.0-91
too. I doubt this will fix the build but please reboot, check, and update the question with the new output from running the installer,cat
ingmake.log
, anduname -a
andapt list linux-{,headers-}generic\*
(showing kernel metapackages) as before. Please also give the output ofapt list --installed dkms linux-\*
(showing dkms and installed kernel packages but not just metapackages) andsha256sum displaylink-driver-1.3.54.run
. -
johnhenry almost 7 years@EliahKagan I did everything you told me to do and posted the outputs in my question. Nothing seems to work yet as you foresaw. What do you suggest to do now?
-
Eliah Kagan almost 7 years@johnhenry For some reason, your kernel was not upgraded to 4.4.0-91--you are still on 4.4.0-89. So the next step is to figure out why that is. Since it's reasonably clear your problem is different from the one here--because both the kernel you have and the other kernels available for your system all should work with the DisplayLink driver--I'm going to move over to your question itself to work on this. That way other people who may have valuable insights might be more likely to see it. I'll be commenting there shortly.