Vlákno názorů k článku Píšeme operační systém: boot od Maertien - Měl bych pár otázek. 1. Bylo by možné napsat...

  • Článek je starý, nové názory již nelze přidávat.
  • 21. 1. 2006 0:54

    Maertien
    Měl bych pár otázek.

    1. Bylo by možné napsat bootsector v C ?
    2. Když mám bootsector v ASM, jak mám zkompilovat program v C, který by ležel na dalším sektoru?
  • 21. 1. 2006 10:24

    MartensPh (neregistrovaný)
    Zajimavy clanek, ale disketovku si quli tomu montovat nebudu. Ale spousta zakladnich desek umi bootovat z flash disku. Urcite by bylo lepsi napsat clanek, zacinajici o psani OS, jak bootovat z flashdisku. Preci jen v realnem zivote disketovky asi uz opravdu skoncili.
  • 21. 1. 2006 17:25

    bez přezdívky
    Uplne rovnako ako z diskety. Vtip je v tom, ze biosy na tychto modernych doskach urobia "spinavu pracu" za teba, a na pripojenom flash disku emuluju floppy disketu o rovnakej velkosti. V praxi to vyzera tak, ze v realnom rezime za pomoci BIOS funkcii s nim pracujes uplne rovnako ako s inym diskom alebo disketou. A co tym chcem povedat?
    dd if=bootsect.bin of=/dev/sda
    (alebo cokolvek ine, kde svoj flashdisk mas)
    Kod v bootsect.bin neni potreba nijako modifikovat.
  • 28. 1. 2006 13:42

    bez přezdívky
    1) Ne nebylo. Soucasti bootsektoru, jakoz i MBR, jsou tabulky s presnou strukturou i polohou. Struktura by se v C zvladnout dala, poloha ne. I na to pitome AA55 by jsi v C potreboval pomoc linkeru, a na ostatni struktury by IMHO linker nestacil (v pripade boot sektoru jsem si tim jisty, mozna MBR by se dala ...)
    2) Zkompilovat jako obvykle. Problem je v linkovani. Mas na vyber bud napsat i druhe casti programu assemblersky zavadec (v podstate neco jako "jmp main", pokud nepotrebujes nejakou specifickou hlavicku tak nic vic nepotrebujes) a slinkovat to s C zdrojakem tak, aby byl ten zavadec prvni (na to obvykle staci aby byl prvni na prikazove radce, alespon pokud je ve spravne sekci), nebo pouzit pokrocilejsi hacky ktere prinejmensim GNU linker umi - napr. nechat si od nej napsat na zacatek programu adresu funkce main.

    Pripominam, ze pravdepodobne budes potrebovat nejak vysvetlit linkeru, ze program nezacina na obvykle adrese, nebo ho v boot sektoru na tuto adresu nahrat. Jak to udelas a jaka adresa to je, zalezi na prekladaci - mimochodem GNU C je pro tento ukol nevhodne, protoze preklada pro 32bitovy FLAT model a takto prelozene programy v realnem modu nepobezi, predpokladam ze mas k dispozici jiny prekladac.