linux kernel? zakladne otazky
zacinam sa zaujimat o linux z trosku ineho uhla a preto by ma zaujimali hlavne tieto veci:
1) preco sa napr. vanilla kernel neda skompilovat LEN za pomoci gcc-cka? ved to je len ako pozeram ciste C-cko + kusa asm...preco vlastne sa pouzivaju tie dllheee hovadinky ako je "make nieco" a milion dalsich blbosti?
2) ked sa skompiluje, tak sa vytvori spustitelny subor? jeden?viac? ako to s tym je? CO sa vytvori?(predpokladam, ze NEstaviam na nejakej distribucii, ale zacinam uplne od nuly-vytvaram si vlastnu distribuciu)
3) ak uz skompilujem, ako si pridam vlastne programy? idem mi LEN o princip... ked si yvtvaram distro, "supnem" nejake tie zdrojaky mojich programov do *nejakho adresara*(ak ano, akeho?) a potom to cele aj s kernelom skompilujem?
4) potom len pre zaujimavost:
dalo by sa ciste (teoreticky) spojazdnit aplikacie na kerneli 0.01 ?(to je ten uplne prvy tusim) lebo predsa aj ako som letno pozeral zdrojaky, tak tam bolo C cko a nieco v asm, co je, ako som cital, kompatibilne nakodene s i386, cize imho to by malo fungovat...
5) nepoznate nejaky ten zdroj, ktory by bol primerany mojej urovni, aby som sa nieco naucil o tom? :-)
ospravedlnujem sa za (mozno) az prilis primitivne otazky, ale tejto teme smo sa len teraz zacal venovat(3 dni dozadu), takze neviem (skoro) vobec nic:(
Pre pridávanie komentárov sa musíte prihlásiť.
k niektorym konkretnym otazkam:
* kernel je len program (vmlinux/vmlinuz podla stareho vzoru vmunix)
* ciste teoreticky by ti vacsie mnozstvo islo aj na linux 0.01, dalej to zalezi aj od libc a ci ma dostatocnu podporu v kerneli
* nepoznam nijaky zdroj
1) Kazdy kompilator ma svoje "specialitky". Kernel je proste ladeny na gcc a je s nim dost zviazany. To vsak neznamena, ze by to teoreticky nemalo ist skompilovat na nejakom podobne "specialnom" kompilatore. Ale ktovie, ci taky existuje.
2) odpovedal uid0
3) Kernel je len jeden z programov. Ostatne programy sa kompiluju samostatne. Akurat maju spolocne zavislosti (napriklad spominane libc).
4) Osobne ale aj tak pochybujem. Nejde len o chybajuce systemove volania, ale aj o absenciu spravy pamate, procesov atd. Ved si kukni na stranku libc, oproti akemu najstarsiemu kernelu sa to da pouzivat.
5) Najlepsim zdrojom je google a treba zadavat konkretne otazky.
inak boli pokusy použiť aj intelácky kompiler (kôli lepšiemu výkonu na niektorých inteloch) na preklad jadra ale či sa to dotiahlo niekam, to si už nespomeniem. niektoré časti kódu totižto nemôžu byť optimalizované tak ako si prekladač zmyslí, inak by bol ten kód nepoužiteľný.
2) keď skompiluješ kód, tak sa vytvorí to čo si zadal kompileru ako parameter kompilácie, alebo to čo má štandardne predvolené. vzhľadom na to že existuje veľa rôznych kompilerov, tak výsledkom môže byť byte-code prekompilát, staticky linkovateľný objekt, dynamická knižnica, spúšťateľný program, resource a množstvo iných španielskych slovíčok.
3) ak si vytváraš distro, klobúk dolu. aký (čisto teoreticky) správca balíčkov bude použitý? v dnešnej dobe sa totižto stavajú distribúcie pomocou týchto nástrojov vrátane kompilácie (rpm, deb a samozrejme emerge, ostatné nepoznám). bez uvedeného nástroja nemôžeš zaručiť konzistenciu software a to sa len budeš diviť.
4) čisto teoreticky ide všetko, stačí papier, ceruzka, kalkulačka a trpezlivosť. prvá verzia kernelu sa zavádzala priamo z minixu a bolo veľmi málo programov (ak vôbec) ktoré v tom bežali.
http://www.abclinuxu.cz/clanky/jaderne-noviny/jaderne-noviny-historie-linuxu
5) Skus LFS
googlim, googlim, a musim povedat, ze viem este menej, ako som si myslel, ze viem o linuxe(a pritom som si naivne myslel, ze nic neviem ;-])
chcel som si urobit vlastne distro nie preto, aby som ho aj vazne pouzival, ale skor len taku kostru a aby som sa popritom naucil, ako vlastne ten linux funguje, takze wlasaty: nemam ani teorticky predstavu, aky balickovaci system by som pouzil, mozno deb, kedze ho ubuntu pouziva, alebo si nakodim vlastny :D
kazdopadne diky za linky a za par osvetleni, ale ako tak googlim, osvetlit by trebalo hooodne veci :) problem je totiz v tom, ze ako pozeram tie veci na tematiku linux kernelu, tak v kazdom manuali sa predpoklada, ze je citatel na ovela vyssej urovni, ako som ja teraz ;(
ps:pre nestastnikov ako som ja, by som odporucil cerstvo vygooglene http://vdl.halicky.sk/dokumentacia.html ;)
pps: ale aj tak, keby ste sa niekto nudili, by smo zopar linkov privital ;)
http://tiswww.case.edu/php/chet/bash/FAQ
http://wiki.freespire.org/index.php/Linux_Commands
http://www.mjmwired.net/kernel/Documentation
linux uz nema par tisic riadkov, ze by sa dal naucit za chvilku, potrva ti este velmi dlho, kym sa dostanes, povedzme na uroven "zociatocnik" a este dlhsie na dalsie urovne.
Ak sa naozaj chces nieco naucit, tak ako linux je otvoreny, tak aj internet a nic ti nebrani ziskavat stale nove a nove poznatky.
Drzim palce a zatial cakam na urovni zaciatocnika ;-)
no az taky Uplny zaciatocnik niesom ;) regulari ovladam celkom v pohode, vim poznam uz na vyse 5 promile z jeho celkovej funkcionality :-) , bash celkom, resp. z tych linkov, co si mi hodil na bash ovladam vyse 70% z toho, co je tam napisane, robim aj v pythone a ucim sa STLko v c++ sucasne so zakladnymi instrukciami assembleru(aby som pochopil aspon jeden suborcek z v0.01 ) :) takze imho som na urovni uplny zaciatocnik(tentoraz s malym "u" ;-])
skor problem je so 4. linkom ;(linux je (ako si kruto napisal) velmi obsiahly a momentalne neviem absolutne kde zacat...
ja totiz ked nieco sa chcem naucit, tak sa to snazim nakodit...(napr. nechapal som absolutne, ako funguje apache, a aku ma funkciu, tak som si vlatsny server nakodil ;-]) lenze o operacnych systemoch treba vediet omnoho viac ako o nejakom servri :( ja mam imho problem s tym, ze nevidim medzi nikym a nicim suvislost...potreboval by som niekde najst nieco take, kde je napisane, ze co jadro robi(nie ako, ale CO), ktore su jeho klucove subori a funkcie, ktore vykonava a ktore MUSI vykonavat kazdy operacny system, ktore vykonavaju dolezite veci a ktore su len tak "do poctu", resp. niesu uplne nevyhnutne na beh...vsade totiz najdem veci ako napr."jadro sa snazi spravodliho rozdelit procesorovy cas medzi setky procesy", ale uz nikde nenajdem ktory subor to robi, "cia je to parketa", a v tomto pripade AKO to robi...
ale asi je problem v tom, ze viem zatial velmi malo low-level veci a tie mi chybaju, lebo ako poezeram subori, tak s trochou fantazie si domyslim, podla zdrojaku, ze ktora funkcia co vykonava, ale to je len blba kvapka v mori, v ktorej potom nevidim, ze naco je, nevidim voec SUVISLOSTI medzi tou kvapkou a inou kvapkou...
dokaze mi niekto v tejto beznadejnej situacii pomoct aspon popriatim vela stastia :-)), alebo aj inak?
Ale to co ty chces, je bud porozumenie absolutne celemu jadru, alebo mas urcite veci, ktore ta momentalne zaujimaju viac ako tie ostatne..
Ak je to ta druhe varianta, tak na to aby si pochopil vztah medzi tymi dvoma "kvapkami" staci pochopit kvapky medzi nimi, ale ak je to ta prva varianta, tak potrebujes poznat vsetky kvapky v mori. Po prestudovani celeho zdrojaku by si to snad mohol pochopit. ;-)
To, ktore veci su low-level, alebo tie "potrebne", tak to nie su absolutne ziadne! jedine co potrebujes je nejaky mechanizmus, ktory ti spusti kod, ktory si si napisal, pretoze kernel je len dalsi program, ktory obsahuje spolocne veci, ktore vyuzivaju ostatne programy. Cize je to "len" nejake zjednodusenie pre programatorov, ktori by si inak vsetky tie veci museli obsluzit sami (sprava pamate, rozdelenie casu procesoru, komunikaciu s hw, atd.)
linux uz je tak komplikovany, ze sa radsej ani nesnaz pochopit uplne vsetko co je v nom, ale zameraj sa na oblasti, ktore ta zaujimaju a tym sa venuj. Predsa je lepsie vediet jednu, alebo par, veci poriadne, ako vsetko priemerne, resp. podpriemerne ;-)
Takze ak sem napises _konkretne_ veci, ktore ta zaujimaju, takmer s istotou sa tu najde niekto, kto ta bude vediet aspon nasmerovat tym spravnym smerom..
Treba si stanovit priority a postupovat podla nich.
btw.. tiez by som chcel vediet vsetko ;-)
mne dost pomohlo : http://www.cpress.cz/knihy/linux/linux_4.pdf
strany < 669 ... 674 >
PS: ano viem je to _dost_ stare
Architektúra Linuxu
ak teda kces detailne vidiet ako pracuje kernel a hladas nejaky entry-point, klikni tu.
Andrew Tanenbaum - Modern Operating systems
Maurice J. Bach - Navrh operacneho systemu UNIX
dakujem velmi pekne za vsetky odkazy; cital som ich sice pekne dlho, ale fakt mi dost pomohli ;-)
momentalne rozmyslam nad kupou nejakej ten knizky na linux, co poviete linux - dokumentacny projekt stoji za to? viem, ze sa da stiahnut aj normalne ako e-book, ale strasne nerad citam niekolkostostranove e-booky a manualy... alebo mam si kupit radsej taku knizku, ktora nieje ako e-book produkovana? ked poznate nejaku, ktora pokryva dost z linuxu a HLAVNE sa nezaobera blbostami, ako je skriptovanie v bashi, editor vim, atd(strasne ma frustruje ak kupim knizku a su v nej cele kapitoly, ktore ovladam...) tak pls napiste :)
taktiez ked sme uz pritom, chcel by som sa spytat na nejaky rychlomanual[cize len PODSTATNE zaklady] (g)libc, cize nic take otrasne ako http://www.gnu.org/software/libc/manual/ kde je sice popisane vsetko, ale z toho sa mi nechce studovat nic ;(