El blog de cubells

Construir automàticament amb dkms

Fa poc vaig explicar que tenia problemes de xarxa. No vaig tindre més remei que instal·lar el mòdul propietari de Realtek per evitar talls de connexió.

Però què passa en cada actualització del nucli? Doncs que cal construir el mòdul a mà cada vegada que s'actualitza.

Podem, però, utilitzar dkms per a què, automàticament construïsca el mòdul cada vegada que hi ha un canvi en el nucli.

Com?

En aquest cas es tracta de la versió 8.047.02 del mòdul r8168. M'he baixat el codi font i l'he descomprimit a

$ ls Baixades/r8168-8.047.02/
autorun.sh  log.txt  Makefile  README  src

Cal instal·lar el dkms, per suposat.

$ sudo apt-get install dkms

Creem el directori on posarem el codi font del mòdul:

$ sudo mkdir /usr/src/r8168-8.047.02
$ mv Baixades/r8168-8.047.02/src /usr/src/r8168-8.047.02

Creem un fitxer de configuració per al mòdul que vull construir:

$ cat /usr/src/r8168-8.047.02/dkms.conf
PACKAGE_NAME="r8168"
PACKAGE_VERSION="8.047.02"
BUILT_MODULE_NAME[0]="r8168"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/ethernet/realtek/"
AUTOINSTALL="yes"

I l'afegim al codi del nucli:

$ sudo dkms add r8168/8.047.02

Creating symlink /var/lib/dkms/r8168/8.047.02/source ->
                 /usr/src/r8168-8.047.02

DKMS: add completed.

I l'instal·lem amb:

$ sudo dkms install r8168/8.047.02

Building module:
cleaning build area...
make -j8 KERNELRELEASE=5.0.0-20-generic -C /lib/modules/5.0.0-20-generic/build M=/var/lib/dkms/r8168/8.047.02/build......
cleaning build area...

DKMS: build completed.

r8168.ko:
Running module version sanity check.

Good news! Module version 8.047.02-NAPI for r8168.ko
exactly matches what is already found in kernel 5.0.0-20-generic.
DKMS will not replace this module.
You may override by specifying --force.

depmod...

DKMS: install completed.

Ara ja, cada vegada que hi haja una actualització del nucli, es construirà automàticament el mòdul aquest:

$ modinfo r8168
filename:       /lib/modules/5.0.0-20-generic/kernel/drivers/net/ethernet/realtek/r8168.ko
version:        8.047.02-NAPI
license:        GPL
description:    RealTek RTL-8168 Gigabit Ethernet driver
author:         Realtek and the Linux r8168 crew <netdev@vger.kernel.org>
srcversion:     06C5D472068F6C70BB6C3FD
alias:          pci:v00001186d00004300sv00001186sd00004B10bc*sc*i*
alias:          pci:v000010ECd00002600sv*sd*bc*sc*i*
alias:          pci:v000010ECd00002502sv*sd*bc*sc*i*
alias:          pci:v000010ECd00008161sv*sd*bc*sc*i*
alias:          pci:v000010ECd00008168sv*sd*bc*sc*i*
depends:        
retpoline:      Y
name:           r8168
vermagic:       5.0.0-20-generic SMP mod_unload 
parm:           speed_mode:force phy operation. Deprecated by ethtool (8). (uint)
parm:           duplex_mode:force phy operation. Deprecated by ethtool (8). (uint)
parm:           autoneg_mode:force phy operation. Deprecated by ethtool (8). (uint)
parm:           advertising_mode:force phy operation. Deprecated by ethtool (8). (uint)
parm:           aspm:Enable ASPM. (int)
parm:           s5wol:Enable Shutdown Wake On Lan. (int)
parm:           s5_keep_curr_mac:Enable Shutdown Keep Current MAC Address. (int)
parm:           rx_copybreak:Copy breakpoint for copy-only-tiny-frames (int)
parm:           use_dac:Enable PCI DAC. Unsafe on 32 bit PCI slot. (int)
parm:           timer_count:Timer Interrupt Interval. (int)
parm:           eee_enable:Enable Energy Efficient Ethernet. (int)
parm:           hwoptimize:Enable HW optimization function. (ulong)
parm:           s0_magic_packet:Enable S0 Magic Packet. (int)
parm:           debug:Debug verbosity level (0=none, ..., 16=all) (int)

Sense comentaris encara. Comenta ara