- Pretraga sa "/" u menuconfig otkriva putanje, zavisnosti i stanje svakog simbola.
- Počnite s funkcionalnom .config datotekom i ažurirajte je koristeći oldconfig/olddefconfig ili localmodconfig.
- Sigurno kompajlirajte i instalirajte: modules_install, initramfs i GRUB update.
- Izbjegavajte tipične greške (izvan stabla kernela, miješane alatne lance, skrivene zavisnosti).

Ako pokušavate shvatiti kako pretraživati konfiguracije u `make menuconfig` i pripremiti kernel za vašu mašinu, evo sveobuhvatnog i praktičnog vodiča. Počinjemo s osnovama kako se ne biste izgubili s menijima, simbolima i ovisnostima, a završavamo s kompajliranjem i instalacijom, uključujući savjete za Gentoo, Debian i derivate.
Cilj je da se s lakoćom snalazite u konfiguratoru kernela, pronađete bilo koju opciju pomoću funkcije pretraživanja, razumijete formate simbola i njihove zavisnosti , te izbjegnete uobičajene greške tokom kompajliranja i instalacije. Sve ovo je pokriveno primjerima drajvera iz stvarnog svijeta (mreža, Wi-Fi, zvuk, video, kamere, ekrani osjetljivi na dodir), preporukama za kontejnere poput Dockera i važnim upozorenjima o Kbuildu i njegovim alatima.
Šta je `make menuconfig` i za šta se koristi?
Set alata za kernel uključuje nekoliko konfiguracijskih frontendova, a `make menuconfig` je jedan od najpopularnijih zbog svog tekstualnog interfejsa zasnovanog na ncurses-u. Omogućava vam da omogućite funkcije kao integrirane u kernel (Y), kao modul (M) ili onemogućene (N), kao i da se krećete kroz kategorije i podmenije pomoću tastature.
Prije nego što počnete, dobra je ideja da se upoznate sa svojim hardverom kako biste izbjegli onemogućavanje bilo čega bitnog. Komande poput lspci, lspci -k, dmesg ili jednostavna lsmod za pregled učitanih modula pomoći će vam da identificirate koji su vam upravljački programi potrebni. Dobra je praksa kopirati trenutnu konfiguraciju u mapu sa izvornim kodom i koristiti je kao osnovu.
Tipična priprema uključuje odlazak na vaše izvorno stablo (na primjer, u /usr/src/linux ili specifičnu verziju koju koristite) i kopirajte pokrenutu datoteku kernela: cp -v /boot/config-$(uname -r) .configS tom osnovom, možete pokrenuti make menuconfig i počnite prilagođavati opcije bez počinjanja od nule.
Interfejs uključuje kategorije kao što su Drajveri uređaja, Datotečni sistemi, Podrška za mreže i CPU/virtualizacija. Pomjerajte kursor pomoću strelica, prebacivajte se između dugmadi pomoću Tab i mijenjajte stanje opcije pomoću razmaknice ili tipki Y, M i N. Svaka stavka obično uključuje kontekstualnu pomoć kojoj se može pristupiti pomoću H ili dugmeta Pomoć.
Pretraži opcije unutar menuconfig-a (simboli, putanje i zavisnosti)
Ugrađena funkcija pretrage je ključna za izbjegavanje zabune. Pritisnite / (kosa crta naprijed) unutar menuconfig-a i unesite naziv simbola (na primjer, BT_HCIBTUSB o IPVLANili ključnu riječ iz teksta upita. Rezultat prikazuje simbol (CONFIG_…), njegov opis, lokacija u meniju, zavisnosti i gdje je definisan.
Pažljivo interpretirajte rezultate: vidjet ćete odjeljke poput "Lokacija" (putanja menija), "Zavisi od" (uslovi koji moraju biti ispunjeni) i "Odabir" (elementi koje ova opcija aktivira). Ako je opcija skrivena, vjerovatno nedostaje zavisnost ; prvo je omogućite prateći rezultate pretrage.
Nakon što pronađete opciju, idite na putanju naznačenu u odjeljku "Lokacija" da biste do nje došli. Ako je ponuđena kao integrirani () ili modul (<M>Izaberite ono što vam najviše odgovara. Moduli su fleksibilniji, ali određene kritične funkcionalnosti (na primjer, kontroleri korijenskog diska ili datotečni sistemi za boot) preporučljivo ih je integrirati.
Odjeljak za pomoć (H ili Pomoć) je koristan: objašnjava svrhu drajvera, njegovu stabilnost i često predlaže da li je bolje aktivirati ga kao modul ili kao integrirani drajver. Oznake poput (NOVO), (EKSPERIMENTALNO), (ZASTARJELO) ili (ZASTARJELO) označavaju status svake opcije.
Navigacija i simboli: šta znače D/M/N i notacije u meniju
Unosi u konfiguratoru koriste vizualne notacije za označavanje svog stanja. Vidjet ćete ` &` kada se element može monolitno onemogućiti ili omogućiti; i `< >`, `<M>`, `<*>` kada se može kompajlirati i kao modul. Svaki pritisak razmaknice (ili Y/M/N) ciklički mijenja stanje prema dozvoljenim vrijednostima.
Također je uobičajeno vidjeti {M} ili {*} kada nije moguće potpuno onemogućiti opciju (postoje uzvodne zavisnosti), te formate poput -M- ili -*- koji ukazuju na to da je stanje nametnuto drugom opcijom. Ako naiđete na ovo, koristite funkciju pretraživanja i pomoći da biste odredili koju zavisnost trebate omogućiti ili onemogućiti.
Za brzo kretanje, tipke od A do Z prelaze u sljedeći red koji sadrži to podebljano slovo. Razmaknica prebacuje stanje, Tab se kreće kroz dugmad (Odaberi, Izlaz, Pomoć, Sačuvaj), a Enter pristupa podmenijima. Ovaj skup prečica na tastaturi znatno ubrzava vaš rad.
Kada završite, sačuvajte promjene pomoću opcije Save. Datoteka .config će biti smještena u direktorij s izvornim kodom; ako već postoji, prethodna verzija će biti preimenovana u .config.old , što je vrlo praktično za poređenje promjena ili brzo vraćanje na prethodnu verziju.
Pripremite izvorno stablo: ponovo upotrijebite i ažurirajte svoj .config
Najefikasniji pristup je početi od poznata konfiguracija koja već radiKopirajte trenutnu .config datoteku iz /boot kao što je spomenuto i ažurirajte je na novu verziju sa make oldconfig (pitat će vas za ažuriranja) ili brže sa make olddefconfig (Prihvata zadane vrijednosti za novu verziju bez da vas pita.) Oba pristupa štede vrijeme prilikom migracije između verzija.
Još jedna vrlo praktična opcija je `make localmodconfig` , koja generira konfiguraciju na osnovu modula koje ste trenutno učitali (ono što `lsmod` vidi). Idealna je za fino podešavanje vašeg trenutnog hardvera, iako ćete, ako kompajlirate za drugu mašinu, morati ručno provjeriti dodatne opcije.
Ako se trebate vratiti na početnu tačku, make defconfig Generira zadanu konfiguraciju za vašu arhitekturu. A ako želite vidjeti alternative za frontend, osim menuconfig-a, postoje i napravi nconfig (moderni naleti), napravi xconfig (Qt) ili napravi gconfig (GTK), korisno ako preferirate grafički interfejs.
U Gentoo-u je važno osigurati da je link /usr/src/linux ukažite na tačne izvore sa eselect kernel list y eselect kernel setAko koristite distribucijske kernele, dobit ćete sigurne zadane konfiguracije, smanjujući rizike na kritičnim sistemima.
Kompilacija i instalacija: sigurne naredbe i najbolje prakse
Nakon što sačuvate .config datoteku, pokrenite kompilaciju sa make -j$(nproc) koristiti sve CPU jezgreU zavisnosti od vašeg hardvera i broja odabranih opcija, proces može trajati od nekoliko desetina minuta do više od sat vremena.
Ako ste omogućili funkcije kao što su moduli, instalirajte ih naknadno sa make modules_installOvo će kopirati module u /lib/modules/$(verzija). Zatim, make install Smjestit će kernel i pridružene datoteke u /boot i, u mnogim distribucijama, automatski će ažurirati unos u boot manageru.
Za generiranje initramfs-ova (neophodnih pri korištenju određenih modula, na primjer, kontrolera skladištenje ili ZFS/NVIDIA), u Gentoo-u možete koristiti genkernel –instaliraj initramfsi u drugim okruženjima alate kao što su dracut o update-initramfs. Nemoj zaboraviti ažuriranje GRUB-a ako vaš distribucijski sistem to ne radi automatski.
U Debianu i derivatima je uobičajeno pokretati update-initramfs -u y ažuriranje GRUB-a (na primjer, sa update-grub) ili grub-mkconfig -o /boot/grub/grub.cfgU sistemima sa više jezgara, održavanje različitih imena (na primjer, dodavanjem oznake za EXTRAVERSION) pomaže da se Ne prepisuj stabilne verzije da ti još uvijek treba.
U Debianu i derivatima je uobičajeno pokretati update-initramfs -u y update-grub o grub-mkconfig -o /boot/grub/grub.cfgU sistemima sa više jezgara, održavanje različitih imena (na primjer, dodavanjem oznake za EXTRAVERSION) pomaže da se Ne prepisuj stabilne verzije da ti još uvijek treba.
Aktivirajte uobičajene drajvere: gdje ih pronaći u meniju
- Za Ethernet mrežne kartice: idite na Drajveri uređaja > Podrška za mrežne uređaje > Podrška za Ethernet drajver i odaberite odgovarajući drajver za čipset. Možete ga integrirati ili ostaviti kao zaseban modul ako nije neophodan za pokretanje sistema.
- Za Wi-Fi: označite Drajveri uređaja > Podrška za mrežne uređaje > Bežična lokalna mreža i označava određenog drajvera (Atheros, Intel(Broadcom, itd.). Često je praktično kompajlirati ga kao modul kako bi se olakšala ažuriranja ili testiranje.
- Grafika: unesite Drajveri uređaja > Podrška za grafiku. Za NVIDIA Kod Nouveau ili AMD GPU-ova sa amdgpu-om, provjerite odgovarajuću podršku; na hibridnim sistemima, provjerite opcije prebacivanja. Dobra je ideja pročitati dokumentaciju pomoći za svaki drajver kako biste odlučili između modula ili integrisane grafike.
- Zvuk: prolazi Drajveri uređaja > Podrška za zvučne kartice > Napredno Linux Zvučna arhitektura (ALSA)Odaberite specifični drajver za vašu karticu i omogućite opću ALSA podršku. Ako niste sigurni, ostavljanje kao modula nudi veću fleksibilnost.
- Web kamere: pristup Drajveri uređaja > Multimedijalna podrška, omogućite "Kamere/video hvatači" i unutar "Mediji USB "Adapteri" aktivni USB video klasa (UVC) ako vaša web kamera podržava UVC standard.
- Ekrani osjetljivi na dodir: Enter Drajveri uređaja > HID podrška > Specijalni HID drajveri i omogućava HID višedodirni ekran za uobičajene multi-touch panele.
Datotečni sistemi, sigurnost i virtualizacija: ključni izbori
U Datotečnim sistemima možete omogućiti EXT4 (sa enkripcijom ako je potrebno), XFS, Btrfs, NTFS , VFAT/EXFAT, ISO/UDF i mrežne datotečne sisteme poput NFS-a ili CIFS-a. Za vaš root datotečni sistem za pokretanje, najbolje je da ga integrirate u kernel kako biste izbjegli oslanjanje na module u initramfs-u.
Što se tiče sigurnosti, razmotrite opcije poput SELinuxa , kernel ključeva (KEYS) ili tehnologija integriteta kao što je EVM. Neke funkcije mogu uticati na performanse, ali nude dodatne slojeve zaštite u osjetljivim okruženjima.
Odjeljak za virtualizaciju uključuje KVM i druge elemente potrebne za hipervizore. Na modernim procesorima, omogućavanje KVM-a i specifičnih Intel/AMD zastavica je obično jednostavno i vrlo korisno za virtuelne mašine.
U Kriptografskom API -ju možete omogućiti algoritme ubrzane od strane CPU-a (SSE2/SSSE3/AVX/AVX2) ako ih vaš hardver podržava. Ovo ubrzava šifriranje, kompresiju i razne operacije protokola.
Kernel za Docker i orkestratore: osnovne opcije
Ako planirate pokretati kontejnere (Docker, Docker Swarm, itd.), obavezno omogućite imenske prostore i kontrolne grupe (cgroups ). Uobičajene opcije uključuju: CONFIG_NAMESPACES, CONFIG_NET_NS, CONFIG_PID_NS, CONFIG_IPC_NS, CONFIG_UTS_NS i CONFIG_CGROUPS sa njihovim podkomponentama (CPUACCT, DEVICE, FREEZER, SCHED, CPUSETS, MEMCG).
Za kontejnerske mreže, ključni su CONFIG_VETH (virtualni ethernet), bridge i netfilter. Primjeri uključuju: CONFIG_BRIDGE, CONFIG_BRIDGE_NETFILTER, CONFIG_NETFILTER_XT_MATCH_CONNTRACK, CONFIG_NETFILTER_XT_MATCH_ADDRTYPE, CONFIG_NETFILTER_XT_MATCH_IPVS, CONFIG_NF_NAT i ciljeve kao što je CONFIG_IP_NF_TARGET_MASQUERADE . Mnoge od ovih opcija mogu se kompajlirati kao moduli.
Drajver CONFIG_IPVLAN se obično koristi u naprednim scenarijima umrežavanja kontejnera. Ako niste sigurni, koristite funkciju pretraživanja sa "/" i provjerite zavisnosti. Kompajliranje kao modula vam omogućava da ga učitate samo kada je potrebno.
Postoji popularan skript za provjeru kompatibilnosti vaše .config datoteke s Dockerom (check-config.sh). Nakon što mu dodijelite dozvole i usmjerite ga na vašu .config datoteku , on će vam reći šta nedostaje za potpuno iskustvo korištenja kontejnera.
Kbuild i toolchains: važne napomene
Sistem za izgradnju kernela (Kbuild) vam omogućava parametrizaciju izgradnje pomoću varijabli okruženja. Na primjer, LLVM=1 Kompajlirajte sa Clang/LLVM. Ali budite oprezni: nemojte miješati GNU alate sa LLVM-om (na primjer, CC=gcc con LD=ld.lld), jer Prekinućeš konstrukciju na načine koji uopšte nisu očigledni.
Ako želite u potpunosti kompajlirati s LLVM-om, definirajte LLVM=1 ili koristiti CC=clang i ostatak konzistentnih binutila (ar, nm, ld, itd.). Uvijek provjerite dokumentaciju za kernel koji koristite, jer određene zastavice ili agresivne optimizacije možda neće biti preporučene u produkciji.
U veoma starim granama (kao što je 2.4) koraci kao što su napraviti zalog o očistiti prije gradnje; danas to obično nije potrebno, ali ako dolazite iz problematičnih prethodnih postavki, make mrproper Ovo vraća stablo u čisto stanje. Napravite sigurnosnu kopiju vaše .config datoteke prije čišćenja.
Da bi razlikovali prilagođene kernele, mnogi administratori dodaju oznaku u EXTRAVERSION (Makefile) ili koriste jedinstvena imena slika. Ovo sprečava slučajno prepisivanje stabilnog kernela s kojim se svakodnevno pokrećete.
„make: *** Nema pravila za kreiranje cilja 'menuconfig'. Stop.“ Zašto se ovo dešava?
Ova greška se javlja kada pokrenete `make menuconfig` izvan izvornog stabla kernela ili u projektu koji ne uključuje Kconfig/mconf infrastrukturu. Cilj "menuconfig" je obezbijeđen od strane Makefile-a kernela zajedno sa odgovarajućim skriptama; ako niste u tom stablu, ovo pravilo ne postoji.
Tipična rješenja: Provjerite da li ste u /usr/src/linux (ili folderu raspakirane verzije) i da postoji Makefile kernela sa ciljnom naredbom "menuconfig". Ako želite koristiti Kconfig u malom projektu (na primjer, "hello-world" projekat koji koristi Kconfig), potrebno je da ugradite alate za skripte/kconfig (ili koristite pakete poput kconfig-frontends) i Makefile koji ispravno poziva mconf/nconf. Bez te infrastrukture, naredba neće znati šta da radi.
Praktični zaključak: menuconfig je dio kernela ; nemojte ga miješati s generičkim Makefileom. Da biste eksperimentirali s Kconfigom u minimalnom projektu, uključite odgovarajuće zavisnosti ili razvijte vlastiti tijek rada koristeći zasebno kompajlirane Kconfig uslužne programe.
Izvorni kodovi za preuzimanje: mainline, stable, longterm i linux-next
Jezgro možete preuzeti iz upravitelja paketa vaše distribucije ili sa službene web stranice. Na kernel.org ćete pronaći grane Mainline (najnovije funkcije i nedavne zakrpe), Stable (testirana za svakodnevnu upotrebu) i Longterm (LTS, idealna za preduzeća ili one koji daju prioritet stabilnosti), kao i linux-next kako biste bili u toku s nadolazećim izdanjima.
Ako preuzmete tar.xz datoteku, raspakujte je i idite do direktorija za rad tamo. Nije obavezno kompajlirati u /usr/src; izgradnja će raditi u bilo kojem direktoriju sve dok imate instalirane potrebne zavisnosti (kompajlere, zaglavlja, binutile, itd.). Na Debianu/Ubuntuu, obično su potrebni metapaket poput build-essential i povezani uslužni programi.
U Gentoo-u, "emerge -s sources" prikazuje izvorne pakete (na primjer, gentoo-sources). Prilikom instaliranja sa emerge -a gentoo-sourcesStablo se kreira u /usr/src i aktivnu verziju možete odabrati sa eselect kernelPromijenite simboličku vezu /usr/src/linux na željenu verziju prije konfiguracije i kompajliranja.
Imajte na umu da ako koristite alate poput genkernel za initramfs, link /usr/src/linux mora ukazivati na ispravne izvore. U suprotnom, mogli biste generirati initramfs koji nije kompatibilan s kernelom koji ste upravo kompajlirali.
Uporedite konfiguracije i očistite okruženje
Kada ažurirate na noviju verziju, `make oldconfig` vas vodi kroz nove postavke; `make olddefconfig` prihvata zadane vrijednosti dodanih postavki. Da biste provjerili šta se promijenilo u odnosu na `.config` datoteku arhitekture, možete generirati novu `.config` datoteku i uporediti je sa svojom postojećom `.config` datotekom koristeći `diff`.
Ako ste mnogo eksperimentirali i nešto vam se ne čini kako treba, razmislite o pokretanju naredbe `make mrproper` za ispočetka. Napomena: ovo uklanja artefakte kompajliranja i konfiguracijske datoteke, pa prethodno sačuvajte svoju .config datoteku. Ako je stablo pretrpano starim verzijama, pravovremeno čišćenje može spriječiti neočekivane greške.
Dobra praksa je sačuvati imenovane verzije vaše .config datoteke (npr. .config-01, .config-02…) prije prepisivanja aktivne konfiguracije. Ovo vam omogućava da se vratite na stabilnu konfiguraciju dok paralelno testirate promjene.
Ako koristite eksterne drajvere (kao što su NVIDIA ili ZFS), ponovo izgradite eksterne module i regenerirajte initramfs nakon instaliranja novog kernela. Ovo je najbolji način da izbjegnete pokretanje sistema sa nedostajućim funkcijama ili crnim ekranima uzrokovanim neuparenim drajverom.
Savladavanjem funkcije pretraživanja sa "/", razumijevanjem značenja Y/M/N i njihovih notacija, te korištenjem tokova kao što su olddefconfig ili localmodconfig, konfigurisanje i kompajliranje kernela prestaje biti lavirint. Sa dobro poznatom bazom .config datoteka, razumnim čišćenjem stabla i pažljivom pažnjom prema zavisnostima , imat ćete kernel fino podešen za vaš hardver, spreman za produkciju ili za eksperimentisanje sa najnovijim funkcijama bez gubitka kontrole nad sistemom.
Strastveni pisac o svijetu bajtova i tehnologije općenito. Volim dijeliti svoje znanje kroz pisanje, a to je ono što ću raditi na ovom blogu, pokazivati vam sve najzanimljivije stvari o gadžetima, softveru, hardveru, tehnološkim trendovima i još mnogo toga. Moj cilj je pomoći vam da se krećete u digitalnom svijetu na jednostavan i zabavan način.
