У меня есть довольно большой драйвер PCIe, написанный для Linux, теперь мне нужно портировать его на FreeBSD. Я еще не знаю версию BSD, но думаю, что на данный момент это не имеет значения, так как я хотел бы понять в целом, какие основные элементы должны быть изменены во время усилий по портированию.
Хорошо то, что драйвер разделен на независимый от ОС «библиотечный» уровень (OSI) и зависимый от ОС, поэтому у него уже есть «каркас», позволяющий портировать его на другие ОС, и я надеюсь, что большая часть усилий будет сосредоточены на стороне OSI. Пока я вижу следующие большие куски работы:
- код инициализации, то есть специфичный для ОС код, который «подключает» драйвер в систему (аналогично тому, что делает init_module, cleanup_module в Linux)
- код, регистрирующий драйвер в базовой подсистеме PCI ядра
- регистрационный код символьного драйвера 4) операции DMA
На что еще я должен обратить внимание? Этот драйвер представляет собой устройство, выполняющее аппаратное шифрование, поэтому оно является разгрузочным устройством (входные пакеты от сетевого адаптера обычно поступают в систему, а затем перенаправляются на устройство).
Если есть полезные веб-ссылки на описание разработки/переноса драйверов BSD (по аналогии с LDD), я бы с радостью их принял :)
/usr/share/examples/kld/cdev
FreeBSD. Есть также такие книги, как «Проектирование и внедрение операционной системы FreeBSD» и «Драйверы устройств FreeBSD: руководство для бесстрашных». - person kdhp   schedule 22.08.2015/usr/share/examples/kld/cdev/module
9 лет, поэтому основные принципы должны быть такими же. Возможно, стоит отметить, что в дереве исходных текстов FreeBSD есть много разрешительно лицензированных примеров с длинной историей SVN. Кроме того, справочные страницы в разделе 9 являются частьюFreeBSD Kernel Developer's Manual
, там задокументировано большинство API ядра. - person kdhp   schedule 25.08.2015