HTML

Bagoj úr blogja

Kíváncsi Bagoj befigyel a Linux belsejébe, illetve különféle Linux terjesztéseket próbál ki. Ha jó napja van, scriptet ír Neked.

Friss topikok

Kernel fordítás - nagy levegő...!

2008.04.06. 23:21 bagoj ur

[1] [2] [3]

A kernel konfigurálás menete

Tegyük fel, hogy még mindig a /usr/src/linux könyvtárban vagyunk. Egy make menuconfig futtatásával egy kis karakteres, fa-szerkezetű menüt kapunk, ahol be tudjuk állítani a szükséges hardver- és feature támogatásokat. Ha egy sor mellett nyilacska "--->" van, akkor annak vannak almenüjei. A következő gombokat lehet használni:

Fel - le billentyű a mozgáshoz, enter a (menüpontba) belépéshez
Szóköz a kiválasztás megváltoztatásához. Általában ekkor a [ ], [*] és [M] között változik a kiválasztás. Kiscsillag jelenti a kernelbe fordított támogatást, 'M' jelenti a modult, ha üres akkor értelemszerűen nem lesz támogatás.
Használható a Y, N és M billentyű is, ha nem akarunk szóközzel váltogatni.
A TAB segítségével tudunk ránavigálni lent az <Exit> és <Help> gombokra. Ez a help nagyon hasznos, hiszen legtöbbször az egysoros megjegyzésből a fene se tudja, hogy miről szól.

Általános jótanácsok


Legalábbis jótanácsnak szánom őket. Nekem eddig bejöttek.

1. Majdnem minden driver választásnál el kell tűnődni a következőkön:
    a) van a gépemben ilyen hardver? Ha igen, akkor nyilván kell. Ilyen a videokártya, hangkártya, hálózati kártya driver, alaplap támogatása, merevlemez-vezérlés stb.

    b) gyakran/folyton használom? Ha igen, akkor kernelbe vele, nem kell modulozni. Például az ext2/3, UDF, VFAT fájlrendszerek a kernelben vannak; az MSDOS, JFFS2 stb. pedig modulban.

    c) lehet-e rá szükségem? Ha otthon ugyan nincs nyomtató, attól még nem biztos hogy sosem lesz a gépre dugva. És izzasztó akkor kernelt fordítani, amikor nyomtatni kéne sürgősen. Szóval a nem elrugaszkodott dolgokat modulba érdemes fordítani - hiszen ezek nem esznek sem memóriát, sem processzort mindaddig, amíg nem használjuk őket.

    d) Ha valami egzotikus dologról van szó, vagy olyan chipsetről, ami nincs a gépben, akkor az nem kell. Majd új hardver beszerzésnél ráér kernelt fordítani.

2. Sok ember vallja azt az elvet, hogy "amiről nem tudom, micsoda, az nem is kell". Ez nem így van ebben az esetben! :-) Ha a rendszer működése szempontjából biztonságosan kihagyható a dolog, akkor a Help-ben ott van, hogy "If unsure, choose 'N'" vagy "If in doubt, say 'N'" vagy valami hasonló. Ha ez nincs ott, mégse tudjuk mi az, akkor az lehet valami fontos, olvassuk végig a helpet.

3. Még egyszer: Ha nem tudod, mi az, olvasd el a helpet! Annál többet senki nem segíthet.

4. A konfigurátor menü segít: Ha valami olyat kapcsolunk be, amihez kell még egy valag másik dolog is, azt automatikusan bekapcsolja; ha modult választunk azok is modulok lesznek, ha kernelbe rakjuk, azok is oda kerülnek. Tehát inkonzisztencia kizárva.

5. Nem egyszerű kitalálni, hogy melyik hardverünkhöz melyik kernel modul van betöltve a gyári kernelnél. Ezeket egy mód van kibogarászni: A /usr/src/linux alatt van egy Documentation könyvtár; ebben keressünk rá a modulok nevére. Így rögtön kiderül, hogy

e100:Intel(R) PRO/100 hálózati kártya
snd_via82xx:Az alaplapi hangkártya
via82cxxx:Déli busz (hi-hi)
fuseUser-szintű fájlrendszer kezelés (kell, és kész! A "Filesystem in Userspace support" alatt van.)

És ne felejtsük el, amikor a múltkor lsmod-ot nyomtunk, senki nem garantálta, hogy minden modul bent volt épp a memóriában, ami kellhet! Például nekem az usb_storage nem volt bent, mivel nem dugtam rá az usb-kulcsomat a gépre...

Kernelbe, ne modulba

Szeretnék még pár szót mesélni a hardver támogatás sajátosságairól, valamint egy-két veszélyesebb pontról, hiszen mint azt tudjuk, az elb_szaas szelleme folyamatosan felettünk lebeg. :-)

Először is az IDE, SCSI és SATA merevlemez-illesztők megvalósítása (nekem) eléggé kusza. Amikor az első SATA-k megjelentek, akkor beleheggesztették valahogy SCSI-ként, aztán elkezdték átlátni a dolgokat, és megírták a libata vezérlőt (amely ma is a SCSI-t igényli). Manapság meg, ahogyan a betöltött libata és ata_generic modulokból lehet látni, már a sima IDE-re is szeretik a libata-t használni. Ezért az én vacak, lassú 2,5"-os IDE vinyóm SCSI-ként látszik, azaz ha nézek egy mount parancsot, akkor /dev/sda1, /dev/sda2 stb. partíciókat látok. Nekem az volt a célom, hogy irtsunk ki mindent, amit csak lehet, viszont arra igencsak figyelni kell, hogy ha nem a libata, hanem az IDE illesztőn keresztül érem el a vinyót, akkor a jelölése megváltozik; /dev/hda1, /dev/hda2 stb-re... rosszul hangzik, mi? Nem gond különben, lesz rá megoldás; csak érdemes tudni. Tehát ha IDE vinyó figyel a gépben, és a kernel konfignál emiatt logikusan az IDE részre fekszünk rá, érhet meglepetés egy "Kernel panic" személyében.

A többiről itt egy kis lista. Tehát amit semmiképpen se vegyetek ki a konfigból, mindig fordítsátok bele, és NE MODULBA:

1. Az első nélkül nem igazán fog semmi elindulni! Hiszen ne felejtsük el, a monitorunk az mégiscsak egy terminál....
"Device Drivers" / "Character devices" / "Virtual terminal"
"Device Drivers" / "Character devices" / "Unix98 PTY support"
Graphics support / "Console display driver support" / "VGA text console"

2. Igen érdekes húzás, amikor modulba teszi valaki egy fájlrendszer támogatását. Ekkor előáll a helyzet, hogy kéne ismerni a fájlrendszert, amiről betöltené a kernel a fájlrendszer támogatást... szóval mindenképp kernelbe vele (ha nem ext2/3-at használtok, akkor a megfelelő fájlrendszert kell választani. A mount parancs megmutatja, mitek van):

"File systems" / "Second extended fs support"
"File systems" / "Ext3 journalling file system support"

3. Ez már mehet modulba is, de ne hagyjátok ki, különben nem lesz egér támogatás...

"Device Drivers" / "Input device support" / "Mouse interface"

4. Még egyszer gondoljátok át, hogy a fájlrendszer és a merevlemez támogatáshoz mindent bekapcsoltatok-e, és nem modulba. Én ezeket kapcsoltam be, lévén (ahogyan láttuk múltkor) nekem egy elég régi VIA82Cxxx-es lapom van:

"Device Drivers" / "ATA/ATAPI/MFM/RLL support" / "VIA82CXXX chipset support"

Így támogatni fogja a chipsetet.

5. Ja, még láttam egy jópofát. Ahhoz, hogy a kernel be tudja tölteni és futtatni tudja a memóriában a user-szintű programokat, nem árt ehhez sem a támogatás. Mindenképp kernelbe:

"Executable file formats / Emulations" / Kernel support for ELF binaries

6. Ne felejtsétek el a processzorra optimalizálni a kernelt. Ez a "Processor type and features" menüben van, válasszátok ki a megfelelő procit. Ha még ez sem megy, a /proc/cpuinfo fájlba belenézve menni fog. Ha már abban a menüben vagytok, akkor ne felejtsétek beállítani a megfelelő optimalizációt:

"Processor type and features" / "Preemption Model (Voluntary Kernel Preemption (Desktop))"

A következő menüpont alatt beírhatjuk a saját nevünket. A sok szívás után örömmel tölthet el az a tudat mindenkit, hogy az elkészült kernel a nevét viseli, és az uname ki is írja, ezért mindenképp ajánlom beállítani ezt a súlyos optimalizációt. :-) Tetszőleges stringet be lehet írni.

General setup / "Local version - append to kernel release"

Ki kicsoda?

Nincs értelme a menüpontokat egyesével leírni, hiszen ezek folyton változnak. A főbb menüpontokat viszont talán le merem írni:

"General setup  --->"Általános beállítások. A "Prompt for development..." menüpont gyanúsnak tűnhet, de hagyjuk bekapcsolva. A "System V IPC", "POSIX Message Queues" mindenképp kell, RAM filesystem jó ha van (initrd-hez)*
Enable loadable module support  --->Eldönthetjük, hogy akarunk-e monolit kernelt. Mivel egy desktop sok hardverrel kerülhet kapcsolatba, én nem javaslom. Szerver esetén el lehet rajta gondolkodni, hiszen ott a modul betöltés támadási felület lehet. Megfontolandó a "Module unloading" kikapcsolása, szerveren mindenképp.
Enable the block layer  --->Itt az "IO Schedulers" rész az érdekes; az input-output algoritmusokat lehet beállítani. Én - lesz, ami lesz - a deadline-t választottam alapértelmezettnek
Processor type and features  --->Ha nincs több processzoros/magos rendszerünk, kapcsoljuk ki az SMPt (Symmetric multi-processing). Bár elméletben a hyperthread-ből is tudna profitálni, úgy vettem észre hogy a gyakorlatban nem segít semmit. Az MTRR-t viszont kapcsoljuk be!
Power management options  --->Az APM-et (Advanced Power Management) ne használjuk - hacsak nem PII-es a gép, erre nem is nagyon lesz szükség. A "CPU frequency scaling" alatt beállíthatjuk a megfelelő direktívát (aksi idő maximalizálás, teljesítmény maximalizálás, ezek egyértelműek gondolom).
Bus options (PCI etc.)  --->Laptoposok az PCCard-ot állítsák be (itt lehet látni, hogy nekem mit csinált a 'yenta' modul)
Executable file formats / Emulations  --->Az ELF legyen kernelben. Én a másik kettőt azért teszem modulba, hogy alkalomadtán lehessen látni (a betöltött modul meglétéből), hogy nem csak ELF futtatható formátumot futtatott a proci.
Networking  --->Itt vannak a különféle hálózati protokollok támogatásai; az infra, bluetooth, wireless. Lehet válogatni. A "Networking options"-ban, ha valaki nem ért hozzá, hagyja úgy ahogy van.
Device Drivers  --->Hát ez egy húzós kis menüpont. Szedjük össze minden tudásunkat, meg az lspci kimenetét, és vágjunk bele...
Firmware Drivers  --->Nekem innen még sosem kellett semmi...
File systems  --->Az ext2, ext3 mindenképp legyen benne. Nem árt a CD-ROM/DVD fájlrendszerek és a DOS/FAT/NTFS belefordítása sem...
Instrumentation Support  --->Kernel-hekkerek játékszere, én nem használom.
Kernel hacking  --->Itt a "Magic Sysreq"-t érdemes bekapcsolni. Ha nem tudod, mi az, keress rá a neten; igen hasznos.
Security options  --->A különféle biztonságos Linux megvalósítások támogatása: SELinux, AppArmour... én bekapcsoltam, hiszen az Ubuntuban van ennek felhasználótérbeli támogatása is
Cryptographic API  --->Az MD5, SHA1 és egyéb gyakori algoritmust kernelbe szoktam tenni - valamivel táplálni kell az illúzióimat, hogy ezek gyorsabban lefutnak ezután. :-)
Virtualization  --->Ez a KVM (hardver-támogatott) virtualizációról szól, a vmware, virtualbox enélkül is megy, én nem is használom.
Library routines  --->Különféle hálózati protokollok megvalósításához szükséges CRC-algoritmusok. Sokat nem tudok róluk; gondolom a céljük a megbízhatatlan vonalon keresztüli hibafelderítő/javító kód biztosítása. Mivel nem tudom, mi ez, inkább mindent bekapcsolok. :-)


*ezt az initrd-t majd a következőben elmondom.

(folyt. köv.)

1 komment

Címkék: linux fordítás ubuntu kernel rendszerfelügyelet

A bejegyzés trackback címe:

https://bagojur.blog.hu/api/trackback/id/tr78612278

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

lenkei 2008.04.07. 18:25:48

Köszi a leírást! Lehet hogy én is belekezdek férfivá avatásomba... XD