- 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 scoprirlo Come cercare le configurazioni in `make menuconfig` E già che ci sei, prepara il kernel per la tua macchina. Ecco una guida completa e pratica. Iniziamo dalle basi, così non ti perderai tra menu, simboli e dipendenze, e concludiamo con la compilazione e l'installazione, inclusa Tricks in Gentoo, Debian e derivati.
L'obiettivo è che tu sia in grado di navigare facilmente nel configuratore del kernel, individuare qualsiasi opzione utilizzando la funzione di ricerca e comprendere il formati dei simboli e loro dipendenzeed evitare errori comuni durante la compilazione e l'installazione. Tutto questo è illustrato con esempi concreti. autisti (rete, wifi, audio, video, telecamere, touch screen), consigli per container come Docker e avvisi importanti su Kbuild e toolchain.
Che cos'è `make menuconfig` e a cosa serve?
Il set di strumenti del kernel include diverse interfacce configurabili, tra cui Fare menuconfig Uno dei più popolari grazie alla sua interfaccia testuale basata su ncurses. Permette di attivare funzionalità come quelle integrate nel kernel (Y), come modulo (M) o disabilitate (N), oltre a navigare tra categorie e sottomenu tramite tastiera.
Prima di iniziare, è utile conoscere il tuo hardware in modo da non disattivare nulla di essenziale. comandi come lspci, lspci -k, dmesg Un semplice comando `lsmod` per visualizzare i moduli caricati può aiutarti a identificare i driver di cui hai bisogno. È buona norma copiare la configurazione corrente nella cartella sources e usarla 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.
Nell'interfaccia vedrai categorie come Driver di dispositivo, file system, supporto di rete o CPU/virtualizzazione. Sposta il cursore con i tasti freccia, passa da un pulsante all'altro con Tab e modifica lo stato di un'opzione con la barra spaziatrice o i tasti Y, M e N. Ogni elemento include solitamente una guida contestuale accessibile con H o il pulsante Aiuto.
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 manca una dipendenza; abilitalo prima seguendo gli indizi del motore di 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.
L'help (H o Help) è utile: spiega lo scopo del driver, la sua stabilità e spesso suggerisce se è meglio attivarlo come modulo o come driver integrato. Tag come (NUOVO), (SPERIMENTALE), (OBSOLETO) o (OBSOLETO) Ti guidano sullo stato di ogni opzione.
Navigazione e simboli: cosa significano Y/M/N e notazione del menu
Le voci del configuratore utilizzano notazioni visive per indicare il loro stato. Vedrai y quando l'elemento può essere disattivato o attivato monoliticamente; e < >, , <*> quando consente anche la compilazione come modulo. Ogni pressione della barra spaziatrice (o del tasto Y/M/N) ruota lo stato come consentito.
È anche comune vedere {M} o {*} quando non è possibile disabilitare completamente un'opzione (ci sono dipendenze upstream) e formati come -M- o -*- Questi indicano che lo stato richiede un'opzione diversa. Se lo rilevi, utilizza la funzione di ricerca e aiuta a determinare quale dipendenza devi abilitare o disabilitare.
Per spostarsi rapidamente, i tasti dalla A alla Z saltano alla riga successiva contenente la lettera in grassetto. La barra spaziatrice alterna lo stato, il tasto Tab scorre i pulsanti (Seleziona, Esci, Aiuto, Salva) e il tasto Invio accede ai sottomenu. Questo set di scorciatoie da tastiera Velocizza notevolmente il lavoro.
Al termine, salva con Salva. Il file .config verrà inserito nella directory sources; se esiste già, la versione precedente verrà rinominata. .config.oldil che è molto pratico per confrontare le modifiche o tornare rapidamente indietro.
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 è crea localmodconfigQuesto genera una configurazione basata sui moduli attualmente caricati (ciò che lsmod vede). È ideale per la messa a punto dell'hardware attuale, anche se se si compila per una macchina diversa, sarà necessario controllare 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
En File system Sarà possibile abilitare EXT4 (con crittografia se necessario), XFS, Btrfs, NTFSVFAT/EXFAT, ISO/UDF e sistemi di rete come NFS o CIFS. Per il file system root di avvio, è comune integrarlo nel kernel per evitare di dipendere dai moduli nell'initramfs.
In termini di sicurezza, considerare opzioni come SELinuxchiavi kernel (KEYS) o tecnologie di integrità come EVM. Alcune funzionalità possono influire sulle prestazioni, ma offrono livelli di protezione aggiuntivi in ambienti sensibili.
sezione Virtualization Include KVM e altri elementi necessari per gli hypervisor. Sulle CPU moderne, abilitare KVM e i flag specifici Intel/AMD è solitamente banale e molto utile per Macchine virtuali.
Nella crittografia (API crittograficaÈ possibile abilitare gli algoritmi accelerati dalla CPU (SSE2/SSSE3/AVX/AVX2) se l'hardware li supporta. Questo velocizza la crittografia, la compressione e varie operazioni di protocollo.
Kernel per Docker e orchestratori: opzioni essenziali
Se si prevede di eseguire contenitori (Docker, Docker Swarm, ecc.), assicurarsi di abilitare namespace e cgroupTra le opzioni più comuni: CONFIG_NAMESPACES, CONFIG_NET_NS, CONFIG_PID_NS, CONFIG_IPC_NS, CONFIG_UTS_NS e CONFIG_CGROUPS con i suoi sottocomponenti (CPUACCT, DEVICE, FREEZER, SCHED, CPUSETS, MEMCG).
Per le reti di container, sono fondamentali CONFIG_VETH (ethernet virtuale), bridge e netfilter. Ad esempio: 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_MASQUERADEMolte di queste opzioni possono essere compilate come moduli.
L'autista CONFIG_IPVLAN Questo è comune negli scenari di networking di container avanzati. In caso di dubbi, utilizzare la funzione di ricerca con "/" e convalidare le dipendenze. La compilazione come modulo consente di caricarlo solo quando necessario.
C'è un copione Un metodo diffuso per verificare la compatibilità del file .config con Docker è usare `check-config.sh`. Dopo aver concesso le autorizzazioni e aver puntato il file al tuo... .configTi dirà cosa manca per un'esperienza di container completa.
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 a EXTRAVERSIONE (Makefile) o utilizzare nomi di immagine univoci. Questo impedisce di sovrascrivere accidentalmente il kernel stabile con cui si avvia ogni giorno.
"make: *** Nessuna regola per impostare il target come 'menuconfig'. Stop." Perché succede questo?
Questo errore appare quando si esegue crea menuconfig al di fuori dell'albero delle 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 quell'albero, tale regola non esiste.
Soluzioni tipiche: assicurati di essere in /usr/src/linux (o nella cartella della versione non compressa) e che esista un Makefile del kernel con destinazione "menuconfig". Se si desidera utilizzare Kconfig in un piccolo progetto personale (ad esempio, un "hello-world" con Kconfig), è necessario incorporare gli strumenti di script/kconfig (oppure utilizzare pacchetti come kconfig-frontends) e un Makefile che invochi correttamente mconf/nconf. Senza questa infrastruttura, il comando non saprà cosa fare.
Conclusione pratica: menuconfig fa parte del kernelNon confondetelo con un Makefile generico. Per "giocare" con Kconfig in un progetto minimale, includete le dipendenze appropriate o sviluppate il vostro flusso di lavoro utilizzando le utility di Kconfig compilate separatamente.
Fonti di download: mainline, stable, longterm e linux-next
Puoi scaricare il kernel dal gestore pacchetti della tua distribuzione o dal sito web ufficiale. Su kernel.org troverai diverse branch. Linea principale (ultimi aggiornamenti e patch recenti), Stabile (testato per l'uso quotidiano) e Lungo termine (LTS, ideale per le aziende o per chi dà priorità alla stabilità), oltre a linux-next per seguire ciò che sta arrivando.
Si Download Estrarre un file tar.xz e accedere alla cartella in cui si desidera lavorare. La compilazione in /usr/src non è obbligatoria; la build Funziona su qualsiasi percorso a condizione che siano installate le dipendenze (compilatori, header, binutils, ecc.). Su Debian/Ubuntu, di solito sono richiesti un metapacchetto 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 alle sorgenti corrette. Altrimenti, potresti generare un initramfs. incompatibile con il kernel appena compilato.
Confronta le configurazioni e pulisci l'ambiente
Quando esegui l'aggiornamento a una nuova versione, crea oldconfig Ti guida attraverso il nuovo; crea olddefconfig Accetta i valori predefiniti di ciò che è stato aggiunto. Per verificare cosa è cambiato rispetto al defconfig dell'architettura, è possibile generare un file defconfig separatamente e confrontarlo con il file .config utilizzando diff.
Se hai armeggiato molto e qualcosa ancora non va bene, considera di correre rendere il mrproprio Per iniziare, pulisci. Nota: questa operazione rimuove artefatti di compilazione e file di configurazione, quindi salva il file .config in anticipo. Se l'albero è ingombro di vecchie build, una pulizia tempestiva eviterà errori imprevisti.
Una pratica consigliata è quella di salvare le versioni di .config con nomi (ad esempio, .config-01, .config-02…) prima di sovrascrivere la configurazione attiva. Ciò consente di ripristinare una configurazione stabile testando le modifiche in parallelo.
Se si utilizzano driver esterni (come NVIDIA o ZFS), ricostruire i moduli esterni e rigenerare l'initramfs dopo aver installato il nuovo kernel. Questo è il modo migliore per evitare di avviare con funzionalità mancante o schermate nere dovute a un driver non associato.
Padroneggiando la ricerca con “/”, comprendendo il significato di Y/M/N e la sua notazione e sfruttando flussi come olddefconfig o localmodconfig, la configurazione e la compilazione del kernel cessano di essere un labirinto. Con una base .config nota, una pulizia dell'albero sensata e attenzione alle dipendenzeAvrai un kernel ottimizzato per il tuo 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.
