Forum: Mikrocontroller und Digitale Elektronik Kernel booten.aber wie?


von Paul (Gast)


Lesenswert?

Hallo Leute,
ich hab mir in letzter Zeit einige Tutorials bezüglich Kernelschreiben 
angesehen...das ist alles schön und gut, die Codes versteh ich auch 
soweit. Das Problem ist jetzt allerdings der Compeliervorgang: Es ist ja 
asm+ C file zu .o files... und dann?
Wie kann ich einen Bootfähigen USB erstellen? (Ich benutze NASM auf MAC)

Tausend Dank,
Alles Liebe,
Paul

von Dr. Sommer (Gast)


Lesenswert?

Und der Teil steht nicht im Tutorial? Das ist ein hochkomplexes Thema. 
Das kann man nicht mal eben so schnell beantworten. Du hast ja nichtmal 
die Plattform genannt, auf welcher gebootet werden soll. Auf dem MAC 
selbst kann man m.W. sowieso nichts eigenes booten dank SecureBoot.

von Georg G. (df2au)


Lesenswert?

Dr. Sommer schrieb:
> sowieso nichts eigenes booten dank SecureBoot

Das ist auf modernen PCs nicht besser, die sind auch zugenagelt.

von Dr. Sommer (Gast)


Lesenswert?

Georg G. schrieb:
> Das ist auf modernen PCs nicht besser, die sind auch zugenagelt.

Bei vielen kann man es aber im BIOS-Setup abschalten. Noch... Man kann 
es aber auch im qemu ausprobieren.

von Andreas M. (amesser)


Lesenswert?

Paul schrieb:
> soweit. Das Problem ist jetzt allerdings der Compeliervorgang: Es ist ja
> asm+ C file zu .o files... und dann?

Was sind das für komische Tutorials wenn da nicht mal steht wie man 
einen Linker benutzt und was ein Linkerscript ist?

> Wie kann ich einen Bootfähigen USB erstellen? (Ich benutze NASM auf MAC)

Zunächst mal musst Du herausfinden, wie der Bootvorgang deines Systems 
abläuft. z.B. war es früher beim BIOS Boot so, das das Bios auf den 
ersten Sektor der Festplatte geschaut hat, und von dort einen Bootcode 
geladen hat (ja das sind nur ein paar hundert Byte) Dieser Bootcode 
wurde an eine bestimmte Addresse im RAM geladen (immer die selbe) und 
von da an musste der Bootcode selbst sehen wie es weiter geht. Der 
Bootcode konnte in gewissen Grenzen dazu noch mit dem Bios interagieren. 
Auf dieser Basis musste mann dann sein Linkerscript machen, also das die 
.o Dateien in ein Binary zusammengetan werden konnten.

Heuzutage ist das mit EFI etwas einfacher (Wenn man Secure-Boot 
auschaltet) Bei EFI gibt es eine EFI Systempartition, in der man den 
Bootlader, Programme oder auch den Kernel als Binärdatei ablegen kann. 
Das EFI Bios liest dann die komplette Datei in den RAM (an definierte 
Addresse wiederum) und started diese. Das funktioniert z.B. beim Linux 
Kernel, beim Grub Bootloader mit EFI Modus oder auch beim "Memtest86" 
tool.

Ich denke mit dem Quellcode der o.g. Tools kommst Du schon weiter.

Alternativ: Hier steht im Prinzip alles was Du machen must:

https://wiki.osdev.org/UEFI

von Brater (Gast)


Lesenswert?

Vorschlag: Zieh dir ein Ubuntu ISO und erstelle damit einen bootfähigen 
USB-Stick. Dann durchsuchst du den Stick und findest z.B. einen Ordner 
isolinux (so heißt er zumindest bei mir). Darin sind mehrere .cfg 
Dateien. Die schaust du dir genauer an. Hier noch ein Beispiel:
1
label rescue
2
  menu label ^Rescue mode
3
  kernel /install/vmlinuz
4
  append vga=788 initrd=/install/initrd.gz rescue/enable=true --- quiet

Für dich relevant ist die Zeile mit dem Eintrag "kernel".

Hinweis: Dieser Fall ist noch für den alten Bootmodus. Ob das bei UEFI 
auch noch so funktioniert, weiß ich nicht.

von Paul (Gast)


Lesenswert?

Ok danke für die vielen hilfreichen Antworten!
Ich werde einmal alles ausprobieren ;)
Alles Liebe,
Paul

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.