- La ricerca con “/” in menuconfig rivela percorsi, dipendenze e lo stato di ciascun simbolo.
- Inizia con un file .config funzionante e aggiornalo utilizzando oldconfig/olddefconfig o localmodconfig.
- Compilare e installare in modo sicuro: modules_install, initramfs e GRUB update.
- Evita gli errori tipici (al di fuori dell'albero del kernel, toolchain miste, dipendenze nascoste).
Se stai cercando di capire come cercare le configurazioni in `make menuconfig` e preparare il kernel per il tuo sistema, ecco una guida completa e pratica. Partiamo dalle basi per evitare che ti perda tra menu, simboli e dipendenze, e concludiamo con la compilazione e l'installazione, inclusi suggerimenti per Gentoo, Debian e derivate.
L'obiettivo è quello di consentirti di navigare con facilità nel configuratore del kernel, individuare qualsiasi opzione utilizzando la funzione di ricerca, comprendere i formati dei simboli e le loro dipendenze ed evitare errori comuni durante la compilazione e l'installazione. Tutto ciò viene illustrato con esempi concreti di driver (rete, Wi-Fi, audio, video, fotocamere, touchscreen), consigli sull'utilizzo di container come Docker e importanti avvertenze su Kbuild e le sue toolchain.
Che cos'è `make menuconfig` e a cosa serve?
Il set di strumenti del kernel include diverse interfacce di configurazione, tra cui `make menuconfig` , una delle più popolari grazie alla sua interfaccia testuale basata su ncurses. Permette di abilitare le funzionalità come integrate nel kernel (Y), come modulo (M) o disabilitate (N), nonché di navigare tra categorie e sottomenu utilizzando la tastiera.
Prima di iniziare, è consigliabile familiarizzare con l' hardware per evitare di disabilitare componenti essenziali. Comandi come lspci, lspci -k, dmesg o un semplice lsmod per visualizzare i moduli caricati vi aiuteranno a identificare i driver necessari. È buona norma copiare la configurazione corrente nella cartella "sources" e utilizzarla come base.
Una tipica preparazione prevede di andare al tuo albero sorgente (ad esempio, in /usr/src/linux o la versione specifica che stai utilizzando) e copia il file del kernel in esecuzione: cp -v /boot/config-$(uname -r) .configCon questa base puoi lanciare make menuconfig e iniziare a modificare le opzioni senza partire da zero.
L'interfaccia include categorie come Driver di dispositivo, File system, Supporto di rete e CPU/virtualizzazione. Sposta il cursore con i tasti freccia, passa da un pulsante all'altro con Tab e attiva/disattiva lo stato di un'opzione con la barra spaziatrice o i tasti Y, M e N. Ogni elemento include in genere una guida contestuale accessibile con H o il pulsante Guida.
Cerca le opzioni all'interno di menuconfig (simboli, percorsi e dipendenze)
La funzione di ricerca integrata è fondamentale per evitare confusione. Premere / (barra in avanti) all'interno di menuconfig e immettere il nome del simbolo (ad esempio, BT_HCIBTUSB o IPVLANo una parola chiave dal testo del prompt. Il risultato mostra il simbolo (CONFIG_…), la sua descrizione, la sua posizione nel menu, le sue dipendenze e dove è definito.
Interpreta attentamente i risultati: vedrai sezioni come "Posizione" (percorso del menu), "Dipende da" (condizioni che devono essere soddisfatte) e "Seleziona" (elementi che questa opzione attiva). Se un'opzione è nascosta, è probabile che manchi una dipendenza ; abilitala prima seguendo i risultati della ricerca.
Una volta individuata l'opzione, segui il percorso indicato in "Posizione" per raggiungerla. Se viene offerta come integrato () O modulo (<M>Scegli quello che più ti si addice. I moduli sono più flessibili, ma alcune funzionalità critiche (ad esempio, controller del disco di root o file system per il Boot) è consigliabile integrarli.
La sezione di aiuto (H o Help) è utile: spiega lo scopo del driver, la sua stabilità e spesso suggerisce se è meglio attivarlo come modulo o come driver integrato. Etichette come (NEW), (EXPERIMENTAL), (DEPRECATED) o (OBSOLETE) indicano lo stato di ciascuna opzione.
Navigazione e simboli: cosa significano Y/M/N e notazione del menu
Le voci del configuratore utilizzano notazioni visive per indicarne lo stato. Vedrai ` &` quando l'elemento può essere disabilitato o abilitato in modo monolitico; e `< >`, `<M>`, `<*>` quando può essere compilato anche come modulo. Ogni pressione della barra spaziatrice (o di Y/M/N) consente di scorrere tra i diversi stati consentiti.
È anche frequente vedere {M} o {*} quando non è possibile disabilitare completamente un'opzione (a causa di dipendenze a monte), e formati come -M- o -*- che indicano che lo stato è imposto da un'altra opzione. In tal caso, utilizza la funzione di ricerca e la guida per determinare quale dipendenza devi abilitare o disabilitare.
Per spostarsi rapidamente, i tasti dalla A alla Z consentono di passare alla riga successiva contenente la lettera corrispondente in grassetto. La barra spaziatrice attiva/disattiva lo stato, il tasto Tab permette di scorrere i pulsanti (Seleziona, Esci, Guida, Salva) e il tasto Invio consente di accedere ai sottomenu. Questa serie di scorciatoie da tastiera velocizza notevolmente il lavoro.
Al termine, salva con Salva. Il file .config verrà posizionato nella directory sources; se esiste già, la versione precedente verrà rinominata in .config.old , il che è molto utile per confrontare le modifiche o ripristinare rapidamente una versione precedente.
Preparare l'albero sorgente: riutilizzare e aggiornare il file .config
L'approccio più efficiente è partire da un configurazione nota che già funzionaCopiare il file .config corrente da /boot come menzionato e aggiornarlo alla nuova versione con make oldconfig (ti chiederà aggiornamenti), o più velocemente con make olddefconfig (Accetta i valori predefiniti per la nuova versione senza chiedertelo.) Entrambi gli approcci consentono di risparmiare tempo durante la migrazione tra le versioni.
Un'altra opzione molto pratica è `make localmodconfig` , che genera una configurazione basata sui moduli attualmente caricati (quelli che `lsmod` rileva). È ideale per ottimizzare le prestazioni in base all'hardware in uso, anche se, se si compila per una macchina diversa, sarà necessario selezionare manualmente le opzioni aggiuntive.
Se devi tornare al punto di partenza, make defconfig Genera la configurazione predefinita per la tua architettura. E se vuoi vedere le alternative frontend, oltre a menuconfig ci sono crea nconfig (incursioni moderne), crea xconfig (Qt) o crea gconfig (GTK), utile se si preferisce un'interfaccia grafica.
In Gentoo, è importante assicurarsi che il collegamento /usr/src/linux indicare le fonti corrette con eselect kernel list y eselect kernel setUtilizzando kernel di distribuzione, si otterranno configurazioni predefinite sicure, riducendo i rischi sui sistemi critici.
Compilazione e installazione: comandi sicuri e best practice
Dopo aver salvato il file .config, avviare la compilazione con make -j$(nproc) usare tutti i core della CPUA seconda dell'hardware e del numero di opzioni selezionate, il processo può durare da decine di minuti a più di un'ora.
Se hai abilitato funzionalità come i moduli, installali in seguito con make modules_installQuesto copierà i moduli in /lib/modules/$(versione). Poi, make install Collocherà il kernel e i file associati in /boot e, in molte distribuzioni, aggiornerà automaticamente la voce del boot manager.
Per generare l'initramfs (necessario quando si utilizzano determinati moduli, ad esempio, i controller di immagazzinamento o ZFS/NVIDIA), in Gentoo puoi usare genkernel –installa initramfse in altri ambienti strumenti come dracut o update-initramfs. Non dimenticare aggiorna GRUB se il tuo sistema di distribuzione non lo fa automaticamente.
In Debian e derivati è comune eseguire update-initramfs -u y aggiorna GRUB (ad esempio, con update-grub) O grub-mkconfig -o /boot/grub/grub.cfgNei sistemi con più kernel, mantenere nomi distinti (ad esempio, aggiungendo un'etichetta a EXTRAVERSION) aiuta a non sovrascrivere le versioni stabili di cui hai ancora bisogno.
In Debian e derivati è comune eseguire update-initramfs -u y update-grub o grub-mkconfig -o /boot/grub/grub.cfgNei sistemi con più kernel, mantenere nomi distinti (ad esempio, aggiungendo un'etichetta a EXTRAVERSION) aiuta a non sovrascrivere le versioni stabili di cui hai ancora bisogno.
Attivare i driver comuni: dove trovarli nel menu
- Per le schede di rete Ethernet: vai a Driver di dispositivo > Supporto dispositivi di rete > Supporto driver Ethernet e scegli il driver del chipset corrispondente. Puoi integrarlo o lasciarlo come modulo separato se non è essenziale per l'avvio.
- Per Wi-Fi: controlla Driver di dispositivo > Supporto dispositivi di rete > LAN wireless e contrassegna il driver specifico (Atheros, Intel(Broadcom, ecc.). Spesso è pratico compilarlo come modulo per facilitare gli aggiornamenti o i test.
- Grafica: inserisci Driver di dispositivo > Supporto grafico. Per NVIDIA Con GPU Nouveau o AMD con amdgpu, verifica il supporto corrispondente; sui sistemi ibridi, controlla le opzioni di commutazione. È consigliabile leggere la documentazione di supporto di ciascun driver per decidere tra un modulo o una scheda grafica integrata.
- Suono: passa attraverso Driver di dispositivo > Supporto scheda audio > Avanzate Linux Architettura del suono (ALSA)Scegli il driver specifico per la tua scheda e abilita il supporto ALSA generale. In caso di dubbi, lasciarlo come modulo offre maggiore flessibilità.
- Webcam: accesso Driver di dispositivo > Supporto multimediale, abilita “Fotocamere/video grabber” e in “Media USB "Adattatori" attivi Classe video USB (UVC) se la tua webcam è conforme allo standard UVC.
- Touchscreen: Entra Driver di dispositivo > Supporto HID > Driver HID speciali e consente HID Multitouch per i comuni pannelli multi-touch.
Filesystem, sicurezza e virtualizzazione: scelte chiave
Nella sezione File system , è possibile abilitare EXT4 (con crittografia se necessario), XFS, Btrfs, NTFS , VFAT/EXFAT, ISO/UDF e file system di rete come NFS o CIFS. Per il file system root di avvio, è consigliabile integrarlo nel kernel per evitare di dipendere da moduli presenti nell'initramfs.
In termini di sicurezza, si possono valutare opzioni come SELinux , le chiavi del kernel (KEYS) o tecnologie di integrità come EVM. Alcune di queste funzionalità potrebbero influire sulle prestazioni, ma offrono ulteriori livelli di protezione in ambienti sensibili.
La sezione Virtualizzazione include KVM e altri elementi necessari per gli hypervisor. Sulle CPU moderne, l'abilitazione di KVM e dei flag specifici Intel/AMD è solitamente banale e molto vantaggiosa per le macchine virtuali.
Nell'API crittografica , è possibile abilitare gli algoritmi accelerati dalla CPU (SSE2/SSSE3/AVX/AVX2) se l'hardware li supporta. Ciò velocizza la crittografia, la compressione e diverse operazioni di protocollo.
Kernel per Docker e orchestratori: opzioni essenziali
Se si prevede di eseguire container (Docker, Docker Swarm, ecc.), assicurarsi di abilitare namespace e cgroup . Le opzioni più comuni includono: CONFIG_NAMESPACES, CONFIG_NET_NS, CONFIG_PID_NS, CONFIG_IPC_NS, CONFIG_UTS_NS e CONFIG_CGROUPS con i relativi sottocomponenti (CPUACCT, DEVICE, FREEZER, SCHED, CPUSETS, MEMCG).
Per le reti container, CONFIG_VETH (ethernet virtuale), bridge e netfilter sono elementi chiave. Alcuni esempi includono: CONFIG_BRIDGE, CONFIG_BRIDGE_NETFILTER, CONFIG_NETFILTER_XT_MATCH_CONNTRACK, CONFIG_NETFILTER_XT_MATCH_ADDRTYPE, CONFIG_NETFILTER_XT_MATCH_IPVS, CONFIG_NF_NAT e target come CONFIG_IP_NF_TARGET_MASQUERADE . Molte di queste opzioni possono essere compilate come moduli.
Il driver CONFIG_IPVLAN è comunemente utilizzato in scenari di rete avanzati per container. In caso di dubbi, utilizzare la funzione di ricerca con "/" e verificare le dipendenze. La compilazione come modulo consente di caricarlo solo quando necessario.
Esiste uno script molto diffuso per verificare la compatibilità del file .config con Docker (check-config.sh). Dopo avergli concesso i permessi e avergli indicato il percorso del file .config , ti mostrerà cosa manca per un'esperienza completa con i container.
Kbuild e toolchain: avvisi importanti
Il sistema di compilazione del kernel (Kbuild) consente di parametrizzare la compilazione con variabili d'ambiente. Ad esempio, LLVM=1 Compilare con Clang/LLVM. Ma attenzione: non mescolare strumenti GNU con LLVM (ad esempio, CC=gcc con LD=ld.lld), Perché Romperai la build in modi che non sono affatto ovvi.
Se si desidera compilare interamente con LLVM, definire LLVM=1 o utilizzare CC=clang e il resto delle binutils coerenti (ar, nm, ld, ecc.). Controlla sempre la documentazione del kernel che stai utilizzando, perché alcuni flag o ottimizzazioni aggressive potrebbero non essere consigliati in produzione.
Nei rami molto vecchi (come 2.4) passaggi come fare dep o rendere pulito prima di costruire; al giorno d'oggi non è solitamente necessario, ma se si proviene da configurazioni precedenti problematiche, make mrproper Questo riporta l'albero a uno stato pulito. Esegui un backup del file .config prima di pulirlo.
Per distinguere i kernel personalizzati, molti amministratori aggiungono un tag al file EXTRAVERSION (Makefile) o utilizzano nomi di immagine univoci. Questo impedisce di sovrascrivere accidentalmente il kernel stabile con cui si avvia il sistema quotidianamente.
"make: *** Nessuna regola per impostare il target come 'menuconfig'. Stop." Perché succede questo?
Questo errore si verifica quando si esegue `make menuconfig` al di fuori della directory dei sorgenti del kernel o in un progetto che non include l'infrastruttura Kconfig/mconf. Il target "menuconfig" è fornito dal Makefile del kernel insieme agli script corrispondenti; se non ci si trova in quella directory, questa regola non esiste.
Soluzioni tipiche: Assicurati di essere in /usr/src/linux (o nella cartella della versione decompressa) e che sia presente un Makefile del kernel con il target "menuconfig". Se vuoi usare Kconfig in un piccolo progetto personale (ad esempio, un progetto "hello-world" che usa Kconfig), devi includere gli script/strumenti kconfig (o usare pacchetti come kconfig-frontends) e un Makefile che richiami correttamente mconf/nconf. Senza questa infrastruttura, il comando non saprà cosa fare.
In conclusione: menuconfig fa parte del kernel ; non confondetelo con un Makefile generico. Per sperimentare con Kconfig in un progetto minimale, includete le dipendenze appropriate oppure sviluppate il vostro flusso di lavoro utilizzando le utilità Kconfig compilate separatamente.
Fonti di download: mainline, stable, longterm e linux-next
È possibile ottenere il kernel tramite il gestore di pacchetti della propria distribuzione o dal sito web ufficiale. Su kernel.org sono disponibili i rami Mainline (con le funzionalità più recenti e le patch aggiornate), Stable (testato per l'uso quotidiano) e Longterm (LTS, ideale per le aziende o per chi dà priorità alla stabilità), oltre a linux-next per rimanere aggiornati sulle prossime versioni.
Se scarichi un file tar.xz, estrailo e spostati nella directory in cui desideri lavorare. Non è obbligatorio compilare in /usr/src; la compilazione funzionerà in qualsiasi directory purché siano installate le dipendenze necessarie (compilatori, file di intestazione, binutils, ecc.). Su Debian/Ubuntu, di solito è richiesto un metapackage come build-essential e le relative utilità.
In Gentoo, "emerge -s sources" elenca i pacchetti sorgente (ad esempio, gentoo-sources). Quando si installa con emerge -a gentoo-sourcesL'albero viene creato in /usr/src e puoi selezionare la versione attiva con seleziona il kernelModificare il collegamento simbolico /usr/src/linux con la versione desiderata prima di procedere alla configurazione e alla compilazione.
Ricorda che se usi strumenti come genkernel per initramfs, il collegamento /usr/src/linux deve puntare ai sorgenti corretti. Altrimenti, potresti generare un initramfs incompatibile con il kernel appena compilato.
Confronta le configurazioni e pulisci l'ambiente
Quando si aggiorna a una versione più recente, `make oldconfig` guida l'utente attraverso le nuove impostazioni; `make olddefconfig` accetta i valori predefiniti delle impostazioni aggiunte. Per verificare cosa è cambiato rispetto al file `.config` dell'architettura, è possibile generare un nuovo file `.config` e confrontarlo con il file `.config` esistente utilizzando `diff`.
Se hai fatto molti esperimenti e qualcosa non ti sembra a posto, valuta la possibilità di eseguire `make mrproper` per ricominciare da capo. Nota: questo comando rimuove gli artefatti di compilazione e i file di configurazione, quindi salva il tuo file .config prima di eseguirlo. Se la directory è piena di vecchie build, una pulizia tempestiva può prevenire errori imprevisti.
Una buona pratica consiste nel salvare versioni denominate del file .config (ad esempio, .config-01, .config-02…) prima di sovrascrivere la configurazione attiva. Questo permette di ripristinare una configurazione stabile mentre si testano le modifiche in parallelo.
Se si utilizzano driver esterni (come NVIDIA o ZFS), è necessario ricompilare i moduli esterni e rigenerare l'initramfs dopo aver installato il nuovo kernel. Questo è il modo migliore per evitare avvii con funzionalità mancanti o schermate nere causate da un driver non compatibile.
Padroneggiando la funzione di ricerca con "/", comprendendo il significato di Y/M/N e la loro notazione, e sfruttando flussi come olddefconfig o localmodconfig, configurare e compilare il kernel smette di essere un labirinto. Con una base di file .config ben nota, una pulizia oculata della struttura delle directory e un'attenta gestione delle dipendenze , si otterrà un kernel ottimizzato per il proprio hardware, pronto per la produzione o per sperimentare le funzionalità più recenti senza perdere il controllo del sistema.
Scrittore appassionato del mondo dei byte e della tecnologia in generale. Adoro condividere le mie conoscenze attraverso la scrittura, ed è quello che farò in questo blog, mostrarti tutte le cose più interessanti su gadget, software, hardware, tendenze tecnologiche e altro ancora. Il mio obiettivo è aiutarti a navigare nel mondo digitale in modo semplice e divertente.
