Kde je fyzicky kernel ?

Martin Mares mj na k332.feld.cvut.cz
Pondělí Prosinec 9 12:24:02 CET 1996


Hello, world!

> aby zde take padla nejaka otazka o Linuxu (coz je podle mne to, co mame
> umisteno v adresari /boot pripadne / pod nazvem /vmlinuz ci podobne), chtel
> bych se zeptat na nasledujici veci:
> 
> 	1. Ze se po nabootovani Linuxu na adrese 0x90000 nachazi bootsektor
> a na 0x90200 je setup a od 0x10000 do 0x8f000 se nachazi komprimovany kernel
> jeste chapu, ale je mi zahadou, co se nachazi od 0x8f000 do 0x8ffff a proc
> zrovna je velikost komprimovaneho kernelu omezena timto (0x7f0 = 508KB) a
> kam se potom premisti dekomprimovany kernel ? Na 1MB (0x100000) ???

   Tradicni postup bootovani kernelu z diskety u 2.0.X je nasledujici:
(pouzije-li se LILO, je to obdobne)

	(1) BIOS nahraje boot-sector (boot.S) na 0x7c00 a spusti jej
	(2) Boot-sektor premisti sam sebe od 0x90000, zasobnik umisti
	    pod sebe sama.
	(3) Modul "setup" (setup.S) je nahran od 0x90200
	(4) Zbytek jadra je nahran od 0x10000 -- maximalni velikost
	    jadra je tedy 0x80000 minus 4KB na zasobnik.
	(5) Nasledne se spusti setup, ten vytahne z BIOSu ruzne
	    parametry typu informace o discich apod., ty ulozi na misto
	    puvodniho boot-sectoru.
	(6) Setup prepne CPU do protected-modu a spusti kernel od zacatku,
	    dostane se do arch/i386/boot/compressed/head.S, zavola se
	    dekompresni rutina, ktera kernel rozpakuje na 0x100000
	    a nasledne tam skoci.
	(7) Tim se dostavame do arch/i386/kernel/head.S, data z 0x90000
	    se presouvaji do empty_zero_page a programuje se MMU, cimz
	    se cely adresni prostor kernelu objevuje od 0xc0000000.
	(8) Poustime init/main.c, funkci start_kernel -- happy end.

   Pokud se bootuje big kernel image (bzimage), je nahran na 0x100000,
rozpakuje se za spakovanou verzi a nasledne je presunut na 0x100000
a spusten tamtez, jako by to bzimage nebyl.

> 	2. Pry se vyse uvedena filosofie zmenila v 2.1.x. Co je na tom
> pravdy? Bohuzel nemam zrovna moc casu nazbyt na studovani 2.1.x \ldots 

   O zmene tohoto ve 2.1.X nic nevim -- pokud je mi znamo, jedine, co se
zmenilo, bylo rozdeleni adresniho prostoru na uzivatelksou a systemovou
oblast -- puvodne se pouzivaly dva ruzne segmenty, ve 2.1.X jiz pouze
jeden (zrychleni...).

> 	3. Jake pouzivate disassemblery ? Mate nekdo nejaky lepsi nez ndisasm
> ?    ... nejak divne mi radkuje editor :-)))

   Ja pouzivam objdump --disassemble.

								Martin


Další informace o konferenci Linux