Hai sa vedem cum obtii un kernel monolitic, cu toate modulele gata incluse (in stilul Android), astfel incat sa pornesti sistemul fara initramfs, castigand cateva secunde la pornirea sistemului.
Ei bine, pasii care trebuie sa ii urmezi sunt in mare aceeasi, cu mici adaugiri. Mai exact, in plus fata de compilarea unui kernel minimalist trebuie sa configurezi kernelul sa nu mai foloseasca module incarcabile, ci sa suporte toate aceste module nativ, fiind incluse direct in kernel. Cum faci asta ?
Ei bine, dupa executarea :
make localmodconfig
Comanda care va dezactiva miile de drivere pe care nu le folosesti, tasteaza comanda :
make localyesconfig
Aceasta comanda va genera o configuratie de kernel in care majoritatea driverelor necesare sistemului tau vor fi suportate nativ, mai exact incluse direct in kernel. Dar make localyesconfig
nu va genera o configuratie in care TOATE driverele necesare sunt incluse in kernel, iar pentru asta trebuie facut un mic artificiu.
Daca te vei uita in fisierul de configurare a kernelului, si anume /usr/src/linux/.config
vei observa o gramada de linii in genul :
CONFIG_KERNEL_GZIP=y # CONFIG_KERNEL_BZIP2 is not set # CONFIG_KERNEL_LZMA is not set # CONFIG_KERNEL_XZ is not set # CONFIG_KERNEL_LZO is not set # CONFIG_KERNEL_LZ4 is not set CONFIG_DEFAULT_HOSTNAME="(none)" CONFIG_SWAP=m CONFIG_SYSVIPC=m
Optiunile is not set sunt dezactivate, si nu vor fi compilate. Optiunile =y vor fi incluse direct in kernel, iar optiunile =m vor fi compilate sub forma unor module de kernel incarcabile, nefiind astfel incluse in kernel. Dar pe tine te intereseaza ca toate acestea sa fie incluse in kernel. Prin urmare, va trebui sa modifici configuratia kernelului, iar peste tot unde vezi =m vei inlocui cu =y. Aceasta operatiune NU este recomandata, o sa observi ca vei fi atentionat ca fisierul de configurare a kernelului nu se modifica manual.
Acum vei avea configurat un kernel monolitic. Ramane doar sa rulezi :
make -j4 make -j4 modules_install
Si sa compilezi noul kernel.
De mentionat ca exista totusi sansa ca unele drivere sa fie totusi compilate sub forma de module. Asta pentru ca exista o relatie de dependinta intre anumite optiuni ale kernelului. Mai exact, o anumita optiune selectata de tine, poate sa ceara activarea unei alte optiuni de care prima are nevoie. Va trebui sa depistezi aceste relatii de dependinta, iar daca nu ai nevoie de ele, sa le dezactivezi. Dupa cum spuneam, atat make localmodconfig cat si make localyesconfig NU dezactiveaza absolut tot ceea ce vrei tu sa dezactivezi. Pentru asta foloseste cu incredere :
make nconfig