OSDev

для всех
Текущее время: 23 окт 2017, 18:08

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




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 04 окт 2013, 00:42 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 208
> Зато во всех компьютерах есть объекты LNKA...LNKH
Ну далеко не во всех, пожалуй. Пинов 4, а вот линков может быть много. Впрочем, об этом я уже выше говорил.
А вот обходиться без ACPICA - решение сомнительное (впрочем, как и почти весь osdev), ибо полноценную реализацию поддержки ACPI (в т.ч. максимально маскирующуюся под винду, ибо производители железа нередко ведут себя нехорошо) сделать очень и очень непросто (и довольно скучное это занятие, имхо).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 04 окт 2013, 11:58 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
Я не совсем отказался от ACPICA, просто сразу его внедрить трудно. На это нужно много времени, и много понимания что к чему.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 02 ноя 2013, 23:24 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 208
Чуть не забыл запостить обещанное. Конечно, видел пример получше, но тут тоже есть интересное:
Код:
[    0.181106] ACPI: PCI Interrupt Link [LNK1] (IRQs 3 4 5 7 9 10 11 12 14 15) *0, disabled.
[    0.181555] ACPI: PCI Interrupt Link [LNK2] (IRQs 3 4 5 7 9 10 11 12 14 15) *0, disabled.
[    0.182005] ACPI: PCI Interrupt Link [LNK3] (IRQs 3 4 *5 7 9 10 11 12 14 15)
[    0.182387] ACPI: PCI Interrupt Link [LNK4] (IRQs 3 4 5 7 9 10 11 *12 14 15)
[    0.182765] ACPI: PCI Interrupt Link [LNK5] (IRQs 3 4 5 7 9 10 11 12 14 15) *0, disabled.
[    0.183212] ACPI: PCI Interrupt Link [LUBA] (IRQs 3 4 5 7 9 10 11 *12 14 15)
[    0.183598] ACPI: PCI Interrupt Link [LUBB] (IRQs 3 4 5 7 9 10 11 12 14 15) *0, disabled.
[    0.184046] ACPI: PCI Interrupt Link [LMAC] (IRQs 3 4 5 7 9 10 *11 12 14 15)
[    0.184427] ACPI: PCI Interrupt Link [LACI] (IRQs *3 4 5 7 9 10 11 12 14 15)
[    0.184809] ACPI: PCI Interrupt Link [LMCI] (IRQs 3 4 5 7 9 10 11 12 14 15) *0, disabled.
[    0.185259] ACPI: PCI Interrupt Link [LSMB] (IRQs 3 4 *5 7 9 10 11 12 14 15)
[    0.185643] ACPI: PCI Interrupt Link [LUB2] (IRQs 3 4 5 7 9 *10 11 12 14 15)
[    0.186021] ACPI: PCI Interrupt Link [LIDE] (IRQs 3 4 5 7 9 10 11 12 14 15) *0, disabled.
[    0.186476] ACPI: PCI Interrupt Link [LSID] (IRQs 3 4 5 7 9 *10 11 12 14 15)
[    0.186868] ACPI: PCI Interrupt Link [LFID] (IRQs 3 4 5 7 9 10 *11 12 14 15)
[    0.187894] ACPI: PCI Interrupt Link [LPCA] (IRQs 3 4 5 7 9 10 11 12 14 15) *0, disabled.
[    0.188392] ACPI: PCI Interrupt Link [APC1] (IRQs 16) *0, disabled.
[    0.188672] ACPI: PCI Interrupt Link [APC2] (IRQs 17) *0, disabled.
[    0.188951] ACPI: PCI Interrupt Link [APC3] (IRQs 18) *0
[    0.189209] ACPI: PCI Interrupt Link [APC4] (IRQs 19) *0
[    0.189407] ACPI: PCI Interrupt Link [APC5] (IRQs *16), disabled.
[    0.189685] ACPI: PCI Interrupt Link [APCF] (IRQs 20 21 22 23) *0
[    0.190047] ACPI: PCI Interrupt Link [APCG] (IRQs 20 21 22 23) *0, disabled.
[    0.190407] ACPI: PCI Interrupt Link [APCH] (IRQs 20 21 22 23) *0
[    0.190746] ACPI: PCI Interrupt Link [APCJ] (IRQs 20 21 22 23) *0
[    0.191086] ACPI: PCI Interrupt Link [APCK] (IRQs 20 21 22 23) *0, disabled.
[    0.191448] ACPI: PCI Interrupt Link [APCS] (IRQs 20 21 22 23) *0
[    0.191790] ACPI: PCI Interrupt Link [APCL] (IRQs 20 21 22 23) *0
[    0.192131] ACPI: PCI Interrupt Link [APCZ] (IRQs 20 21 22 23) *0, disabled.
[    0.192501] ACPI: PCI Interrupt Link [APSI] (IRQs 20 21 22 23) *0
[    0.192850] ACPI: PCI Interrupt Link [APSJ] (IRQs 20 21 22 23) *0
[    0.193198] ACPI: PCI Interrupt Link [APCP] (IRQs 20 21 22 23) *0, disabled.

Однако, всё равно видим irq sharing между встроенной сетевухой и одним из встроенных же USB:
Код:
# cat /proc/interrupts
           CPU0
  0:         26   IO-APIC-edge      timer
  1:          2   IO-APIC-edge      i8042
  4:         11   IO-APIC-edge      serial
  7:          2   IO-APIC-edge      parport0
  9:          0   IO-APIC-fasteoi   acpi
 12:          1   IO-APIC-edge
 14:       2976   IO-APIC-edge      pata_amd
 15:        721   IO-APIC-edge      pata_amd
 18:       2043   IO-APIC-fasteoi   eth1
 19:        239   IO-APIC-fasteoi   sata_sil24
 20:        336   IO-APIC-fasteoi   sata_nv
 21:        312   IO-APIC-fasteoi   sata_nv
 22:          0   IO-APIC-fasteoi   ehci_hcd:usb1
 23:          0   IO-APIC-fasteoi   ohci_hcd:usb2, eth0
NMI:          0   Non-maskable interrupts
LOC:      12412   Local timer interrupts
SPU:          0   Spurious interrupts
PMI:          0   Performance monitoring interrupts
IWI:          0   IRQ work interrupts
RTR:          0   APIC ICR read retries
THR:          0   Threshold APIC interrupts
MCE:          0   Machine check exceptions
MCP:          2   Machine check polls
ERR:          1
MIS:          0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 15 ноя 2013, 12:36 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
В пакете ACPICA есть интересная утилита acpiexec, с помощью которой можно выполнять вызовы функций. После запуска утилиты появляется консоль ввода команд с клавиатуры, там можно ввести команду help. Основные команды execute и debug.
Исходный код утилиты можно попробовать подключить к своему проекту, либо вызывать её как модуль, но тогда обмен параметрами текстовый. В параметр к acpiexec нужно передавать имя файла dsdt.dat, этот файл нужно создать с помощью утилиты acpidump -b

В общем поэкспериментировав с вызовом функции \_SB_.PCI0._PRT понял, что она как раз и возвращает содержимое таблицы "APIC". В разных компьютерах эта таблица хранится под разными именами, поэтому лучше читать её через функцию _PRT, как и написано в первой статье. По-умолчанию возвращается таблица "PIC", поэтому в начале требуется вызвать процедуру _PIC с параметром 1.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 22 ноя 2013, 23:47 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
Вопрос по адресному пространству в Linux. Я хочу загрузить модуль разделяемой библиотеки в память (пользовательского уровня) так, чтобы он был виден по одинаковому адресу из любой задачи. Как это делается?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 23 ноя 2013, 00:49 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 208
Плохо, очень плохо - вендопуть какой-то.
Собсно, "по одинаковому адресу" - речь про виртуальный адрес? А зачем, если все от этого уходят в пользу PIC (позиционно-независимого кода)? Ибо ведь всегда можно нарваться на то что в какой-то задаче пересекающаяся с целевой область будет занята чем-то другим.
А так - есть вызов mmap, почитай про его первый аргумент (ну и флаг MAP_FIXED понадобится).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 23 ноя 2013, 01:59 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
Я компилирую модуль в PIC, и хотел чтобы при загрузке (или после загрузки) сделать его общедоступной библиотекой. Загружается он системным линковщиком, автоматически. Только потом сам модуль при инициализации может задействовать mmap, чтобы что-то ещё отобразить. Да в общем-то это действительно не обязательно, просто интересна сама возможность. Посмотрю доку на mmap ещё, может там есть наводка.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу Пред.  1, 2

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


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

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


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

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