Ez a rész nem igazán érdekes az átlagos "Józsi, otthoni PC-felhasználó" számára, inkább irányul azok felé, akik számítógép-tudományos háttérrel rendelkeznek.
A betöltési folyamat a következő: CPU-> VGA-> Power-On-Self-Test-> SCSI-> Boot Manager-> Lilo boot loader-> kernel-> init-> bash. A firmware és szoftver programok különböző üzeneteket adnak, amikor a számítógép és a Linux életre kel.
A Linux betöltési folyamatának részletes bemutatása:
Az alaplapon lévő BIOS előidézi a videokártya BIOS inicializálását
Az alaplapon lévő BIOS inicializálja önmagát
Az SCSI vezérlőn lévő BIOS inicializálja önmagát
Hardveres összegzés: az alaplapi BIOS ezután kiírja a következő összegzést a hardver tartalmáról. Majd futtatja a vírusellenőrző kódját, ami megváltozott indítószektorokat (boot sector) keres (ha engedélyezve van - a lektor).
BootManager menü : a Master Boot Record (MBR) kiolvasásra kerül az első merevlemezen, a DOS hagyományaihoz híven, a 0x00007c00 címre, és a processzor elkezdi végrehajtani az ott leírt utasításokat. Ez az MBR betöltőkód beolvassa az aktív DOS partíció első szektorában lévő kódot.
A Lilo elindul: ha a Linuxot választottad és ha azt a LILO-val telepítetted, akkor betöltődik a 0x00007c00 címre. A Lilo kiírja a LILO üzenetet az előrehaladásáról, egyenként írva ki a betűket. Az első "L" betűt akkor írja ki, miután a Lilo átmozgatta magát egy jobb helyre, mint például a 0x0009A000 címre. Az "I" jelenik meg, mielőtt elkezdené a másodszintű betöltőkódját. A másodszintű betöltő írja ki a következő "L"-t, betölti a rendszermag részeire mutató leírókat, és végül kiírja a végső "O" betűt. A leírók a 0x0009d200 címen helyeződnek el. A rendszerindítási üzenet és a parancssor, ha úgy adták meg, kiíródik. A "tab" megnyomása a promptnál teszi lehetővé, hogy a felhasználó rendszert válasszon, és parancssori opciókat adjon át a rendszermagnak, a meghajtóinak és az "init" programnak. Ezen kívül környezeti változók is megadhatók ennél a pontnál.
A következő sor a /boot/message fájlból származik: > > > Press to list available boot image labels. (Nyomj Tab-ot a kiválasztható rendszerindító fájlok (boot image) címkéinek megtekintéséhez) A következő sor az /sbin/lilo promptjából származik: boot: Figyelem: ha a Lilo-t nem használjuk, akkor a rendszermag elejébe, a linux/arch/i386/boot/bootsect.S-be épített kód kiírja a "Loading" üzenetet és folytatja. A Lilo kiírja a következőt, amint tölti be a rendszermag kódját. A "Linux-2.2.12" szöveget a "label=..." megadásából veszi a lilo.conf-ból. Loading linux-2.2.12.......... |
A /linux/arch/i386/boot/setup.S fájlban található rendszermag-kód végzi el az átkapcsolást a processzor valós (DOS) módjából a védett (teljes 32 bites) üzemmódba. A Trampoline.S és Trampoline32.S nevű kódrészek segítik az átkapcsolást. A kisebb rendszermag fájlok (zImage) kitömörítődnek, és betöltődnek a 0x00010000 címre. A nagyobb fájlok (bzImage) ehelyett a 0x00100000 címre töltődnek. Ez a kód állítja be a regisztereket, kicsomagolja a tömörített rendszermagot (aminek az elején a linux/arch/i386/head.S található), kiírja a következő két sort a linux/arch/i386/boot/compressed/misc.c fájlból:
Uncompressing Linux... Ok. Booting the kernel. |
Processzor, konzol és memória inicializálása: ez futtatja a linux/arch/i386/head.S-et, ami azonnal elugrik a linux/init/main.c fájlban lévő start_kernel(void) függvényhez, ahol a megszakításokat újradefiniálják. A linux/kernel/module.c ezután betölti a konzol és a PCI busz meghajtóit. Ettől a ponttól kezdve a rendszermag üzenetei a memóriában is tárolódnak, és hozzáférhetők a /bin/dmesg használatával. Általában később átkerülnek a /var/log/message fájlba is, végső tárolásra.
A PCI busz inicializálása: a linux/init/main.c fájlban lévő mpci_init() függvény váltja ki a következő, a linux/arch/i386/kernel/bios32.c fájlban lévő sorok kiírását:
Hálózat inicializálása: a linux/init/main.c fájlban lévő socket_init() függvény végzi el a hálózat inicializálását:
linux/net/socket.c prints: Linux NET4.0 for Linux 2.2 Based upon Swansea University Computer Society NET3.039 linux/net/unix/af_unix.c prints: NET4: Unix domain sockets 1.0 for Linux NET4.0. linux/net/ipv4/af_inet.c prints: NET4: Linux TCP/IP 1.0 for NET4.0 IP Protocols: ICMP, UDP, TCP linux/net/ipv4/ip_gre.c prints: GRE over IPv4 tunneling driver linux/net/core/dev.c prints: early initialization of device gre0 is deferred linux/net/core/rtnetlink.c prints: Initializing RT netlink socket |
A Kernel Idle Thread (üresjárati szál, a 0. folyamat) elindulása: ennél a pontnál egy rendszermag-folyamat indul el, ami az init() függvényt futtatja, ami a linux/init/main.c fájlban definiált rutinok egyike. Ez az init() nem összetévesztendő az /sbin/init programmal, ami a rendszermag elindulása után kezd el futni. A linux/init/main.c fájlban lévő mkswapd_setup() függvény váltja ki a következő, a linux/mm/vmscan.c fájlból származó sorok kiírását: Starting kswapd v1.5
Eszközmeghajtók inicializálása: a linux/arch/i386/kernel/setup.c rendszermag-rutin ezek után inicializálja az eszközöket és a fájlrendszereket (beépítve a rendszermagba??). A következő sorokat állítja elő, majd elágazik (fork) az /sbin/init-re:
Általános párhuzamos port inicializálás: a linux/drivers/misc/parport_pc.c párhuzamos port inicializáló rutin írja ki a következőket:
Karakteres eszközök inicializálása: a következő 3 sor a linux/drivers/char/serial.c fájlból származik:
Block Device Initializations : linux/drivers/block/rd.c prints: RAM disk driver initialized: 16 RAM disks of 8192K size linux/drivers/block/loop.c prints: loop: registered device at major 7 linux/drivers/block/floppy.c prints: Floppy drive(s): fd0 is 1.44M, fd1 is 1.44M FDC 0 is a post-1991 82077
SCSI busz inicializálása: a következő sorok a linux/drivers/scsi alkönyvtárban lévő aic7xxx.c, scsi.c, sg.c, sd.c vagy sr.c fájlokból származnak:
A rendszermag Point-To-Point protokoll támogatásának inicializálása: a következő inicializálást a linux/drivers/net/ppp.c végzi.
A merevlemez-elrendezés vizsgálata: a következő sorok a linux/drivers/block/genhd.c fájlból származnak:
Init Program (Process 1) Startup : The program /sbin/init is started by the "idle" process (Process 0) code in linux/init/main.c and becomes process 1. /sbin/init then completes the initialization by running scripts and forking additional processes as specified in /etc/inittab. It starts by printing: INIT: version 2.76 booting and reads /etc/inittab.
A Bash parancsértelmező indulása: a bash shell, a /bin/bash indul el ezek után. A feléledése az /etc/profile szkript végrehajtásával kezdődik, ami beállítja a rendszerszintű környezeti változókat:
Nézd meg a következő forrásokat:
The Linux Boot Process (A Linux betöltési folyamata)
Bootdisks and Boot Process (Indítólemezek és a betöltési folyamat)
Linux Boot Process - by San Gabreil LUG (Linux betöltési folyamat - írta San Gabreil LUG)
Boot Process (Netmag) (Betöltési folyamat (Netmag))
Boot Process (LUG Victoria) (Betöltési folyamat (LUG Victoria))
Előző | Tartalomjegyzék | Következő |
Telepítés, frissítés fénysebességgel, az apt-get segítségével (Redhat, Debian, Suse, Mandrake, egyéb) | Eme dokumentum más formátumai |