У меня процессор AMD модели e2-2000. Это семейство 0fh. Согласно семейству 0fh BKDG, у меня есть этот код для чтения идентификатора устройства и поставщика:
ReadPCIConfiguration:
movq $0x80000100, %rax
movq $0x0cf8, %rdx
outl %eax, %dx # sigsegv caught here
movq $0x0cfc, %rdx
inl %dx, %eax
ret
Насколько я знаю, алгоритм чтения/записи конфигурации PCI выглядит следующим образом:
- записать номер целевой шины, номер функции номера устройства и смещение или номер регистра в адрес порта конфигурации
- выполнять 1-, 2- или 4-байтовую операцию чтения/записи из/в порт данных конфигурации
Порты 0xcf8..0xcfb - адрес порта конфигурации (двойное слово)
Значение битов:
- 31 - EnReg - включить транзакцию (R/W)
- 24..31 - зарезервировано (Р/О)
- 16..23 - BusNum (R/W)
- 11..15 - DevNum (R/W)
- 8..10 - FuncNum (R/W)
- 2..7 - RegNum (R/W)
- 0..1 - Зарезервировано (R/O)
Итак, пишу в шину - 0, dev - 0, func - 1, reg - 00
Я делаю что-то неправильно?
(Я запускаю скомпилированное и связанное приложение из пользовательского пространства, GNU/Debian "Wheezy" Linux 3.11.6)
ioperm
иiopl
. Может стоит удалить вопрос? - person Sergey Kanaev   schedule 01.12.2013