OSDev http://osdev.su/ |
|
VESA отваливается что делать http://osdev.su/viewtopic.php?f=6&t=549 |
Страница 5 из 5 |
Автор: | pavia [ 13 апр 2015, 13:29 ] |
Заголовок сообщения: | Re: VESA отваливается что делать |
Видимо у вас где-то тикут указатели. Самое трудное это искать такую утечку но в Bochs можно бряк на запись в память поставить. Ради любопытства решил попробовать свои разработки на разных виртуальных машинах. Так как сейчас я просто наращиваю функционал а потом уже будут тестировать и делать отладку. Так вот результаты. Bochs - всё отлично работает! VirtualBox - тоже работает. QEMU - где-то висит. Вроде не вылетает. VMWare Player - ловит исключение Page Falaut. И как такое может быть? Вот и я не знаю. Буду разбираться. |
Автор: | diablo [ 13 апр 2015, 13:53 ] |
Заголовок сообщения: | Re: VESA отваливается что делать |
Ну пипец... Всё оказалось очень просто - ядро было загружено не полностью!!! А причина в следующем: Код: 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 ядро еще кое-как влазило в заданный размер, а с весой уже нет. Вот я лошара-то ЗЫ На реальном железе тоже сразу же заработало! |
Автор: | phantom-84 [ 14 апр 2015, 18:15 ] |
Заголовок сообщения: | Re: VESA отваливается что делать |
А так ли необходимо использовать этот формат? Формат Multiboot-совместимого образа значительно проще, к тому же его не сильно сложно совместить с каким-нибудь популярным форматом исполняемых файлов. При необходимости сделать возврат обратно в RM не составляет особого труда, хотя вполне возможно, что вам будет достаточно и той инфы, которую предоставляет Multiboot-совместимый загрузчик. Загрузчик можно не переустанавливать, а воспользоваться соответствующим модулем syslinux'а, либо сформировать промежуточный загрузчик какой-нибудь утилитой вроде loadbin'а. |
Автор: | diablo [ 14 апр 2015, 18:31 ] |
Заголовок сообщения: | Re: VESA отваливается что делать |
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 слышал, но не вникал пока еще... Спасибо за инфу, почитаю) |
Автор: | phantom-84 [ 14 апр 2015, 19:03 ] |
Заголовок сообщения: | Re: VESA отваливается что делать |
Так обсчитывайте и устанавливайте актуальное значение setup_sects во время компиляции, чтобы в будущем не случалось таких казусов. Я когда-то делал тесты в этом формате (как раз учился syslinux устанавливать собственным софтом). Если найду исходники, покажу. |
Автор: | kailot2 [ 07 май 2015, 20:04 ] |
Заголовок сообщения: | Re: VESA отваливается что делать |
ИМХО, в исходники колибри и минет минует лучше не смотреть вообще. Лучше посмотреть те же исходники модулей от syslinux. Так , глянул верхушки , там от граба принимается таблица видеорежимов VESA, а потом берутся значения из из этих структур и пихаются непосредственно в регистры контроллера. Если у вас свой загрузчик , то в реальном режиме есть функция получить таблицу режимов VESA. |
Автор: | diablo [ 08 май 2015, 00:55 ] |
Заголовок сообщения: | Re: VESA отваливается что делать |
kailot2 писал(а): Если у вас свой загрузчик, то в реальном режиме есть функция получить таблицу режимов VESA. В реальном и делаю) Проблема была в том, что ведро не полностью прогружалось |
Страница 5 из 5 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |