Questa breve guida spiega cos'è il modulo del kernel Linux , come elencare i moduli del kernel attualmente caricati utilizzando lsmod
e come visualizzare le informazioni sul modulo del kernel Linux con modinfo
comando in Linux.
Cos'è il modulo del kernel Linux?
Il kernel Linux è il componente principale di un sistema operativo GNU/Linux. La funzionalità del kernel Linux può essere estesa senza la necessità di riavviare il sistema utilizzando i moduli del kernel . Un modulo del kernel è un pezzo di codice che può essere caricato e scaricato nel kernel su richiesta.
Alcuni esempi di moduli del kernel sono firmware e driver di dispositivo, che consentono al kernel Linux di accedere e controllare l'hardware connesso al sistema. In genere, i moduli del kernel vengono utilizzati per aggiungere supporto per nuovo hardware (come driver di dispositivo) e/o filesystem o per aggiungere chiamate di sistema .
Senza i moduli del kernel, dobbiamo ricostruire e riavviare il kernel ogni volta che vogliamo una nuova funzionalità. Abbiamo anche bisogno di costruire kernel monolitici più grandi e aggiungere nuove funzionalità direttamente nell'immagine del kernel senza moduli del kernel. Con l'aiuto di un modulo del kernel, possiamo semplicemente evitare questi problemi.
I moduli del kernel sono generalmente archiviati in I moduli sono archiviati in /usr/lib/modules/<kernel_release_directory>
.
$ ls /usr/lib/modules/5.11.18-300.fc34.x86_64/
bls.conf modules.builtin.bin modules.symbols
build modules.builtin.modinfo modules.symbols.bin
config modules.dep source
extra modules.dep.bin symvers.gz
kernel modules.devname System.map
modules.alias modules.drm updates
modules.alias.bin modules.modesetting vdso
modules.block modules.networking vmlinuz
modules.builtin modules.order weak-updates
modules.builtin.alias.bin modules.softdep
I moduli del kernel sono indicati con nomi diversi in diversi sistemi operativi. Ad esempio, un modulo del kernel è indicato come modulo caricabile del kernel (kld) in FreeBSD, estensione del kernel (kext) in macOS, modulo di estensione del kernel in AIX, driver in modalità kernel in Windows NT e modulo del kernel scaricabile (DKM) in VxWorks. Sono anche conosciuti come moduli caricabili del kernel (o KLM) e semplicemente come moduli del kernel (KMOD).
Elenca i moduli del kernel Linux usando il comando lsmod
Possiamo visualizzare l'elenco dei moduli del kernel che sono attualmente caricati nel kernel usando lsmod
(elenco moduli) comando come di seguito:
$ lsmod
Risultato di esempio:
Module Size Used by
vhost_net 32768 0
vhost 57344 1 vhost_net
vhost_iotlb 16384 1 vhost
tap 28672 1 vhost_net
tun 57344 1 vhost_net
rfcomm 90112 4
snd_seq_dummy 16384 0
snd_hrtimer 16384 1
xt_CHECKSUM 16384 1
xt_MASQUERADE 20480 3
xt_conntrack 16384 1
ipt_REJECT 16384 2
nf_nat_tftp 16384 0
nf_conntrack_tftp 20480 3 nf_nat_tftp
bridge 290816 0
stp 16384 1 bridge
llc 16384 2 bridge,stp
ccm 20480 6
nft_objref 16384 2
nf_conntrack_netbios_ns 16384 1
nf_conntrack_broadcast 16384 1 nf_conntrack_netbios_ns
nft_fib_inet 16384 1
[...]
Il comando lsmod ottiene i dettagli dei moduli del kernel attualmente caricati dal file /proc/modules
.
Spero che tu abbia un'idea di base di cosa sono i moduli del kernel Linux e come elencare i moduli attualmente caricati nel kernel Linux. Andiamo avanti e vediamo come visualizzare i dettagli di uno specifico modulo del kernel.
Visualizza le informazioni sul modulo del kernel Linux con il comando modinfo
Il modinfo
comando mostra le informazioni dettagliate di un dato modulo del kernel. Per impostazione predefinita, elenca gli attributi di un modulo del kernel sotto forma di fieldname : value
, per una facile lettura.
Per visualizzare le informazioni di un modulo del kernel Linux, ad esempio 88XXau
, che è l'adattatore wireless TP-Link AC600 (Archer T2U Nano) , esegui:
$ modinfo 88XXau
Risultato di esempio:
filename: /lib/modules/5.11.18-300.fc34.x86_64/extra/88XXau.ko.xz
version: v5.6.4.2_35491.20191025
author: Realtek Semiconductor Corp.
description: Realtek Wireless Lan Driver
license: GPL
srcversion: 4EC0EE17404B8E38B323235
alias: usb:v7392pB611ddcdscdpiciscipin
alias: usb:v7392pA813ddcdscdpiciscipin
alias: usb:v7392pA812ddcdscdpiciscipin
alias: usb:v7392pA811ddcdscdpiciscipin
alias: usb:v3823p6249ddcdscdpiciscipin
alias: usb:v2357p0122ddcdscdpiciscipin
alias: usb:v2357p0120ddcdscdpiciscipin
[...]
Non aggiungere un .ko
estensione alla fine del nome del modulo del kernel. Perché i nomi dei moduli del kernel non hanno estensioni, ma i file corrispondenti sì.
Visualizza alcuni dettagli dei moduli del kernel
Quando esegui modinfo senza alcuna opzione, mostra un sacco di informazioni sul modulo del kernel specificato. Puoi restringere il risultato visualizzando solo campi specifici come author
, description
, license
, parm
, depends
e alias
. I seguenti comandi mostrano i dettagli di ogni campo di 88XXau
modulo.
1. Visualizza l'autore del modulo del kernel (fornitore)
Per vedere chi ha scritto un modulo del kernel, usa author
bandiera.
$ modinfo -F author 88XXau
Realtek Semiconductor Corp.
2. Visualizza la descrizione del modulo del kernel
Per stampare la descrizione di un modulo del kernel, usa description
bandiera.
$ modinfo -F description 88XXau
Realtek Wireless Lan Driver
3. Visualizza la licenza del modulo del kernel
Conoscere la licenza di un modulo del kernel può essere utile quando si vuole sapere se firmware e driver sono open o closed source. Alcune distribuzioni Linux possono includere driver non liberi per impostazione predefinita. Puoi verificare se un'unità dispositivo è gratuita o meno controllando la licenza ad essa allegata.
$ modinfo -F license 88XXau
GPL
La maggior parte dei moduli del kernel sono concessi in licenza sotto GPL
(Licenza pubblica GNU). Alcuni moduli possono avere una doppia licenza, ad esempio BSD
e GPL
.
$ modinfo -F license zram Dual BSD/GPL
4. Visualizza i parametri del modulo del kernel
Per visualizzare i parametri di un modulo del kernel, eseguire:
$ modinfo -F parm 88XXau rtw_wireless_mode: (int) rtw_monitor_overwrite_seqnum:Overwrite the sequence number of injected frames (int) rtw_monitor_retransmit:Retransmit injected frames (int) rtw_monitor_disable_1m:Disable default 1Mbps rate for monitor injected frames (int) rtw_ips_mode:The default IPS mode (int) rtw_lps_level:The default LPS level (int) [...]
5. Visualizza le dipendenze dei moduli del kernel
Per visualizzare le dipendenze di un modulo del kernel, esegui:
$ modinfo -F depends 88XXau
cfg80211
Puoi anche usare -a/--author
, -d/--description
, -l/--license
, -p/--parameters
flag per visualizzare i dettagli specifici dei moduli del kernel. Queste sono solo le scorciatoie per il --field
autore, descrizione, licenza e parm della bandiera. Ad esempio, puoi usare -l
o --license
flag per visualizzare la licenza di un modulo del kernel.
$ modinfo -l kvm
Oppure,
$ modinfo --license kvm
I comandi precedenti sono equivalenti al seguente comando:
$ modinfo -F license kvm
Per maggiori dettagli su modinfo
comando, guarda nelle sue pagine man.
$ man modinfo
Spero che questo aiuti.
Lettura correlata:
- Elenca o controlla tutti i kernel Linux installati dalla riga di comando
- Gestisci e monitora i moduli del kernel Linux con Kmon