Avatar billede mse Nybegynder
25. august 2004 - 13:35 Der er 4 kommentarer og
1 løsning

Start af Linux kernel fra bootloader. Hvordan gøres dette.

Hejsa Folkens

Jeg 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
Avatar billede strych9 Praktikant
25. august 2004 - 16:14 #1
synes du skal kigge på source koden til Syslinux af Peter Anvin.

og hvorfor egentlig lave det her når det allerede eksisterer?
Avatar billede mse Nybegynder
26. august 2004 - 10:22 #2
Hvad skal jeg se på? Tænker du på en bestemt fil?
Jeg er allerede igang med uCLinux nemlig.
Har du et link til der hvor jeg kan hente koden til det der allerede eksistere???
Avatar billede strych9 Praktikant
26. august 2004 - 12:49 #3
Jeg skulle køre Linux fra compact flash i en net4501 (www.soekris.com) på et tidspunkt. Til det benyttede jeg syslinux til at lokalisere kernel på compact flash kortet, og dernæst udpakke en tgz fil med et ext2 filsystem pakket sammen i en enkelt fil og dernæst mountet via loopback.
Siden du er igang med uCLinux tror jeg vist ikke at dine behov er så meget anderledes end ovenstående?

Syslinux findes her: http://syslinux.zytor.com/

Men hvilken fil du skal kigge i ved jeg ikke. Husk dog at Syslinux er under GPL licens og at alle ændringer i sourcekoden skal frigives.

Husk også at: SYSLINUX is probably not suitable as a general purpose boot loader. It can only boot Linux from a FAT filesystem, and not, for example, ext2.

Det er vel prisen for small footprint..
Avatar billede mse Nybegynder
01. september 2004 - 08:41 #4
Nå fik linkeren til at bruge en offset på 0x100000. Derefter kunne jeg godt starte min kerne op.
Avatar billede mse Nybegynder
01. september 2004 - 08:43 #5
hr
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester