failed to build evdi installing displaylink drivers

11,087

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

Share:
11,087

Related videos on Youtube

Blaine
Author by

Blaine

Updated on September 18, 2022

Comments

  • Blaine
    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
      David Foerster almost 7 years
      Did you install the kernel header files?
    • Eliah Kagan
      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
    Blaine almost 7 years
    wow, 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
    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-dispalyli‌​nk-driver What would you recommend I should do? It seems Dell does not have other software for the DA100 adapter and Ubuntu...
  • Eliah Kagan
    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 use sudo 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
    johnhenry almost 7 years
    @EliahKagan done! Please see my edited question. Thanks!
  • johnhenry
    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
    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, and apt 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
    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
    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
    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 get linux-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, cating make.log, and uname -a and apt list linux-{,headers-}generic\* (showing kernel metapackages) as before. Please also give the output of apt list --installed dkms linux-\* (showing dkms and installed kernel packages but not just metapackages) and sha256sum displaylink-driver-1.3.54.run.
  • johnhenry
    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
    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.