OSDev

для всех
Текущее время: 17 окт 2017, 12:51

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: #GP при юзании APIC
СообщениеДобавлено: 03 дек 2013, 17:20 

Зарегистрирован: 17 окт 2013, 18:45
Сообщения: 23
собственно задумал я отказаться от 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, но там прерывания не обрабатываются. машина зависает и все. а в борще норм


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #GP при юзании APIC
СообщениеДобавлено: 03 дек 2013, 17:32 

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #GP при юзании APIC
СообщениеДобавлено: 03 дек 2013, 17:43 

Зарегистрирован: 17 окт 2013, 18:45
Сообщения: 23
теперь все работает в борще, в виртуалбоксе вообще наглухо мрет, хотя ГП нету. но и прерывания не отрабатываются О_О


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #GP при юзании APIC
СообщениеДобавлено: 03 дек 2013, 17:53 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #GP при юзании APIC
СообщениеДобавлено: 03 дек 2013, 17:55 

Зарегистрирован: 17 окт 2013, 18:45
Сообщения: 23
а по поводу PIC что можешь сказать? стоит маскировать его или нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #GP при юзании APIC
СообщениеДобавлено: 03 дек 2013, 18:11 

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #GP при юзании APIC
СообщениеДобавлено: 03 дек 2013, 18:15 

Зарегистрирован: 17 окт 2013, 18:45
Сообщения: 23
понятно, что нифига не понятно. забью пока, главное работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #GP при юзании APIC
СообщениеДобавлено: 04 дек 2013, 03:59 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #GP при юзании APIC
СообщениеДобавлено: 04 дек 2013, 12:57 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
Мотороллер писал(а):
собственно задумал я отказаться от PIC и перейти на более современный APIC. скопипастил у Руслана Аблязова код инициализации апика

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

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


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

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


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

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