81
Lowlevel-Coding / Re:C-Kernel ohne Multiboot
« am: 22. May 2011, 21:39 »openSUSE erkennt das Diskettenlaufwerk nicht (einfach mal nach "opensuse usb floppy" googlen). Ich vermute, dass GRUB meinen Code nicht erkennt (ist ja beides auf unixoider Basis). Das BIOS erkennt den Bootloader tadellos.Gleich vorweg: Ich habe kein "echtes" eingebautes Diskettenlaufwerk, sondern ein USB-Teil, und das versteht sich leider mit meiner openSUSE-Installation nicht so gut (scheint generell nicht unterstützt zu werden). Deshalb hab ich mich entschieden, erstmal kein Multiboot zu verwenden.Muss ich das verstehen? Wieso kannst du ohne funktionierendes Floppylaufwerk einen handgebastelten Bootloader laden, aber keinen GRUB? Vorteil von Multiboot wäre auch noch, dass du den Kernel da einfach (mit dem für Linux sowieso vorhandenen "GRUB) von der Platte booten kannst, ohne den MBR zu überschreiben.
Ja,das stimmt tatsächlich. Aber trotzdem, beim Hexdump erscheint der C-Kernel überhaupt nicht:hab jetzt mein bootloader um den Pmode-init teil erweitert (inzwischen als 2-Stage, code war mit 800 Bytes zu groß). Allerdings gibt es ein neues Problem: der Linker mag mich nicht und fügt den Kernel nicht ein.Nach diesem Stück Code sind die 512 Bytes Bootsektor zu Ende, die das BIOS für dich lädt. Der Rest von deinem Kernel/Bootloader landet also nie im Speicher und das call pmode springt irgendwo in einen undefinierten Bereich.Code: [Auswählen]; boot.asm
[global _start]
[extern pmode]
[BITS 16]
[section .text]
_start:
call pmode
hang:
jmp hang
times 512-($-$$)-2 db 0
dw 0xAA55
Code: [Auswählen]
0000000 fde8 e901 fffd 0000 0000 0000 0000 0000
0000010 0000 0000 0000 0000 0000 0000 0000 0000
*
00001f0 0000 0000 0000 0000 0000 0000 0000 aa55
0000200 0ffa 1601 8098 200f 0cc0 0f01 c022 13ea
0000210 0880 6600 10b8 8e00 8ed8 bcd0 0000 0009
0000220 07e8 0000 e900 fffb ffff 9090 8955 83e5
0000230 18ec 04c7 8a24 0080 e800 0002 0000 c3c9
0000240 8955 83e5 10ec 45c7 00f8 0b80 c700 fc45
0000250 0000 0000 25eb 458b 01fc 03c0 f845 558b
0000260 03fc 0855 b60f 8812 8b10 fc45 c001 c083
0000270 0301 f845 00c6 8307 fc45 8b01 fc45 4503
0000280 0f08 00b6 c084 ce75 c3c9 6548 6c6c 206f
0000290 6f57 6c72 2164 0000 0017 809e 0000 0000
00002a0 0000 0000 0000 ffff 0000 9a00 00cf ffff
00002b0 0000 9200 00cf 9090
00002b8