2016-04-12 14 views
-1

Ich schrieb Bootloader und stecken mit einer 545-Byte-Datei, die ich nicht habe, wie zu laden. Wenn es sich um eine 512-Byte-Datei handelt, die im zweiten Sektor gespeichert ist, kann sie leicht in den Speicher geladen werden. Aber das scheint mir etwas komisch zu sein.Wie kann ich eine 545 Byte (oder mehr) Datei von meinem Bootloader in den Speicher laden?

Wie mache ich das?

+0

Laden Sie einfach den zweiten Sektor in Ihrem ersten 512-Byte-MBR-Bootloader. –

+0

@Praveen - Wenn Sie eine andere Frage haben, fragen Sie das bitte als neue Frage. –

+0

Sie sagen, dass Ihr Bootloader 545 Bytes ist? Es würde hilfreich sein, wenn Sie den Code mit 545 Byte gepostet haben. Zuerst dachte ich, du sprichst von einer zweiten Stufe, aber jetzt frage ich mich, ob dein Bootsektor selbst 545 ist.Veröffentlichen Sie Ihren Bootsektorcode in Ihrer Frage und wir haben möglicherweise ein besseres Verständnis für Ihr Problem –

Antwort

2

In Bezug auf Ihre gelöschten Frage, How do I embedded C and Assembly in 16 bit?:

  1. einen „Bootloader“ Erstellen, die einen einfachen „Kernel“ ruft nicht unbedingt schwierig ... aber es ist nicht etwas, das man in einer einzeiligen beantworten kann Frage, entweder.

  2. Die erste Frage ist - F: Was ist Ihre Zielplattform?

    Es klingt wie - A: Eine Intel x86 CPU geladen von einem FAT (oder FAT32) Boot-Medium.

  3. Die zweite Frage = Q: Was ist Ihre "Entwicklungs-Workstation"? Kompilieren/assemblieren Sie Ihren Code und erstellen Sie Ihr Boot-Image unter Windows? Unter Linux? "Etwas anderes"? Nehmen wir "Linux" an. Aus vielen Gründen ist das eine "gute Wahl".

  4. Wie andere darauf hingewiesen, das C-Programm ist nicht eine gute Wahl für Ihre "Kernel":

main.c =>

#include<stdio.h> 

int main(int argc, char *argv[]) { 
    printf("Hello world!!!"); 
    return 0; 
} 
  1. Sie‘ d müssen in einer C-Laufzeitbibliothek ("CRTL") verlinkt sein, um "printf()" zu erhalten.

  2. Sie müssen zuvor auch crt0.obj aufrufen, um "main()" zu erhalten.

  3. Auch wenn Sie dies getan haben, sind die von Ihnen ausgewählten CRTL und crt0.obj möglicherweise nicht mit dem 16-Bit-Realmodus kompatibel.

  4. Und selbst wenn Sie 1), 2) und 3) behandelt haben, benötigen Sie immer noch ein Betriebssystem (z. B. DOS, Linux oder Windows), um "printf()" auszuführen.

SUGGESTION:

Versuchen Sie, durch dieses Tutorial arbeiten (es gibt viele ähnliche Beispiele auf dem Netz):

+0

Er entwickelt auf Windows.Mehr Informationen können von seiner anderen Frage abgeleitet werden hier: http://stackoverflow.com/questions/36044706/how-to-make-bootloader-to-load-the-second-sector-of-a-usb –