OSDev
http://osdev.su/

#GP при юзании APIC
http://osdev.su/viewtopic.php?f=7&t=835
Страница 1 из 1

Автор:  Мотороллер [ 03 дек 2013, 17:20 ]
Заголовок сообщения:  #GP при юзании APIC

собственно задумал я отказаться от PIC и перейти на более современный APIC. скопипастил у Руслана Аблязова код инициализации апика, все вроде сделал как по книге, только у меня вылетает #GP непонятно где. в борще я пошагово прошел весь код, включая отладил прерывания - все работает как надо. настраивал только таймер и клаву - таймер работает, клава тоже. а #GP есть. как пофиксить сию проблему - ума не приложу.
код инициализации
Код:
   mov ecx, IA32_APIC_BASE
    rdmsr
    bts eax, 11
    wrmsr
   
mov dword [APIC_LVT_Timer_REG_DEF], ((1 shl 17) or 20h)
   mov dword [APIC_Timer_Divide_Configuration_REG_DEF], 1001b
   mov dword [APIC_Timer_Initial_Count_REG_DEF], 1000000   
   mov eax, 1
   cpuid
   and ebx, 0FF000000h ; high byte = Local APIC ID

   mov dword [IOAPIC_IOREGSEL_REG_DEF], IOAPIC_IOAPICID
   mov dword [IOAPIC_IOWIN_REG_DEF], 2000000h

   mov dword [IOAPIC_IOREGSEL_REG_DEF], IOAPIC_IOREDTBL1_hi
   mov dword [IOAPIC_IOWIN_REG_DEF], ebx


   mov dword [IOAPIC_IOREGSEL_REG_DEF], IOAPIC_IOREDTBL1_low
   mov dword [IOAPIC_IOWIN_REG_DEF], 21h



странно, под виртуалбоксом тоже #GP, но там прерывания не обрабатываются. машина зависает и все. а в борще норм

Автор:  Мотороллер [ 03 дек 2013, 17:32 ]
Заголовок сообщения:  Re: #GP при юзании APIC

нашел баг. прочитал сие высказывание grindars темой чуть ниже
grindars писал(а):
LAPIC - не замена PIC. Это контроллер прерываний на стороне процессора. Он может работать в паре с IO APIC-ами, которые используется на всех многопроцессорных и большей части современных однопроцессорных, и обычной парой PIC-ов. В первом случае прерывания передаются по системной шине или шине APIC, во втором - на LINT0. У IO APIC-а три достоинства перед PIC-ами: у него больше векторов (24), он поддерживает распределение прерываний по процессорам и доступ к нему быстрее.

перед тем как врубить APIC я не перенастраивал PIC на векторы начиная с 32. т.е. он продолжал слать прерывания пос старым векторам (на 8 от таймера и 9 от клавы). собственно другой вопрос: если я вырублю вообще PIC, то прерывания будут работать, или же нет?

Автор:  Мотороллер [ 03 дек 2013, 17:43 ]
Заголовок сообщения:  Re: #GP при юзании APIC

теперь все работает в борще, в виртуалбоксе вообще наглухо мрет, хотя ГП нету. но и прерывания не отрабатываются О_О

Автор:  sh2ezo [ 03 дек 2013, 17:53 ]
Заголовок сообщения:  Re: #GP при юзании APIC

я б не доверял vbox'у, варе и прочим сильно оптимизированным виртуалкам, ибо они проектировались для быстрой эмуляции, а не качественной. Главное, что популярные ОСи работают, а на остальное пофиг. А вообще тест на реальном железе решает. Для верности лучше на нескольких тачках тестить

Автор:  Мотороллер [ 03 дек 2013, 17:55 ]
Заголовок сообщения:  Re: #GP при юзании APIC

а по поводу PIC что можешь сказать? стоит маскировать его или нет?

Автор:  sh2ezo [ 03 дек 2013, 18:11 ]
Заголовок сообщения:  Re: #GP при юзании APIC

В современных системах нету PIC'а. Там APIC, работающий в режиме совместимости с PIC'ом. Если под PIC'ом ты понимаешь I/O APIC, а под APIC'ом Local APIC, то I/O APIC не надо вырубать, ибо принимает прерывания от устройств именно он.

Возможно, вру, ибо не углублялся пока

Автор:  Мотороллер [ 03 дек 2013, 18:15 ]
Заголовок сообщения:  Re: #GP при юзании APIC

понятно, что нифига не понятно. забью пока, главное работает.

Автор:  Nable [ 04 дек 2013, 03:59 ]
Заголовок сообщения:  Re: #GP при юзании APIC

Legacy PIC маскировать очень даже стоит, работать после этого всё будет.
Хоть его и нет как физически отдельного устройства, эмуляция его присутствует и нужно этот legacy stuff отключать.
Схемы подключения в MP Specification отличные (картинки кликабельны, в аттач не прицепил т.к. дюже большие, по крайней мере, на англоязычном форуме пришлось ссылками вставлять).
Изображение
Изображение

Автор:  Himik [ 04 дек 2013, 12:57 ]
Заголовок сообщения:  Re: #GP при юзании APIC

Мотороллер писал(а):
собственно задумал я отказаться от PIC и перейти на более современный APIC. скопипастил у Руслана Аблязова код инициализации апика

Этого отрывка кода не достаточно, чтобы всё заработало. Скорее всего у тебя прерывания так и работают через PIC. Надо PIC замаскировать и проверить - пропали прерывания или нет. При работе IO APIC прерывания не пропадут.
На форуме есть разные обсуждения Local APIC и IO APIC, попробуй Поиск.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/