Trying to understand (learn) Kernel and DKMS modules

Loving each day more EnEOS as it allows me to discover a whole new world through the CLI !!!

I have a Dell Lattitude with a RTL8153 interface and the r8152 driver, which works well with the r8152-dkms (from the AUR).

But I prefer to connect with a Dell Hub (or Dock-Station) through the Intel e1000e interface. There is a driver build in, but it’s an old version with a bug (The network disconnect after a while), so I have updated it with the new version, building the e1000e-dkms driver (form the AUR also).
All is good on the LTS Kernel. It was installed and no error (and no disconnection).
But while building the driver, I got an error message saying it could not be installed on the Arch 5.8 Kernel, nor on the Zen Kernel.

So the questions are:

  1. Is it normal behaviour? I mean, the 5.8 been a new Kernel does it only means that all the modules are not yet present and can I assume it may be possible to install this driver in a future version ?

  2. Or do I need to take a specific action to install the DKMS module in the 5.8 kernel and the Zen version ?

For info:

My Network details

Network: Device-1: Intel Cannon Point-LP CNVi [Wireless-AC] driver: iwlwifi v: kernel port: 3000
bus ID: 00:14.3 chip ID: 8086:9df0
IF: wlan0 state: down mac:
Device-2: Intel Ethernet I219-V vendor: Dell driver: e1000e v: 3.8.4-NAPI port: efa0 bus ID: 00:1f.6
chip ID: 8086:15be
IF: eno2 state: down mac:
Device-3: Realtek RTL8153 Gigabit Ethernet Adapter type: USB driver: r8152 bus ID: 2-1.2:5
chip ID: 0bda:8153 serial:
IF: enp0s20f0u1u2 state: up speed: 1000 Mbps duplex: full mac:

And the command dkms status returns the following: (It shows that the e1000e driver was only installed on the LTS kernel.

e1000e, 3.8.4, 5.4.59-1-lts, x86_64: installed (original_module exists)
r8152, 2.13.20200712, 5.4.59-1-lts, x86_64: installed (original_module exists)
r8152, 2.13.20200712, 5.8.2-arch1-1, x86_64: installed (original_module exists)
r8152, 2.13.20200712, 5.8.2-zen1-1-zen, x86_64: installed (original_module exists)

That’s it… thanks for any help on my learning curve :slightly_smiling_face:

Not normal, but sometimes when the latest (currently 5.8) kernel gets a major point release (like 5.8), the first updates to it (5.8.1 and so on) should fix issues with the new kernel series. I can’t guarantee anything, but I think they will resolve this in some future kernel 5.8.x update.

This of course is the reason why some people like to stick with the LTS kernel. The LTS kernel is supported about 6 years according to https://www.kernel.org/category/releases.html, but obviously in Arch it will be changed more often.

You could try that. For some packages it seems to help changing to the dkms version, e.g. with nvidia it seems that the nvidia-dkms is more reliable, and thus we are encouraging nvidia-dkms. But note that almost every package has a different developer and maintainer, so dkms-is-better may not work in all cases.

1 Like

Thanks @manuel, I understand. Could you lead me to the steps to install the DKMS module in the 5.8 Kernel (either a command, a link to a Wiki page, etc… ), so I’ll be on a “safer” side ?

Installing any dkms package should be easy. Install it the same way as any other package.
A package for dkms (like nvidia-dkms) installs the actual dkms package because it is a dependency.
So dkms makes compiling etc. very easy.

1 Like

Well, I did run yay e1000e-dkms and it reinstalled the DKMS module on the TLS Kernel, but gave me (as previously) an error in relation to the other 2 Kernels (Arch and Zen).

First I got this :

(1/1) Remove upgraded DKMS modules
==> dkms remove --no-depmod -m e1000e -v 3.8.4 -k 5.4.59-1-lts
==> Unable to remove module e1000e/3.8.4 for kernel 5.8.2-zen1-1-zen: Not found in dkms status output.
==> Unable to remove module e1000e/3.8.4 for kernel 5.8.2-arch1-1: Not found in dkms status output.
:: Processing package changes…
Error! The module/version combo: e1000e-3.8.4
is not located in the DKMS tree.
error: command failed to execute correctly

Then below, this:

dkms install --no-depmod -m e1000e -v 3.8.4 -k 5.8.2-zen1-1-zen
Error! Bad return status for module build on kernel: 5.8.2-zen1-1-zen (x86_64)
Consult /var/lib/dkms/e1000e/3.8.4/build/make.log for more information.
==> Warning, dkms install --no-depmod -m e1000e -v 3.8.4 -k 5.8.2-zen1-1-zen' returned 10 ==> dkms install --no-depmod -m e1000e -v 3.8.4 -k 5.4.59-1-lts ==> dkms install --no-depmod -m e1000e -v 3.8.4 -k 5.8.2-arch1-1 Error! Bad return status for module build on kernel: 5.8.2-arch1-1 (x86_64) Consult /var/lib/dkms/e1000e/3.8.4/build/make.log for more information. ==> Warning, dkms install --no-depmod -m e1000e -v 3.8.4 -k 5.8.2-arch1-1’ returned 10
==> depmod 5.4.59-1-lts
==> depmod 5.8.2-arch1-1
==> depmod 5.8.2-zen1-1-zen

I have look at /var/lib/dkms/e1000e/3.8.4/build/make.log for more information, but I can’t say I understand the output :upside_down_face:

Here is the output anyway if you want to look at it…

make.log

DKMS make.log for e1000e-3.8.4 for kernel 5.8.2-arch1-1 (x86_64)
Sat 22 Aug 2020 14:44:07 IDT
make: Entering directory ‘/usr/lib/modules/5.8.2-arch1-1/build’
AR /var/lib/dkms/e1000e/3.8.4/build/built-in.a
CC [M] /var/lib/dkms/e1000e/3.8.4/build/netdev.o
CC [M] /var/lib/dkms/e1000e/3.8.4/build/ethtool.o
CC [M] /var/lib/dkms/e1000e/3.8.4/build/ich8lan.o
CC [M] /var/lib/dkms/e1000e/3.8.4/build/mac.o
CC [M] /var/lib/dkms/e1000e/3.8.4/build/nvm.o
CC [M] /var/lib/dkms/e1000e/3.8.4/build/phy.o
CC [M] /var/lib/dkms/e1000e/3.8.4/build/manage.o
CC [M] /var/lib/dkms/e1000e/3.8.4/build/80003es2lan.o
In file included from /var/lib/dkms/e1000e/3.8.4/build/e1000.h:14,
from /var/lib/dkms/e1000e/3.8.4/build/ich8lan.c:41:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_data’:
In file included from /var/lib/dkms/e1000e/3.8.4/build/e1000.h:14,
from /var/lib/dkms/e1000e/3.8.4/build/mac.c:4:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_data’:
In file included from /var/lib/dkms/e1000e/3.8.4/build/e1000.h:14,
from /var/lib/dkms/e1000e/3.8.4/build/netdev.c:30:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_data’:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6696:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6696 | return umem->pages[addr >> PAGE_SHIFT].addr + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6696:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6696 | return umem->pages[addr >> PAGE_SHIFT].addr + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_dma’:
In file included from /var/lib/dkms/e1000e/3.8.4/build/e1000.h:14,
from /var/lib/dkms/e1000e/3.8.4/build/nvm.c:4:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_data’:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_dma’:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6704:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6704 | return umem->pages[addr >> PAGE_SHIFT].dma + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6704:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6704 | return umem->pages[addr >> PAGE_SHIFT].dma + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6696:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6696 | return umem->pages[addr >> PAGE_SHIFT].addr + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_dma’:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6704:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6704 | return umem->pages[addr >> PAGE_SHIFT].dma + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6696:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6696 | return umem->pages[addr >> PAGE_SHIFT].addr + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_dma’:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6704:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6704 | return umem->pages[addr >> PAGE_SHIFT].dma + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
In file included from /var/lib/dkms/e1000e/3.8.4/build/e1000.h:14,
from /var/lib/dkms/e1000e/3.8.4/build/phy.c:4:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_data’:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6696:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6696 | return umem->pages[addr >> PAGE_SHIFT].addr + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_dma’:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6704:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6704 | return umem->pages[addr >> PAGE_SHIFT].dma + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
In file included from /var/lib/dkms/e1000e/3.8.4/build/e1000.h:14,
from /var/lib/dkms/e1000e/3.8.4/build/ethtool.c:15:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_data’:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6696:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6696 | return umem->pages[addr >> PAGE_SHIFT].addr + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_dma’:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6704:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6704 | return umem->pages[addr >> PAGE_SHIFT].dma + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
make[1]: *** [scripts/Makefile.build:281: /var/lib/dkms/e1000e/3.8.4/build/nvm.o] Error 1
make[1]: *** Waiting for unfinished jobs…
In file included from /var/lib/dkms/e1000e/3.8.4/build/e1000.h:14,
from /var/lib/dkms/e1000e/3.8.4/build/manage.c:4:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_data’:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6696:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6696 | return umem->pages[addr >> PAGE_SHIFT].addr + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_dma’:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6704:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6704 | return umem->pages[addr >> PAGE_SHIFT].dma + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
make[1]: *** [scripts/Makefile.build:281: /var/lib/dkms/e1000e/3.8.4/build/mac.o] Error 1
In file included from /var/lib/dkms/e1000e/3.8.4/build/e1000.h:14,
from /var/lib/dkms/e1000e/3.8.4/build/80003es2lan.c:8:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_data’:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6696:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6696 | return umem->pages[addr >> PAGE_SHIFT].addr + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h: In function ‘__kc_xdp_umem_get_dma’:
/var/lib/dkms/e1000e/3.8.4/build/kcompat.h:6704:15: error: ‘struct xdp_umem’ has no member named ‘pages’; did you mean ‘pgs’?
6704 | return umem->pages[addr >> PAGE_SHIFT].dma + (addr & (PAGE_SIZE - 1));
| ^~~~~
| pgs
/var/lib/dkms/e1000e/3.8.4/build/netdev.c: In function ‘e1000_configure_rx’:
/var/lib/dkms/e1000e/3.8.4/build/netdev.c:3714:3: error: implicit declaration of function ‘pm_qos_update_request’; did you mean ‘freq_qos_update_request’? [-Werror=implicit-function-declaration]
3714 | pm_qos_update_request(&adapter->pm_qos_req, lat);
| ^~~~~~~~~~~~~~~~~~~~~
| freq_qos_update_request
make[1]: *** [scripts/Makefile.build:281: /var/lib/dkms/e1000e/3.8.4/build/manage.o] Error 1
make[1]: *** [scripts/Makefile.build:281: /var/lib/dkms/e1000e/3.8.4/build/ethtool.o] Error 1
/var/lib/dkms/e1000e/3.8.4/build/netdev.c: In function ‘e1000e_open’:
/var/lib/dkms/e1000e/3.8.4/build/netdev.c:5189:2: error: implicit declaration of function ‘pm_qos_add_request’; did you mean ‘freq_qos_add_request’? [-Werror=implicit-function-declaration]
5189 | pm_qos_add_request(&adapter->pm_qos_req, PM_QOS_CPU_DMA_LATENCY,
| ^~~~~~~~~~~~~~~~~~
| freq_qos_add_request
make[1]: *** [scripts/Makefile.build:281: /var/lib/dkms/e1000e/3.8.4/build/phy.o] Error 1
make[1]: *** [scripts/Makefile.build:281: /var/lib/dkms/e1000e/3.8.4/build/80003es2lan.o] Error 1
make[1]: *** [scripts/Makefile.build:281: /var/lib/dkms/e1000e/3.8.4/build/ich8lan.o] Error 1
/var/lib/dkms/e1000e/3.8.4/build/netdev.c:5189:43: error: ‘PM_QOS_CPU_DMA_LATENCY’ undeclared (first use in this function)
5189 | pm_qos_add_request(&adapter->pm_qos_req, PM_QOS_CPU_DMA_LATENCY,
| ^~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/e1000e/3.8.4/build/netdev.c:5189:43: note: each undeclared identifier is reported only once for each function it appears in
/var/lib/dkms/e1000e/3.8.4/build/netdev.c:5243:2: error: implicit declaration of function ‘pm_qos_remove_request’; did you mean ‘freq_qos_remove_request’? [-Werror=implicit-function-declaration]
5243 | pm_qos_remove_request(&adapter->pm_qos_req);
| ^~~~~~~~~~~~~~~~~~~~~
| freq_qos_remove_request
/var/lib/dkms/e1000e/3.8.4/build/netdev.c: In function ‘e1000_io_slot_reset’:
/var/lib/dkms/e1000e/3.8.4/build/netdev.c:8100:2: error: implicit declaration of function ‘pci_cleanup_aer_uncorrect_error_status’ [-Werror=implicit-function-declaration]
8100 | pci_cleanup_aer_uncorrect_error_status(pdev);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
make[1]: *** [scripts/Makefile.build:281: /var/lib/dkms/e1000e/3.8.4/build/netdev.o] Error 1
make: *** [Makefile:1756: /var/lib/dkms/e1000e/3.8.4/build] Error 2
make: Leaving directory ‘/usr/lib/modules/5.8.2-arch1-1/build’

Changes in the kernel can break dkms modules. When this happens, you need to wait for the dkms module to be updated to support the newer kernel.

According to the AUR page, it was broken by this commit

2 Likes

Got it, thanks to both, @dalto and @manuel

1 Like

Note that you need to have kernel headers installed, e.g. linux-zen-headers. But the new 5.8 kernel seems to have issues.

Yes, I have them installed :wink:. Seems I need to way for an updated version of the DKMS package anyway.

Even linux isn’t perfect… :wink: :rofl:

Which is great, because those who believe they have reach perfection won’t evolve. Linux can evolve (and us with it) :slightly_smiling_face:

1 Like

Also, it shows that linux is under constant development. So it is getting better all the time! :smile:

1 Like