Malý Kernel v NASM – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Malý Kernel v NASM – Assembler – Fórum – Programujte.comMalý Kernel v NASM – Assembler – Fórum – Programujte.com

 

_Radek_
~ Anonymní uživatel
88 příspěvků
25. 10. 2012   #1
-
0
-

Zdravím

nevím jestli se to hodí zrovna do téhle sekce, ale pokusím se popsat můj problém.

Na škole teď máme programování v NASM assembleru, tak jsem se v rozhodl napsat si maličký kernel, abych do toho pronikl.

Bootloader a ostatní kód funguje jak má, ale dostal jsem se do bodu, kdybych do toho chtěl zamontovat i nějaký kód napsaný v jazyku C.

Mám hlavní kód, který by měl zařídit co je třeba a pak skočit na kód funkce main, která je již napsaná v C. Ten překládám pomocí gcc.

Nyní hádám, že potřebuji linker, aby mi jakoby spojil oba dva soubory (asm a C) a správně ošetřil adresy atd. Našel jsem několik tutoriálů, hlavně na osdev.net, ty mě ale nefungují. Buď to píše, že výsledný formát, který vyhodí nasm překladač vyhodí gnu linker nezná, nebo neumí operaci provést, protože nelze použít PE operaci na ne-PE výsledný soubor.

Nevíte někdo o nějakém článku, který opravdu funguje ? Nebo přímo jak slinkovat dané zdrojové kódy ?

Dík za jakékoliv postrčení

Nahlásit jako SPAM
IP: 2001:67c:1220:c1b0:a:752f...–
_Radek_
~ Anonymní uživatel
88 příspěvků
26. 10. 2012   #2
-
0
-

Tak se omlouvám za předčasný dotaz, vyřešil jsem to jiným "nářadím". Stáhnul jsem si DJGPP linker, který vypadá že funguje.

Když se po překladu podívám na výsledný kód assembleru, vypadá to, že všechny instrukce jsou tak jak mají být.

Jen nemůžu linker přinutit, aby paměťová místa počítal od adresy 0x1000 (tam kde je můj kernel v paměti). Všechny adresy ve výsledné binárce jsou počítané od místa 0x0000. Neví někdo jak to změnit ?

Díky

Nahlásit jako SPAM
IP: 91.187.60.–
illioner0
Stálý člen
26. 10. 2012   #3
-
0
-

To si s tim už docela daleko.

Linker mívá většinou nějaký parametr jako -base x na to nastavení adresy. Nebo se ti snad může hodit JLOC.EXE na takový umisťování. Moc se mi nad tim nechce uvažovat, ale v rámci céčka používáš předpokládám near kód u dat, jedno segmentový modely...

Nahlásit jako SPAM
IP: 90.178.107.–
Nechápu softwarové firmy, ktere utrácejí za čim dál těžkopádnější DRM ochranu!! Vidět kolem snahu o free2play model je jako příjemné připomenutí časů shareware (jen ten Microsoft stále nic nepochopil)
kuto0
Newbie
27. 10. 2012   #4
-
0
-

ja podobnou vec prekladal v mingw+nasm a linkoval pomoci ld.exe, ktery je u mingw. Prikaz pro linker z meho Makefile je tento:

#Sestaveni programu
$(LINK) -Ttext=0xa000 -o $(OBJDIR)/$(TARGET).o $(OBJDIR)/loader.elf $(ASMOBJ) $(OBJECTS) -e 0x0
$(OBJCOPY) -R .note -R .comment -S -O binary $(OBJDIR)/$(TARGET).o $(OUTDIR)/$(TARGET).bin

Ty bys pouzil -Ttext=0x1000

Jinak co se tyka segmentovane pameti, ja to delal v Protected modu, do kteryho se to prepnulo hned po spusteni. Pak ale nejde pouzivat sluzby biosu (vstup z klavesnice, vypisy na obrazovku) a vsechno se musi obslouzit z programu. Pokud bys mel zajem, muzu ti poskytnout zdrojaky.

Nahlásit jako SPAM
IP: 86.63.210.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 126 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý