Start af Linux kernel fra bootloader. Hvordan gøres dette.
Hejsa FolkensJeg har lavet en bootloader som læser en pakket fil fra en flash. Mens filen læses deflates den samtidig til adr: 0x1100000 i min SDRAM. Når Linux kernen(jep det var den der var pakket) er på plads i hukommelsen. Kalder jeg "(*kernelInit)();" som er en funktions pointer der peger på 0x1100000
Lidt kode forud for selve kaldet:
***************************
int (*kernelInit)();
kernelInit = 0x1100000;
***************************
Er dette overhovedet måden at gøre det på??? Jeg får startet noget op, men det er sq ikke min kerne.
Har kigget lidt rundt på nettet og fundet at _start er den der skal kaldes som det første. Og af hvad jeg kan se i min system.map så ligger _start på 0x1000000(i SDRAM). Ja 0x1000000, men jeg kopiere den binære fil ind i SDRAM med en offset på 0x100000, kan dette betyde noget?
Det jeg selv konkludere er at jeg jo åbenbart ikke må kopiere en binær fil med en offset og så prøve at køre den. Men hvordan H compiler jeg så min Linux kerne til at ligge sig et andet sted i SDRAM'en???
SYSTEM.MAP
*************************************
000001d0 A fat_destroy_inodecache
00000210 A microtronix_mtd_cleanup
001714d8 A _kernel_footprint
00200000 ? _romfs
00200000 ? _romfs_end
01000000 T __ram_start
01000000 T _rambase
01000000 T _ramstart
01000000 T _start
01000000 T _stext
01000000 T text_start
01000010 t text_flush
01000038 t data_flush
01000044 t NR_MoveStart
01000048 t chkadr
01000068 t loop_move
0100008c t finish_move
01000118 t check_bugs
01000120 t rest_init
01000150 t do_pre_smp_initcalls
01000168 t run_init_process
010001b8 t init
.
.
.
OSV
*************************************
Håber der er et par hajer derude der har prøvet noget i stil med dette før :o)
De venligste hilser
GreateWhite.DK