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 |
понятно, что нифига не понятно. забью пока, главное работает. |
Автор: | 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/ |