1

Я пытаюсь изучить драйвер режима пользователя для получения прерываний моей сетевой карты.Как работать с драйверами UIO с моей сетевой картой

Я insmod два компонента ядра ${KSRC}/drivers/uio/uio.ko and ${KSRC}/drivers/uio/uio_pci_generic.ko.

Но я выигрыш вижу устройство получения создали, который я могу тогда mmap

Обычно для UIO мне нужно что-то вроде "/dev/uio0" который я могу открыть то mmap()

Итак, как работать с картой UIO?

Редактировать: Моя сетевая карта - контроллер сети Marvell. Мое оборудование - x86 Ubuntu. Ядро Linux 3.13.11.11. Таким образом, ни одно дерево устройств не основано.

+0

Какое оборудование вы используете? С помощью, например, ARM-устройствам необходимо добавить узел в дерево устройств для представления аппаратного обеспечения. –

+0

x86, без дерева устройств. – Haswell

+0

Возможно выполнение mknod явно требуется, как это делается на этой странице http://dpdk.org/ml/archives/dev/2014-October/006373.html –

ответ

0

Прежде всего, драйвер должен быть скомпилирован в ядро. Либо используйте конфигурацию меню, либо добавьте следующие строки в файл .cfg. Вы можете проверить, что драйвер был скомпилирован, просмотрев /lib/modules/<kernel-name>/modules.builtin.

CONFIG_UIO=y 
CONFIG_UIO_PDRV_GENIRQ=y 

Следующий шаг будет добавить следующую запись в дерево устройств Вы можете проверить, что водитель был составлен глядя в /lib/modules/<kernel-name>/modules.builtin .file. Где среднее число - это прерывание, на которое вы нацеливаете -32. Это означает, что 0x1D == 29, а затем добавьте 32 для номера прерывания, зарегистрированного в GIC (Generic Interrupt Controller on ARM systems).

[email protected] { 
    compatible = "generic-uio"; 
    reg = <0x7aa00000 0x10000>; 
    interrupts = <0x0 0x1D 0x4>; 
    interrupt-parent = <0x3>; 
    clocks = <0x1>; 
}; 

и смена бунтаргов на console=ttyPS0,115200 root=/dev/mmcblk0p1 rw rootwait earlyprintk uio_pdrv_genirq.of_id=generic-uio.

Если все пойдет хорошо, вы увидите устройство /dev/uio0 после загрузки.

Смежные вопросы