автоматическая сборка модулей ядра (DKMS)

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: автоматическая сборка модулей ядра (DKMS)

Непрочитанное сообщение Olej » 19 фев 2023, 07:38

Olej писал(а):
08 авг 2022, 09:36
Так мы смотрим что у нас установлено под контролем DKMS.
И теперь, самое время - почистить то, что мы насорили в системе, экспериментируя с DKMS...
- Деинсталлировать модуль из системы:

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples$ sudo dkms uninstall -m hello_printk -v 3.1

-------- Uninstall Beginning --------
Module:  hello_printk
Version: 3.1
Kernel:  5.4.0-122-generic (x86_64)
-------------------------------------

Status: Before uninstall, this module version was ACTIVE on this kernel.

hello_printk.ko:
 - Uninstallation
   - Deleting from: /lib/modules/5.4.0-122-generic/kernel/lib/hello_printk//
 - Original module
   - No original module was found for this module on this kernel.
   - Use the dkms install command to reinstall any previous module version.

depmod...

DKMS: uninstall completed.


olej@R420:~/2022/own.BOOKs/BHV.kernel/examples$ ls -l /lib/modules/`uname -r`/kernel/lib/hello_printk
ls: невозможно получить доступ к '/lib/modules/5.4.0-122-generic/kernel/lib/hello_printk': Нет такого файла или каталога
- Убрать модуль из-под контроля DKMS:

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples$ sudo dkms remove -m hello_printk -v 3.1
Error! Invalid number of parameters passed.
Usage: remove <module>/<module-version> --all
   or: remove <module>/<module-version> -k <kernel-version>

Не так!
:oops:
А вот так:

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples$ sudo dkms remove hello_printk/3.1 --all

-------- Uninstall Beginning --------
Module:  hello_printk
Version: 3.1
Kernel:  5.4.0-122-generic (x86_64)
-------------------------------------

Status: This module version was INACTIVE for this kernel.
depmod...

DKMS: uninstall completed.

------------------------------
Deleting module version: 3.1
completely from the DKMS tree.
------------------------------
Done.
И проверяем:

Код: Выделить всё

olej@R420:~/2022/own.BOOKs/BHV.kernel/examples$ dkms status
virtualbox, 6.1.34, 5.4.0-121-generic, x86_64: installed
virtualbox, 6.1.34, 5.4.0-122-generic, x86_64: installed

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

автоматическая сборка модулей ядра (DKMS)

Непрочитанное сообщение Olej » 31 янв 2024, 00:02

Ещё раз понадобился dkms...
В дополнение:
1). во многих (во всех?) дистрибутивах команда dkms не установлена по умолчанию, её, и другие сопутствующие инструменты, кому что надо, нужно устанавливать явно вручную:

Код: Выделить всё

olej@esprimop420:~$ cat /etc/debian_version 
12.4

Код: Выделить всё

olej@esprimop420:~$ aptitude search dkms 
p   acpi-call-dkms                                          - Kernel module that enables you to call ACPI methods               
p   adv-17v35x-dkms                                         - dkms driver sources for Advantech PCI/PCIe ACOM Series adapters   
p   apfs-dkms                                               - APFS module for linux, with experimental write support            
p   bbswitch-dkms                                           - Interface for toggling the power on NVIDIA Optimus video cards (dk
p   broadcom-sta-dkms                                       - dkms source for the Broadcom STA Wireless driver                  
p   dahdi-dkms                                              - DAHDI telephony interface (dkms kernel driver)                    
p   ddcci-dkms                                              - драйвер DDC/CI                                                    
p   dh-dkms                                                 - debhelper addon for the Dynamic Kernel Module System (DKMS)       
v   dh-sequence-dkms                                        -                                                                   
p   digimend-dkms                                           - Collection of graphics tablet drivers by DIGImend project         
p   dkms                                                    - Dynamic Kernel Module System (DKMS)                               
v   dkms-autopkgtest                                        -                                                                   
p   dm-writeboost-dkms                                      - log-structured caching for Linux                                  
p   dpdk-kmods-dkms                                         - Data Plane Development Kit (dkms)                                 
p   evdi-dkms                                               - Extensible Virtual Display Interface driver kernel module         
p   falcosecurity-scap-dkms                                 - Kernel driver for Falco and Sysdig                                
p   gost-crypto-dkms                                        - Linux kernel modules implementing GOST cryptography               
p   iptables-netflow-dkms                                   - iptables target which generates netflows                          
p   jool-dkms                                               - kernel-based SIIT and NAT64 (IP/ICMP translation)                 
p   langford-dkms                                           - Kernel drivers for the Per Vices Noctar IQ demodulator board      
p   librem-ec-acpi-dkms                                     - dkms driver sources for EC ACPI in Purism Librem devices          
p   lime-forensics-dkms                                     - kernel module to memory dump (DKMS)                               
p   lttng-modules-dkms                                      - Linux Trace Toolkit (LTTng) kernel modules (DKMS)                 
p   nat-rtsp-dkms                                           - Connection tracking and NAT support for RTSP                      
p   nvidia-fs-dkms                                          - NVIDIA file-system - nvidia-fs.ko kernel driver                   
p   nvidia-kernel-dkms                                      - NVIDIA binary kernel module DKMS source                           
v   nvidia-kernel-dkms-any                                  -                                                                   
p   nvidia-open-kernel-dkms                                 - NVIDIA open kernel module DKMS source                             
v   nvidia-open-kernel-dkms-any                             -                                                                   
p   nvidia-tesla-470-kernel-dkms                            - NVIDIA binary kernel module DKMS source (Tesla 470 version)       
p   nvidia-tesla-kernel-dkms                                - NVIDIA binary kernel module DKMS source (Tesla version)           
p   openafs-modules-dkms                                    - AFS distributed filesystem kernel module DKMS source              
p   openrazer-driver-dkms                                   - OpenRazer peripheral drivers (DKMS)                               
v   openrazer-kernel-modules-dkms                           -                                                                   
p   openvpn-dco-dkms                                        - DCO (Data-Channel Offload) kernel module for OpenVPN)             
p   r8125-dkms                                              - dkms source for the r8125 network driver                          
p   r8168-dkms                                              - dkms source for the r8168 network driver                          
p   rapiddisk-dkms                                          - Linux RAM Drive and Caching kernel modules (DKMS)                 
p   rtpengine-kernel-dkms                                   - IPtables kernel module for the NGCP media proxy - DKMS            
p   tp-smapi-dkms                                           - ThinkPad hardware/firmware access modules source - dkms version   
p   v4l2loopback-dkms                                       - Source for the v4l2loopback driver (DKMS)                         
p   vpoll-dkms                                              - vpoll device: generate events for poll/select/ppoll/pselect/epoll 
p   west-chamber-dkms                                       - iptable extension for bypassing content filtering firewall (dkms) 
p   xtables-addons-dkms                                     - Additional targets and matches for iptables [sources for DKMS]    
p   xtrx-dkms                                               - XTRX PCI driver for linux                                         
p   zfs-dkms                                                - OpenZFS filesystem kernel modules for Linux                       

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

автоматическая сборка модулей ядра (DKMS)

Непрочитанное сообщение Olej » 31 янв 2024, 00:06

Olej писал(а):
31 янв 2024, 00:02
В дополнение:
2). В разных дистрибутивах под контролем DKMS системы сборки можем видеть совершенно разные модули.

Код: Выделить всё

olej@R420:~$ dkms
Usage: /usr/sbin/dkms [action] [options]
  [action]  = { add | remove | build | install | uninstall | match | autoinstall | mkdriverdisk |
                mktarball | ldtarball | mkrpm | mkkmp | mkdeb | mkdsc | mkbmdeb | status }
  [options] = [-m module] [-v module-version] [-k kernel-version] [-a arch]
              [-d distro] [-c dkms.conf-location] [-q] [--force] [--force-version-override] [--all]
              [--templatekernel=kernel] [--directive='cli-directive=cli-value']
              [--config=kernel-.config-location] [--archive=tarball-location]
              [--kernelsourcedir=source-location] [--no-prepare-kernel] [--no-initrd]
              [--binaries-only] [--source-only] [-r release (SuSE)] [--verbose]
              [--size] [--spec=specfile] [--media=floppy|iso|tar] [--legacy-postinst=0|1]
              [--no-depmod] [-j number] [--version]
Error! No action was specified.
- Mint 21.3:

Код: Выделить всё

olej@R420:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Linuxmint
Description:	Linux Mint 21.3
Release:	21.3
Codename:	virginia

Код: Выделить всё

olej@R420:~$ dkms status
virtualbox/6.1.48, 5.15.0-91-generic, x86_64: installed
virtualbox/6.1.48, 5.15.0-92-generic, x86_64: installed
- antiX 21, 32-бит:

Код: Выделить всё

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 11 (bullseye)
Release:	11
Codename:	bullseye

Код: Выделить всё

$ dkms status
broadcom-sta, 6.30.223.271, 4.9.0-279-antix.1-486-smp, i686: installed
exfat, 5.9: added
P.S. Любопытно, если детальнее разбираться, что отдельные модули отмечены как: installed, added ... что откуда берётся?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

автоматическая сборка модулей ядра (DKMS)

Непрочитанное сообщение Olej » 31 янв 2024, 00:23

Olej писал(а):
23 сен 2015, 14:27
Вот публикация-обзор: Автоматическая сборка модулей ядра при помощи DKMS
Это очень старая публикация...
Из более свежих:
Что такое DKMS в Linux1 мин для чтения
06.03.2022
Вот выдержка из определения DKMS, которую мы нашли здесь :
«DKMS — это инфраструктура, в которой исходный код драйвера устройства может находиться за пределами дерева исходного кода ядра, что упрощает пересборку модулей при обновлении ядра».
Это тоже про создание своих модулей... но довольно внятно.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

автоматическая сборка модулей ядра (DKMS)

Непрочитанное сообщение Olej » 31 янв 2024, 11:55

Характерно как это работает "под капотом" при регулярных обновлениях пакетов системы и версий ядра (это из моей работающей системы):

Код: Выделить всё

olej@R420:~$ dkms status
virtualbox/6.1.48, 5.15.0-91-generic, x86_64: installed
virtualbox/6.1.48, 5.15.0-92-generic, x86_64: installed

Код: Выделить всё

olej@R420:~$ ls -l /boot | grep linuz
lrwxrwxrwx 1 root root        25 янв 25 10:06 vmlinuz -> vmlinuz-5.15.0-92-generic
-rw------- 1 root root  11615272 ноя 14 12:49 vmlinuz-5.15.0-91-generic
-rw------- 1 root root  11614792 янв 10 11:13 vmlinuz-5.15.0-92-generic
lrwxrwxrwx 1 root root        25 янв 25 10:06 vmlinuz.old -> vmlinuz-5.15.0-91-generic
Olej писал(а):
31 янв 2024, 00:23
Что такое DKMS в Linux1 мин для чтения
Команда выглядит так

Код: Выделить всё

dkms команда -m имя-модуля -k имя-ядра -v версия-модулей
Если нужны подробности, как всегда, маны рулят. Если нам нужно имя ядра, с которым запущена система сейчас, то в этом всегда поможет uname с опцией -r.
Ставим модули:

Код: Выделить всё

dkms install -m virtualbox-guest -k $(uname -r) -v 4.1.18
Also, если нужно собрать все что нужно для текущего ядра, удобнее вбить

Код: Выделить всё

dkms autoinstall -k $(uname -r)

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость