Загрузка ядра ОС

Тема в разделе "WASM.OS.DEVEL", создана пользователем MeGaCoDeR, 27 янв 2011.

  1. MeGaCoDeR

    MeGaCoDeR Сергей

    Публикаций:
    0
    Регистрация:
    27 янв 2011
    Сообщения:
    10
    Пишу значит я свою ОС с FAT12 и кароче по идее вторичный загрузчик должен загрузить ядро
    и я пишу:
    Код (Text):
    1. include "load_file.inc"
    2.  
    3.     call    LoadRoot        ; Load root directory table
    4.  
    5.     mov bx, 0           ; BX:BP points to buffer to load to
    6.     mov bp, 0x800
    7.     mov si, ImageName       ; our file to load
    8.     call    LoadFile        ; load our file
    9.     cmp ax, 0           ; Test for success
    10.     je  EnterStage3     ; yep--onto Stage 3!
    11.     mov si, msgFailure      ; Nope--print error
    12.     call    print_text
    13.     mov ah, 0
    14.     int     16h                    
    15.     jmp 0ffffh:0000h
    16. EnterStage3:
    17. call 0x800
    но ядро не загружается тоесть просто выводится ошибка о том что ядро не загружается и всё.
    http://paste.org.ru/?h7l1zt - Floppy.inc
    http://paste.org.ru/?xkg04s - вот тут процедура чтения и загрузки файла load_file.inc
    http://paste.org.ru/?tjkdaf - вторичный загрузчик
    http://paste.org.ru/?h8ivob - ядро

    http://file.qip.ru/file/ahQB7pI8/MyOS_1.html - исходники моей ОС

    так всеже как правильно загрузить ядро в реальном режиме работы проца?
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    MeGaCoDeR
    Что bochs пишет?
     
  3. MeGaCoDeR

    MeGaCoDeR Сергей

    Публикаций:
    0
    Регистрация:
    27 янв 2011
    Сообщения:
    10
    bochs ваще не грузит мою операционку тока пишет типа No bootable device. так что пока гружу операционку в VirtualBox
     
  4. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    MeGaCoDeR
    Ты конфиг bochs настраивал?
     
  5. MeGaCoDeR

    MeGaCoDeR Сергей

    Публикаций:
    0
    Регистрация:
    27 янв 2011
    Сообщения:
    10
    NoName
    Настраивал но бесполезно всеравно не грузит да и даже qemu не грузит образ дискеты типа fatal: no bootable device вот тока VirtualBox норм грузит
     
  6. MeGaCoDeR

    MeGaCoDeR Сергей

    Публикаций:
    0
    Регистрация:
    27 янв 2011
    Сообщения:
    10
    вот кстате конфиг bochs

    display_library: win32, options="legacyF12"
    romimage: file=D:\bios.bin
    vgaromimage: file=D:\vgabios.bin
    memory: guest=512, host=256
    floppya: 1_44=D:\floppy.img, status=inserted
    floppyb: 1_44=b:, status=inserted
    boot: floppy
     
  7. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    Может хeрню скажу, но в 511 и 512 байтах бут сектора есть Uк?
     
  8. MeGaCoDeR

    MeGaCoDeR Сергей

    Публикаций:
    0
    Регистрация:
    27 янв 2011
    Сообщения:
    10
    Наверно будет смешно но оказывается в qemu и в bochs не грузилось из за того что там у меня было db 0xAA, 0x55 а надо db 0x55, 0xAA тока сча обнаружил это... хотя я грузил и на реальном железе и на virtualbox и там и там норм грузится... но не в этом дело сча мне как то надо ядро загрузить!
     
  9. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    MeGaCoDeR
    Что теперь bochs в логе загрузки пишет?
     
  10. MeGaCoDeR

    MeGaCoDeR Сергей

    Публикаций:
    0
    Регистрация:
    27 янв 2011
    Сообщения:
    10
    http://paste.org.ru/?ltqf7n - лог bochs
     
  11. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Напиши участок кода где по твоему мнению это происходит (можно узнать в bochsdbg).
     
  12. MeGaCoDeR

    MeGaCoDeR Сергей

    Публикаций:
    0
    Регистрация:
    27 янв 2011
    Сообщения:
    10
    (0) [0xfffffff0] f000:fff0 (unk. ctxt): jmp far f000:e05b ; ea5be000f0 вот на этой строке останавливается отладка а так вот весь лог отладчика http://paste.org.ru/?o9eiel

    хотя в коде jmp far f000:e05b вообще такого нет
     
  13. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Надо трассировать знакомые участки кода до того места где возникает не то что должно быть.
    Попробуй поставить бряки (если незнаешь точных адресов можно поставить большой цикл и в отладчике нажать CTRL+C, а потом бряк по понятному адресу).
     
  14. MeGaCoDeR

    MeGaCoDeR Сергей

    Публикаций:
    0
    Регистрация:
    27 янв 2011
    Сообщения:
    10
    NoName
    а как поставить эти бряки? break адрес? и вообще как трассировать? я ведь впринцыпе тока в virtualbox ОС тестировал так что про bochs немногое знаю
     
  15. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    запусти bochsdbg, в консоли help
     
  16. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    MeGaCoDeR
    если с бряками не дружишь, то самый простой способ - вывод на экран сообщения, когда прошли какое то место в коде. Тем самым узнаешь где же оно в конце перестало выводиться.
     
  17. MeGaCoDeR

    MeGaCoDeR Сергей

    Публикаций:
    0
    Регистрация:
    27 янв 2011
    Сообщения:
    10
    ну я короче в графическом отладчике запустил там тоже останавливается на адресе jmp far f000:e05b и всё потом нажимаю Continue ОСь выводит сообщение о том что типа ядро не найдено хотя оно есть в директории и в отладчике останавливается на адресе 000fe86d jmp .-15 (0x0000e860) ну и всё
     
  18. MeGaCoDeR

    MeGaCoDeR Сергей

    Публикаций:
    0
    Регистрация:
    27 янв 2011
    Сообщения:
    10
    Все вопрос закрывается... Ядро оказывается не загружалось из-за того что не правильно был настроен стек у меня он так был:

    Код (Text):
    1. mov     ax, 0x500
    2. mov     ss, ax
    3. mov     sp, 03feh ; top of the stack.
    4.  
    5.  
    6. ; set data segment:
    7. xor     ax, ax
    8. mov     ds, ax
    а надо было так:
    Код (Text):
    1.     cli             ; запретить прерывания
    2.     xor ax, ax         
    3.     mov ds, ax
    4.     mov es, ax
    5.     mov ax, 0x0        
    6.     mov ss, ax
    7.     mov sp, 0xFFFF
    8.     sti             ; разрешить прерывания
     
  19. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    MeGaCoDeR