Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Detaljan proces podizanja Linuksa

[es] :: Linux hardware :: Detaljan proces podizanja Linuksa
(TOP topic, by Dejan Lozanovic)

[ Pregleda: 13764 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.verat.net

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Detaljan proces podizanja Linuksa02.10.2001. u 19:07 - pre 273 meseci
E moze li neko da mi kaze kako ide ceo tok dizanja linuxa, mislim sta se sve i kojim redom ucitava kada nakon Lilo-a na odaberem linux. mislim odakle sve to pocinje i koji se fajlovi ucitavaju i kojim redom.

[Ovu poruku je menjao maksvel dana 02.12.2011. u 14:07 GMT+1]
 
Odgovor na temu

Dragoslav Krunić

Član broj: 225
Poruke: 1083
*.verat.net



Profil

icon Re: Question for Gurus :)02.10.2001. u 19:41 - pre 273 meseci
Jednostavnom pretragom "linux boot process" na Google-u, dosao sam i do
ovog zanimljivog linka:
Sta se desava kada se starta Linux?
gde je sve savim lepo objasnjeno.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Question for Gurus :)02.10.2001. u 22:45 - pre 273 meseci
Nije sve onako kako NIHAD kaze u svom (zanimljivom) tekstu... Odmah da sasecem neke moguce komentare - ja koristim RedHat, ali ono sto sam hteo da kazem je: verovatno ste primetili da covek objasnjava sve sa osvrtom na RedHat Linux distribution... Pa... skoro da sve Linux distribucije tako funkcionisu kako je on napisao, ali nije tako... Normalno, neke "lowlevel" stvari su iste za sve Linux-e, jer kad bi se te stvari promenile onda to ne bi bio Linux, ali mnoooge stvari koje covek pominje u svom tekstu NISU iste u drugim distribucijama!
Recimo, kuci koristim pored RedHat-a i SlackWare, Stampede i Debian, i, verujte svaka od pomenutih distribucija ima neke svoje "bubice"...

Ukratko:
1) LILO (u tekstu pise da se nalazi u MBR, na prvom disku i tako dalje sto takodje NE MORA DA BUDE TACNO!) startuje boot proces
2) bootuje se kernel
3) kernel montira svoj fajlsistem
i to je to, nakon toga razne Linux distribucije rade po svome. Tacno, sve je to slicno, ali postoje i razlike!

Moj predlog je da ako niste RedHat korisnici ne citate ovaj tekst. Jer ce samo vise (verovatno) da vas zbuni...

Ovde svracaju ljudi koji koriste neke druge distribucije vise, i mozda bi bilo bolje da nam oni objasne malo vise kako (recimo Alex koristi Debian-a koliko se secam...) njihova distribucija "funka"

Pozdrav

Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
*.mt.net.mk

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Question for Gurus :)03.10.2001. u 03:45 - pre 273 meseci
Da init scripte su razlicite za svih ... mislim ako jedino sporegjujes RH sa Mandrakom ...
u svakom slucaju ... najbolje init skripte ima Slack ...
svigja mi se to sto su linearno ( isto kao kod FreeBSD-a )
i najlakse za sredzivanje ...

a i to je najmarkantnije nesto u cemu se razlikuju distroa u boot procesu


People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

random
Vladimir Vrzić
Beograd

Član broj: 85
Poruke: 3866
194.106.163.*

Sajt: www.last.fm/user/vrza


+4 Profil

icon Re: Question for Gurus :)03.10.2001. u 14:05 - pre 273 meseci
Ma tekst je prilično loš — samo jedan pasus je potrošio na sve što se dešava otkako se upali računar do trenutka kad se podigne init, pa je onda naširoko prepričavao RH init skriptove, koje možeš i sam da pročitaš. Mnogo je zanimljivije reći, npr. da LILO nije jedini način da se podigne kernel (tu su loadlin loadlin, grub). A čak i ako se koristi LILO, i tu ima mnogo šta da se kaže.

1) Računar se upali, x86 procesor inicijalizuje sve svoje registre, bafere i cache na neke default vrednosti i ulazi u realni mod. IP (instruction pointer) registar se postavlja na 0xFFF0, CS (segmentni registar) dpokazuje na baznu adresu 0xFFFF0000 — i izvršavanje instrukcija znači počinje na adresi 0xFFFFFFF0, a to je početna adresa dela memorije gde je čipset mapirao EPROM. Kôd u EPROMu uglavnom setuje IDT (deskriptor tabelu prekidnih rutina) i zatim startuje BIOS. BIOS uradi POST, zatim na osnovu informacija pohranjenih u CMOS-u bira disk sa koga će se bootovati sistem. Čita prvi sektor 512 bajtova sa tog diska (koristeći interapt 19h) — u slučaju hdd-a to je tzv. Master Boot Record — oni se mapiraju u memoriju na adresu 0x7C00 i izvršava ih kao čist real-mode asm. Zapravo pre no što počne da ih izvršava proveri da li su dva zadnja bajta u sektoru AA55h, što je neka gruba provera da li je u pitanju butabilan disk ili ne. Zadatak ovih 512 bajtova je, recimo ako je u slučaju LILO, da prvo učitaju ostatak kôda za bootloader (jer ne može ceo onaj meni i kôd za parsiranje opcija da stanu u 512B, probajte da napravite LILO sa 20 kernela), koji se nalazi u /boot pri instalaciji LILO-a, pri čemu LILO pamti fizičke adrese tih fajlova, kao i kernel image-a, jer, opet, u 512B ne može da se smesti drajver za ext2fs.

2) Kad je LILO učitan, radi parsiranje opcija i njihovo predavanje kernelu (samo o ovome postoji čitav jedan HOWTO!). Najvažnija od ovih opcija je navođenje particije koja će biti privremeno mountovana kao / i sa koje će se učitati init, kao i informacije o zahtevanom video modu.

3) Lilo startuje kernel. Kernel je zapravo jedan (ne)običan program, možete ga gledati kao jednu vrstu izvršnog fajla. Prvi deo Linux kernela je napisan u asm-u (arch/i386/boot/bootsect.S). Ovaj kôd učita prvo sebe na adresu 0x90000, i ostatak kernela na 0x10000. Prikazuje se poruka „Loading....”. Zatim se izvršava kôd iz boot/Setup.S. Ovaj kôd identifikuje neke najosnovnije podatke o sistemu, kao i tip grafičke karte. Ako mu je predata odgovarajuća opcija on traži od korisnika da izabere VGA mod za konzolu. Zatim kopira ceo sistem sa 0x10000 na 0x1000, prebacuje sistem u protected mode, zatim postavlja EIP na 0x1000 i tu se nastavlja podizanje sistema.

4) Eto nas u protected modu! Kôd na adresi 0x1000 je onaj iz boot/head.S, služi da inicijalizuje registre i raspakuje kernel (decompress_kernel() funkcija koja koristi kôd iz inflate.c, unzip.c i misc.c). Raspakovani kernel ide na adresu 0x100000.

5) Inicijalizuju se tabele prekidnih rutina, paging, identifikuju se procesor i koprocesor, i startuje se start_kernel() funkcija (i iz nje se više nikad ne izađe). Tu se radi inicijalizacija memorije, IRQ kanala, schedulera, svih drajvera, kao i parsiranje opcija komandne linije (koje je kernelu predao LILO), i još neke stvari. Tu se negde pri kraju i mountuje inicijalno root particija kao read-only.

6. Kernel "ručno" kreira proces sa rednim brojem 0 (idle process). Prelazi u user mode, gde idle process fork()-uje init (koji dobija PID 1). Tradicionalno na UNIX sistemima proces 0 (koji je jedini proces na bilo kom UNIXu koji se ne kreira pomoću fork() sistemskog poziva), kada fork()-uje init, postaje proces po imenu swapper i kontroliše rad sa virtuelnom memorijom.

7. init proces pokušava da exec()-uje program koji mu je zadat parametrom init=<nešto>, ili /sbin/init ako ovaj parametar nije prosleđen. Ako ne nađe init program eventualno će pokušati da fork()-uje interaktivni shell.

8. Ako ga nađe, init se startuje (poruka INIT: version x.xx booting) i izvršava prvi rc skript — od ove tačke nadalje već sve zavisi od distribucije.

9. Dalje neću da pišem, pročitajte init skriptove.

Eto, ovo je samo pogled iz aviona na ono što se dešava pri bootovanju Linuxa, a ipak je u poređenju sa tim onaj tekst pogled iz svemirskog broda u orbiti oko Plutona. E, da, ako ima grešaka, konsultovao sam ovde Kernel Hacker's Guide (potražiti na linuxdoc.org), pa je moguće da se nešto sitno promenilo do verzije 2.4, ali u principu je to to.


[Ovu poruku je menjao random dana 09.01.2003. u 21:08 GMT]
int rand(void);

Those who do not understand Unix are condemned to reinvent it, poorly.

Upali lampicu — koristi Jabber!
 
Odgovor na temu

anon315

Član broj: 315
Poruke: 1657
*.ppp-bg.sezampro.yu



+13 Profil

icon Re: Question for Gurus :)06.10.2001. u 02:44 - pre 273 meseci
CLAP CLAP CLAP ! :)
 
Odgovor na temu

some1else
</id>
WaterMelon Studios
Slovenia, Europe

Član broj: 7394
Poruke: 1
*.cable.amis.net

ICQ: 143620200
Sajt: www.some1else.tk


Profil

icon Re: Question for Gurus :)12.01.2003. u 14:22 - pre 258 meseci
random. vrlo dobar detaljan opis.
thank you. respect
I must have booted into a wrong universe, this one seems to be operating against me..
 
Odgovor na temu

pera detlich
Woody Woodpecker

Član broj: 3905
Poruke: 50
*.dkts.co.yu.



Profil

icon Re: Question for Gurus :)15.07.2005. u 13:23 - pre 227 meseci
Citat:
random: Ma tekst je prilično loš — samo jedan pasus je potrošio na sve što se dešava otkako se upali računar do trenutka kad se podigne init, pa je onda naširoko prepričavao RH init skriptove, koje možeš i sam da pročitaš. Mnogo je zanimljivije reći, npr. da LILO nije jedini način da se podigne kernel (tu su loadlin loadlin, grub). A čak i ako se koristi LILO, i tu ima mnogo šta da se kaže.

...[snap]...

4) Eto nas u protected modu! Kôd na adresi 0x1000 je onaj iz boot/head.S, služi da inicijalizuje registre i raspakuje kernel (decompress_kernel() funkcija koja koristi kôd iz inflate.c, unzip.c i misc.c). Raspakovani kernel ide na adresu 0x100000.


...hteo bih da pokusam da osvetlim jednu celu oblast koja je ispustena iza tacke 4, a ispred tacke 5... i da time upotpunim sliku podizanja sistema u linuxu... ne dekompresuje se samo kernel, nego se dekompresuje i inicijalni ram disk, u daljem tekstu naveden primer -> initrd-2.6.8-24-default... ovo je primer inicijalnog ramdiska koji se nalazi u SUSE 9.2 distribuciji, u /boot direktorijumu:

# ls -al
total 8980
drwxr-xr-x 3 root root 4096 2005-01-19 11:10 .
drwxr-xr-x 20 root root 4096 2005-07-15 07:02 ..
-rw-r--r-- 1 root root 512 2005-01-19 11:10 backup_mbr
lrwxrwxrwx 1 root root 1 2005-01-19 10:30 boot -> .
-rw-r--r-- 1 root root 57527 2004-10-06 14:30 config-2.6.8-24-default
-rw-r--r-- 1 root root 18071 2004-10-06 13:31 config-2.6.8-24-um
drwxr-xr-x 2 root root 4096 2005-01-19 11:10 grub
lrwxrwxrwx 1 root root 23 2005-01-19 11:10 initrd -> initrd-2.6.8-24-default
-rw-r--r-- 1 root root 1208589 2005-01-19 11:10 initrd-2.6.8-24-default

-rwxr-xr-x 1 root root 2954844 2004-10-06 13:31 linux-2.6.8-24-um
-rw-r--r-- 1 root root 67648 2004-10-02 03:20 memtest.bin
-rw-r--r-- 1 root root 94720 2005-01-19 11:10 message
-rw-r--r-- 1 root root 79149 2004-10-06 14:31 symvers-2.6.8-24-i386-default.gz
-rw-r--r-- 1 root root 20 2004-10-06 13:31 symvers-2.6.8-24-um-um.gz
-rw-r--r-- 1 root root 739535 2004-10-06 14:17 System.map-2.6.8-24-default
-rw-r--r-- 1 root root 472390 2004-10-06 13:29 System.map-2.6.8-24-um
-rw-r--r-- 1 root root 1855692 2004-10-06 14:30 vmlinux-2.6.8-24-default.gz
lrwxrwxrwx 1 root root 24 2005-01-19 10:42 vmlinuz -> vmlinuz-2.6.8-24-default
-rw-r--r-- 1 root root 1556001 2004-10-06 14:17 vmlinuz-2.6.8-24-default

...dakle, ja sam u Linuxovom Command Line Interface-u raspakovao file initrd-2.6.8-24-default umesto, predpostavljam, decompress_initrd() funkcije, koja se izvrsava NEPOSREDNO nakon decompress_kernel() funkcije... obicno se to radi na adresi 0x200000, ukoliko je velicina kernela manja od jednog megabajta...

...osnovna funkcija inicijalnog ramdiska je da kernelu omoguci inicijalni File System... jer kernel NE moze da u sebi sadrzi sve moguce drivere za pristup device-ovima... recimo SCSI ili IDE diskovima na kojima se nalazi ReadWrite FileSystem... zato kernel i koristi inicijalni ram disk koji se nalazi u memoriji, i koji "glumi" FS, mountuje / na isti, kao ReadOnly...

...raspakovani initrd-2.6.8-24-default izgleda ovako:

# ls -al
total 23
drwxr-xr-x 9 root root 1024 2005-01-19 11:10 .
drwxrwxrwx 5 root root 4096 2005-07-15 13:14 ..
drwxr-xr-x 2 root root 1024 2005-01-19 11:10 bin
drwxr-xr-x 3 root root 1024 2005-01-19 11:10 dev
drwxr-xr-x 3 root root 1024 2005-01-19 11:10 etc
drwxr-xr-x 4 root root 1024 2005-01-19 11:01 lib
-rwxr-xr-x 1 root root 5171 2005-01-19 11:10 linuxrc
drwxr-xr-x 2 root root 1024 2005-01-19 11:10 proc
-rwxr-xr-x 1 root root 4400 2004-10-02 02:52 run_init
drwxr-xr-x 2 root root 1024 2005-01-19 11:10 sbin
drwxr-xr-x 2 root root 1024 2005-01-19 11:10 sys

# ls -al bin
total 222
drwxr-xr-x 2 root root 1024 2005-01-19 11:10 .
drwxr-xr-x 9 root root 1024 2005-01-19 11:10 ..
lrwxrwxrwx 1 root root 27 2005-01-19 11:10 ata_identify -> /lib/klibc/bin/ata_identify
lrwxrwxrwx 1 root root 18 2005-01-19 11:10 cat -> /lib/klibc/bin/cat
-rwxr-xr-x 1 root root 38564 2004-10-02 15:16 chmod
lrwxrwxrwx 1 root root 24 2005-01-19 11:10 devnumber -> /lib/klibc/bin/devnumber
lrwxrwxrwx 1 root root 17 2005-01-19 11:10 ln -> /lib/klibc/bin/ln
-rwxr-xr-x 1 root root 27836 2004-10-02 15:16 mkdir
-rwxr-xr-x 1 root root 25528 2004-10-02 15:16 mknod
-rwsr-xr-x 1 root root 87704 2004-10-02 03:50 mount
-rwxr-xr-x 1 root root 38573 2004-10-02 15:16 rm
lrwxrwxrwx 1 root root 22 2005-01-19 11:10 scsi_id -> /lib/klibc/bin/scsi_id
lrwxrwxrwx 1 root root 18 2005-01-19 11:10 sed -> /lib/klibc/bin/sed
lrwxrwxrwx 1 root root 17 2005-01-19 11:10 sh -> /lib/klibc/bin/sh
lrwxrwxrwx 1 root root 20 2005-01-19 11:10 sleep -> /lib/klibc/bin/sleep
lrwxrwxrwx 1 root root 21 2005-01-19 11:10 umount -> /lib/klibc/bin/umount

# ls -al dev
total 3
drwxr-xr-x 3 root root 1024 2005-01-19 11:10 .
drwxr-xr-x 9 root root 1024 2005-01-19 11:10 ..
crw------- 1 root root 5, 1 2005-01-19 11:10 console
crw-rw---- 1 root root 29, 0 2005-01-19 11:10 fb0
brw-rw---- 1 root root 9, 0 2005-01-19 11:10 md0
crw-rw-rw- 1 root root 1, 3 2005-01-19 11:10 null
lrwxrwxrwx 1 root root 4 2005-01-19 11:10 ram -> ram0
brw-rw---- 1 root root 1, 0 2005-01-19 11:10 ram0
brw-rw---- 1 root root 1, 1 2005-01-19 11:10 ram1
brw-rw---- 1 root root 1, 2 2005-01-19 11:10 ram2
lrwxrwxrwx 1 root root 4 2005-01-19 11:10 ramdisk -> ram0
drwxr-xr-x 2 root root 1024 2005-01-19 11:10 shm
crw--w---- 1 root root 4, 1 2005-01-19 11:10 tty1
crw--w---- 1 root root 4, 2 2005-01-19 11:10 tty2
crw-r--r-- 1 root root 1, 5 2005-01-19 11:10 zero

...dalje da listam sadrzaj ne bih... koga interesuje detaljan mehanizam moze da mi postavi pitanja, a ja se nadam da cu umeti da odgovorim na pitanja... :b

...uocite da je zadatak inicijalnog ram diska da podigne HDD driver:

# pwd
/home/default_user/root_mntpoint/rootfs/lib/modules/2.6.8-24-default/kernel/drivers/scsi
# ls -al
total 223
drwxr-xr-x 2 root root 1024 2005-01-19 11:10 .
drwxr-xr-x 3 root root 1024 2005-01-19 10:42 ..
-rw-r--r-- 1 root root 50083 2004-10-06 14:30 libata.ko
-rw-r--r-- 1 root root 10996 2004-10-06 14:30 sata_nv.ko
-rw-r--r-- 1 root root 140188 2004-10-06 14:30 scsi_mod.ko
-rw-r--r-- 1 root root 20785 2004-10-06 14:30 sd_mod.ko

...ovo sto vidite su driveri za Serial ATA HDD, i za SCSI mod rada... ekstenzija @.ko se cita kao kernel object...

...kada se odradi ovaj korak, onda kernel unmountuje / sa ovoga privremenog File Sistema, i mountuje / na HDD File System, kao ReadWrite...

...toliko zasada od mene, a ja se nadam da sam uspeo [u pokusaju] da vam svima osvetlim jednu od oblasti koja je i nakon svega ostala u dubokom mraku... :)

...vas odani pera detlich, 3905! :))

Ko shvata znace, ko zna razumece, ko razume shvatice
 
Odgovor na temu

[es] :: Linux hardware :: Detaljan proces podizanja Linuksa
(TOP topic, by Dejan Lozanovic)

[ Pregleda: 13764 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.