Local APIC

Тема в разделе "WASM.NT.KERNEL", создана пользователем Hairy, 25 янв 2008.

  1. Hairy

    Hairy Сёма

    Публикаций:
    0
    Регистрация:
    25 янв 2008
    Сообщения:
    39
    Адрес:
    Ад на земле
    Не могу до конца разобраться как работать с local APIC.
    Конкретнее нужен Timer. В интеловском мануале написано, что необходимо запрограмить 4 регистра... но вот я нифига не могу понять как это сделать :dntknw:
    Кто может объясните... ещё было бы не плохо если с примерами..

    заранее благодарен!
     
  2. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    поиск по форуму.
     
  3. Hairy

    Hairy Сёма

    Публикаций:
    0
    Регистрация:
    25 янв 2008
    Сообщения:
    39
    Адрес:
    Ад на земле
    если бы я их понял те темы которые находил на форуме, то не задавал бы вопросы... в большенстве случаев какие то уровкы и т.п...
     
  4. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Код (Text):
    1. mov ebx, 0xFEE00000
    2. mov dword [ebx + 0x3E0], 0xB ; devide configuration register (devide by 1)
    3. mov eax, 0x10000 ; count of system bus cycles
    4. mov dword [ebx + 0x380], eax ; initial count register
    5. mov dword [ebx + 0x390], eax ; current count register
    6. mov dword [ebx + 0x320], 0x400 ; timer LVT (NMI, one-shot, edge, active high)
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Intel Architecture Software Developer’s Manual
    Volume 3:
    System Programming Guide
     
  6. Hairy

    Hairy Сёма

    Публикаций:
    0
    Регистрация:
    25 янв 2008
    Сообщения:
    39
    Адрес:
    Ад на земле
    "Intel 64 and IA-32 Architectures Software Developers Manual. Volume 3A" прочёл уже не один раз ... теорию я знаю ....


    Однако основная проблема заключаеться в том, что я практически не имел опыта в написания подобного рода штуках, и вообще по большей части я раньше занимался только middle уровнем програмирования (так низко не приходилось)

    УФ начнём по порядку:
    Я создаю драйвер с использованием DDK для того что бы можно было использовать функици на нулевом кольце. правильно?
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    А что ты хочеш делать с таймером ?
     
  8. Hairy

    Hairy Сёма

    Публикаций:
    0
    Регистрация:
    25 янв 2008
    Сообщения:
    39
    Адрес:
    Ад на земле
    поставили мне задачу - сделать высокоточный, "мелкошаговый" таймер... то есть по сути мне нужно иметь счётчик времени с частотой 1милисек (возможно даже и ниже)...

    всё что связано с rdtsc отметаеться сразу, так как частота плавает... всё что связано с регистрами (MSR) производительности с трудом представляю как использовать....

    из специфики того, что шина может быть загружена под завязку использовать таймера и т.д которые находяться каким либо образом вне ядра - не получаеться (задержки вызваные загрузкой шины всё портят)


    вообщем вот такая вот загвоздка. если есть local APIС то можно очень хорошо с его помощью это реализовать.
     
  9. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    частота системной шины тоже может меняться
     
  10. Hairy

    Hairy Сёма

    Публикаций:
    0
    Регистрация:
    25 янв 2008
    Сообщения:
    39
    Адрес:
    Ад на земле
    2rei3er
    ну она всё таки меняеться не так часто, как частота процессора.

    2all
    народ пошлите меня по нужным сылкам... а т онифига не могу сам разобраться :dntknw:
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Таймер апик может вырабатывать прерывания.
     
  12. Hairy

    Hairy Сёма

    Публикаций:
    0
    Регистрация:
    25 янв 2008
    Сообщения:
    39
    Адрес:
    Ад на земле
    собственно на этом и хочу сделать таймер - сделать таймер переодический и обрабатывать прерывания.
     
  13. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Hairy
    так в чем проблема?
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Смотря что иметь ввду под частотой шины, если частота сигналов синхронизации, квитирования и др., то они задаются кварцованными синхрогенераторами и частота высокостабильна.
     
  15. Hairy

    Hairy Сёма

    Публикаций:
    0
    Регистрация:
    25 янв 2008
    Сообщения:
    39
    Адрес:
    Ад на земле
    На данный момент я не понимаю как работать с физической памятью ядра (на сколько я понял из мануала Intel-овского, именно там расположены адреса 0xFEE00000, ...)
     
  16. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    частота генерации BCLK#
     
  17. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    MmMapIoSpace()
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    На сколько я помню MmMapIoSpace работает до IRQL<=DISPATCH_LEVEL, выше не применимо..
     
  19. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    и что?
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Попробовать вызвать MmMapIoSpace на IRQL=CLOCK2_LEVEL ?
    Интересно какой бсод будет ?
    Проще выполнить для определения физического адреса апик MmGetVirtualForPhysical(),
    наверно при любых IRQL