boot kernelu
    Dan Lukes 
    dan at obluda.cz
       
    Mon Aug 27 08:05:40 CEST 2007
    
    
  
Radim Kolar napsal/wrote, On 08/19/07 18:27:
> potrebuji umet nabootovat freebsd kernel
	Mysleno "vytvorit si vlasni loader" ?
> When the boot program starts the FreeBSD kernel running, it sets up
> only two components of the machine state:
> 1. All interrupts are blocked.
> 2. The hardware address-translation facility is disabled so that all
> memory references are to physical memory locations.
> 
> The boot program also passes to the kernel the identity of the boot
> device and a set of boot flags. The FreeBSD kernel presumes nothing
> else about the state of the machine on which it is running.
	Pokud si cely loader pises sam tak predpokladam, ze to budes delat co 
nejednodussi a budes pro zacatek vytvaret pouze stage 1 a 2 loader. 
Nakonec, ten uz na nahrani kernelu staci, i kdyz bez moznosti 
"pridavnych modulu". Ale to u takhle specialniho nasazeni asi tolik 
nevadi - proste vse potrebne zakompilujes (a moznost nahravat moduly po 
startu tim dotcena neni).
	Vlastni volani najdes v btx.S, funkce intx30 - to je loaderovy syscall, 
ktery "umi" jen dve funkce - exec a exit.
> pravdepodobne tedy predavam spatne boot device nebo boot flags. Ty jsem ovsem nikde zdokumentovane nenasel.
> Potreboval bych proto nekde zjistit hodnoty techto dvou parametru s
> kterymi to bootuje napriklad z hard disku.
	Ten syscal je volani funkci __exec(), a to volani najdes v boot2.c na 
konci funkce load(). Z toho je jasne jake parametry se predavaji kernelu 
pri startu na zasobniku. Ten prvni parametr je vstupni adresa a 
nasleduje sest parametru. Pokud si je chces zobrazit, tak spravne misto 
na vypsani je tady - nakonec - tady uz/jeste funguje printf() ...
	Pozor, tesne pred volanim kod vypne strankovani - nejsem si jisty, zda 
ten printf() funguje i za tehle situace, takze moezna ho bude treba 
umistit kousek vys, pred to vypnuti.
	Ta adresa, kterou tenhle __exec() vola odpovida startu .text segmentu. 
Zdrojovy kod toho startu najdes v i386/i386/locore.s - hledej '.text' 
nebo "This is where the bootblock start us"
	Doporucuju kouknout na komentar funkce recover_bootinfo tamtez - neda 
se sice rict, z eby tam parametry byly zdokumentovane, al eneco malo se 
tam o tom pise.
	Nez system dojde do Romanem zminene funkce mi_startup() tak to preci 
jen udela docela dost operaci
	Pokud bys chtel tisknout v teto casti kodu, pak ne drive nez po volani 
init386, ktere pripravi potrebny environment. Je ale asi zbytecne se v 
tom patlat takhle, melo by stacit napsat si modul, ktery ti vypise 
globalni kernelove promenne, to kterych je tahle informace ulozena. Kdyz 
uz si je nevypises debuggerem ...
> Taky je mozne ze spatne nahravam ELF jadro... ale abych zjistil kde je
> chyba potreboval bych znat spravne hodnoty techto 2 parametru s
> kterymi to netuhne.
	Treba to bude tuhnout, i kdyz to zavolas se spravnymi parametry ;-)
						Dan
	
-- 
Dan Lukes                                               SISAL MFF UK
AKA: dan at obluda.cz, dan at freebsd.cz, dan at (kolej.)mff.cuni.cz
    
    
More information about the Users-l
mailing list