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