3

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
2
  • Did you install the kernel header files? Jul 24, 2017 at 7:21
  • 2
    @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). Jul 24, 2017 at 7:54

1 Answer 1

2

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.

11
  • 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!
    – Blaine
    Jul 24, 2017 at 13:13
  • @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...
    – johnhenry
    Aug 10, 2017 at 8:12
  • @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. Aug 10, 2017 at 8:40
  • @EliahKagan done! Please see my edited question. Thanks!
    – johnhenry
    Aug 10, 2017 at 9:18
  • @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.
    – johnhenry
    Aug 10, 2017 at 15:38

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .