OSDev

для всех
Текущее время: 29 апр 2024, 02:34

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 47 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
 Заголовок сообщения: Re: VESA отваливается что делать
СообщениеДобавлено: 13 апр 2015, 13:29 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Видимо у вас где-то тикут указатели. Самое трудное это искать такую утечку но в Bochs можно бряк на запись в память поставить.

Ради любопытства решил попробовать свои разработки на разных виртуальных машинах. Так как сейчас я просто наращиваю функционал а потом уже будут тестировать и делать отладку.

Так вот результаты.
Bochs - всё отлично работает!
VirtualBox - тоже работает.
QEMU - где-то висит. Вроде не вылетает.
VMWare Player - ловит исключение Page Falaut.
И как такое может быть? Вот и я не знаю. Буду разбираться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: VESA отваливается что делать
СообщениеДобавлено: 13 апр 2015, 13:53 
Аватара пользователя

Зарегистрирован: 21 ноя 2013, 17:00
Сообщения: 10
Откуда: Russia, Magnitogorsk
Ну пипец... :lol:
Всё оказалось очень просто - ядро было загружено не полностью!!! А причина в следующем:
Код:
times   497-$+code      db      0
        db      20h     ;01F1/1  ALL(1   setup_sects     The size of the setup in sectors
        dw      1h      ;01F2/2  ALL     root_flags      If set, the root is mounted readonly
        dd      200h    ;01F4/4  2.04+(2 syssize         The size of the 32-bit code in 16-byte paras
        dw      0h      ;01F8/2  ALL     ram_size        DO NOT USE - for bootsect.S use only
        dw      0ffffh  ;01FA/2  ALL     vid_mode        Video mode control
        dw      100h    ;01FC/2  ALL     root_dev        Default root device number
        dw      0AA55h  ;01FE/2  ALL     boot_flag       0xAA55 magic number

Ядро имеет формат Linux kernel и грузится через ISOLINUX с компашки, и первые 512 байт(также бутсектор для загрузки с FDD) содержат размер ядра в секторах(setup_sects) - а он был слишком маленьким!!! Т.е. пока я не задал USE_VESA ядро еще кое-как влазило в заданный размер, а с весой уже нет.
Вот я лошара-то :oops: :P
ЗЫ На реальном железе тоже сразу же заработало! 8-)

_________________
Пилю ось)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: VESA отваливается что делать
СообщениеДобавлено: 14 апр 2015, 18:15 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
А так ли необходимо использовать этот формат? Формат Multiboot-совместимого образа значительно проще, к тому же его не сильно сложно совместить с каким-нибудь популярным форматом исполняемых файлов. При необходимости сделать возврат обратно в RM не составляет особого труда, хотя вполне возможно, что вам будет достаточно и той инфы, которую предоставляет Multiboot-совместимый загрузчик. Загрузчик можно не переустанавливать, а воспользоваться соответствующим модулем syslinux'а, либо сформировать промежуточный загрузчик какой-нибудь утилитой вроде loadbin'а.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: VESA отваливается что делать
СообщениеДобавлено: 14 апр 2015, 18:31 
Аватара пользователя

Зарегистрирован: 21 ноя 2013, 17:00
Сообщения: 10
Откуда: Russia, Magnitogorsk
phantom-84 писал(а):
А так ли необходимо использовать этот формат?

Изначально у меня был свой бутсектор для загрузки с FDD (писАл намного раньше чем ось), но потом мне надоело записывать дискеты и я решил грузиться с помощью LILO (по-дефолту идёт со Slackware Linux), а потом и с помощью ISOLINUX (по сути тот же самый SYSLINUX, только для CD)
Не знаю, канеш вовсе не обязательно делать так... Но я не вижу в этом никакой проблемы - лишь маленький header и усё...
Код:
code    global  _start
%ifdef  USE_ROM
        dw      0AA55h                  ;signature
        db      (full_size+1ffh)/200h   ;size
        retf
%endif
                                        ;01F1/1 ALL(1   setup_sects     The size of the setup in sectors
                                        ;01F2/2 ALL     root_flags      If set, the root is mounted readonly
                                        ;01F4/4 2.04+(2 syssize         The size of the 32-bit code in 16-byte paras
                                        ;01F8/2 ALL     ram_size        DO NOT USE - for bootsect.S use only
                                        ;01FA/2 ALL     vid_mode        Video mode control
                                        ;01FC/2 ALL     root_dev        Default root device number
                                        ;01FE/2 ALL     boot_flag       0xAA55 magic number
        jmp     short _start            ;0200/2 2.00+   jump            Jump instruction
        db      'HdrS'                  ;0202/4 2.00+   header          Magic signature "HdrS"
        dw      0204h                   ;0206/2 2.00+   version         Boot protocol version supported
        dd      0                       ;0208/4 2.00+   realmode_swtch  Boot loader hook (see below)
        dw      1000h                   ;020C/2 2.00+   start_sys_seg   The load-low segment (0x1000) (obsolete)
        dw      kver                    ;020E/2 2.00+   kernel_version  Pointer to kernel version string
        db      0                       ;0210/1 2.00+   type_of_loader  Boot loader identifier
        db      1                       ;0211/1 2.00+   loadflags       Boot protocol option flags
        dw      (full_size+0fffh)/1000h ;0212/2 2.00+   setup_move_size Move to high memory size (used with hooks)
        dd      100000h                 ;0214/4 2.00+   code32_start    Boot loader hook (see below)
        dd      0                       ;0218/4 2.00+   ramdisk_image   initrd load address (set by boot loader)
        dd      0                       ;021C/4 2.00+   ramdisk_size    initrd size (set by boot loader)
        dd      0                       ;0220/4 2.00+   bootsect_kludge DO NOT USE - for bootsect.S use only
        dw      7fffh                   ;0224/2 2.01+   heap_end_ptr    Free memory after setup end
        db      0                       ;0226/1 2.02+(3 ext_loader_ver  Extended boot loader version
        db      0                       ;0227/1 2.02+(3 ext_loader_type Extended boot loader ID
        dd      0                       ;0228/4 2.02+   cmd_line_ptr    32-bit pointer to the kernel command line
        dd      07fffffffh              ;022C/4 2.03+   ramdisk_max     Highest legal initrd address
;       dd      0                       ;0230/4 2.05+   kernel_alignment        Physical addr alignment required for kernel
;       db      0                       ;0234/1 2.05+   relocatable_kernel      Whether kernel is relocatable or not
;       db      0                       ;0235/1 2.10+   min_alignment   Minimum alignment, as a power of two
;       dw      0                       ;0236/2 N/A     pad3            Unused
;       dd      0                       ;0238/4 2.06+   cmdline_size    Maximum size of the kernel command line
;       dd      0                       ;023C/4 2.07+   hardware_subarch        Hardware subarchitecture
;       dq      0                       ;0240/8 2.07+   hardware_subarch_data   Subarchitecture-specific data
;       dd      0                       ;0248/4 2.08+   payload_offset  Offset of kernel payload
;       dd      0                       ;024C/4 2.08+   payload_length  Length of kernel payload
;       dq      0                       ;0250/8 2.09+   setup_data      64-bit physical pointer to linked list of struct setup_data
;       dq      0                       ;0258/8 2.10+   pref_address    Preferred loading address
;       dd      0                       ;0260/4 2.10+   init_size       Linear memory required during initialization
;-------------------------------------------------------------------------------
_start  smsw    ax
        test    al,1
        je      _init
        mov     al,0FEh
        out     64h,al
        hlt
        jmp     $-1

Про MultiBoot слышал, но не вникал пока еще... Спасибо за инфу, почитаю)

_________________
Пилю ось)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: VESA отваливается что делать
СообщениеДобавлено: 14 апр 2015, 19:03 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Так обсчитывайте и устанавливайте актуальное значение setup_sects во время компиляции, чтобы в будущем не случалось таких казусов. Я когда-то делал тесты в этом формате (как раз учился syslinux устанавливать собственным софтом). Если найду исходники, покажу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: VESA отваливается что делать
СообщениеДобавлено: 07 май 2015, 20:04 

Зарегистрирован: 09 янв 2015, 04:04
Сообщения: 35
ИМХО, в исходники колибри и минет минует лучше не смотреть вообще. Лучше посмотреть те же исходники модулей от syslinux. Так , глянул верхушки , там от граба принимается таблица видеорежимов VESA, а потом берутся значения из из этих структур и пихаются непосредственно в регистры контроллера.
Если у вас свой загрузчик , то в реальном режиме есть функция получить таблицу режимов VESA.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: VESA отваливается что делать
СообщениеДобавлено: 08 май 2015, 00:55 
Аватара пользователя

Зарегистрирован: 21 ноя 2013, 17:00
Сообщения: 10
Откуда: Russia, Magnitogorsk
kailot2 писал(а):
Если у вас свой загрузчик, то в реальном режиме есть функция получить таблицу режимов VESA.

В реальном и делаю) Проблема была в том, что ведро не полностью прогружалось :?

_________________
Пилю ось)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 47 ]  На страницу Пред.  1, 2, 3, 4, 5

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB