Всем привет.
Как писать драйверы PCI устройств под Linux?
В частности как работать с конф. пространством PCI устройств?
Что такое модуль ядра я знаю.
Нашёл групу функций pcibios_(read|write)...
Нашёл файл pci.h.
Написал простой модуль ядра читающий конф. пространство заданного устройства.
Для стандартных устройств (сетивуха, мультимедиа устройства) всё нормально. Но вот для нашей платы /*находится тоже в разработке*/ не работает. При этом биос её находит. Выводит вендор и девайс ID при загрузке. Правильно определяет её положение на шине. Далее при загрузке Линукс опрашивает это устройство (определили аппаратно). При работе модуля обращения к конфиг. пространству устройства не проходят вообще. (pcibios_read... возвращает одни нули. /*для "фирменных" устройств возвращаются правильные значения*/
Функция pci_find_slot возращает NULL для нашего устройства/*для "фирменных" устройств работает верно*/.
И ешё в W2k при опросе всех устройств происходят обращения к конф. пространству устройства.
Если можно простой пример пример или ссылачку на такой пример.
Где можно почитать про написание PCI драйверов под Linux.
/usr/src/linux/documentation/pci.txt - читал. Но без примера не разобраться.
найди книжку Алесандро Рубини (Linux Device Drivers, second edition)
валяется на Oreilly.com ее можно скачать в электронном виде.
Затем ее прочти.
Все вопросы отпадут сами.
>найди книжку Алесандро Рубини (Linux Device Drivers, second edition)
>валяется на Oreilly.com ее можно скачать в электронном виде.
>Затем ее прочти.
>Все вопросы отпадут сами.Читал.
Но народ говорит, что в этой книге изложено ка писать драйвер под ядро 2.2, а мне надо 2.4.
К стате проблема о которой я писал выше решилась сама собой.
Но всеравно много не ястностей. Какие стандартные шаги должен выполнять драйвер, что бы соответствовать модели драйвера PCI устройства для ядра 2.4. Если можешь изложи по шагам.
>Читал.
>Но народ говорит, что в этой книге изложено ка писать драйвер под
>ядро 2.2, а мне надо 2.4.В Linux Device Drivers есть все. Включая и инфу про 2.4. Плохо читал...
Посмотри в сторону pci_register_driver().
А также рекомендую найти в ядре драйвер поменьше какого-нибудь pci устройства (а лучше парочку) и посмотреть его.