Suche Bootsektor, der Kernel lädt.



  • Hallo!

    Hat jemand zufällig den Code für einen Bootloader da, der nichts anderes tut als den Kernel (krnl.bin) auf einer Diskette zu laden? (Alles andere, wie A20, PMode,... macht mein Kernel) Den würde ich nämlich dann assemblieren und in den Bootsector der Disktette schreiben.

    MfG
    Thomas



  • Na wenn du schon so weit bist einen Kernel zu schreiben dann schaffste einen simplen Bootloader auch noch.

    www.kernel.org

    Du musst sowas in der Art schreiben:

    org 0x7C00
    
    cli
    mov ax, 0x9000
    mov ss, ax
    mov sp, 0
    sti
    
    [DEIN CODE ;-)]
    
    times 512-($-$$)-2 db 0
                       dw 0xAA55
    

    Bei Dein Code musste deine Anweisungen rein schreiben was du laden willst, von wo, wohin, usw.

    mfg

    ps. alles ohne Gewähr, aber bei mir geht das so 🙂



  • Einen Bootloader habe ich schon mal geschrieben(-> Anhang). Allerdings konnte ich darin nur Code von einer ganz bestimmten Speicheraddresse laden (0x1000). Nun würde ich aber gerne den Kernel aus einer Datei laden. Bei meiner bisherigen Version, war die Diskette nämlich nach dem draufspielen des Bootloaders und des Kernels unter Windows nicht mehr zu lesen. Das liegt wahrscheinlich daran, dass ich die FAT-Tabelle überschrieben habe. Wenn ich aber nur einen Bootloader im BR habe und eine normale Datei als Kernel, dann könnte ich auch noch zusätzliche daten auf der Diskette speichern.

    ---

    Anhang:

    org 0x7C00
    start: 
    cli
    mov ax, 0x9000
    mov ss, ax
    mov sp, 0
    sti
    mov [bootdriv], dl
    call load
    mov ax, 0x1000 ; Speicherstelle des Kernels
    mov es, ax
    mov ds, ax
    push ax
    mov ax, 0
    push ax
    retf
    putstr:
    lodsb
    or al,al
    jz putstrd
    mov ah,0x0E
    mov bx,0x0007
    int 0x10
    jmp putstr
    putstrd:
    retn
    read:
    mov ah, 0
    int 016h
    retn
    load:
    push ds
    mov ax, 0
    mov dl, [bootdriv]
    int 13h
    pop ds
    jc load
    load1:
    mov ax,0x1000
    mov es,ax
    mov bx, 0
    mov ah, 2
    mov al, 5
    mov cx, 2
    mov dx, 0
    int 13h
    jc load1
    mov si, loadmsg 
    call putstr
    retn
    bootdriv db 0         ; Das Bootlaufwerk  
    loadmsg db "Lade...",13,10,0
    times 512-($-$$)-2 db 0
    


  • Schau dir mal GRUB (link siehe Google) an und die Multiboot specification. Da kannst du in deinem Image ein paar Infos angeben, wohin das Image soll etc. und GRUB liefert dann ein komfortables Bootmenü, was eine Datei von gängigen Dateisystemen (FAT, Ext2, ReiserFS...) zieht, an die entsprechende Stelle in den Speicher lädt, den Protected-Mode mit 4GB-Segmenten vorinitialisiert (damit der Kernel seine eigenen Tabellen initialisieren kann) und das A20-Gate anmacht.

    Das spart a) dir viel arbeit, b) macht deinen Kernel auch in Multiboot.umgebungen flexibel, c) vereinfacht das hanlding gerade auf disketten, weil du ein gängiges dateiformat benutzen kannst.
    Die Multiboot-Spec gibts hier:
    http://www.fifi.org/doc/grub-doc/html/multiboot.html



  • du könntest auch eine routine schreiben, die im hauptverzeichnis der diskette (folgt nach FAT und der FAT-Kopie) nach krnl.bin sucht, in dem entsprech. verzeichniseintrag den startcluster liest und in der FAT die folge-cluster liest... programmiere gerade eine FAT12/16-Unterstützung (d.h. DOS wird nicht mehr für datei-io-ops benötigt!) nur datei-schreiben klappt noch net ganz. wenn du willst, kann ich dir das mal zuschicken (is in C++ geschrieben, aber das, was du davon brauchst sind nur ein paar Zeilen C-Code, den du ohne probleme in asm übersetzen kannst...) da gibts also fertige routinen zum datei-öffnen und lesen.

    cu todo



  • Original erstellt von todo:
    programmiere gerade eine FAT12/16-Unterstützung (d.h. DOS wird nicht mehr für datei-io-ops benötigt!) nur datei-schreiben klappt noch net ganz. wenn du willst, kann ich dir das mal zuschicken (is in C++ geschrieben, aber das, was du davon brauchst sind nur ein paar Zeilen C-Code, den du ohne probleme in asm übersetzen kannst...) da gibts also fertige routinen zum datei-öffnen und lesen.

    Wäre echt total nett, wenn du mir das mal schicken könntest. 🙂

    Meine E-Mail-Addy: hentai-lover@subDIMENSION.com



  • ok, schon getan... 🙂

    cu todo


Anmelden zum Antworten