如何使用我的网卡使用UIO驱动程序

时间:2015-12-09 12:14:47

标签: linux-kernel network-programming linux-device-driver mmap

我正在尝试学习用户模式驱动程序以接收网卡的中断。

我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。所以没有基于设备树。

1 个答案:

答案 0 :(得分:0)

首先,必须将驱动程序编译到内核中。使用菜单配置或将以下行添加到 .cfg 文件。您可以通过查看/lib/modules/<kernel-name>/modules.builtin来检查驱动程序是否已编译。

CONFIG_UIO=y
CONFIG_UIO_PDRV_GENIRQ=y

下一步是将以下条目添加到设备树您可以通过查看/lib/modules/<kernel-name>/modules.builtin。文件来检查驱动程序是否已编译。中间数字是你瞄准的中断-32。这意味着0x1D == 29然后为GIC(ARM系统上的通用中断控制器)中注册的中断号添加32。

spw0@7aa00000 {
  compatible = "generic-uio";
  reg = <0x7aa00000 0x10000>;
  interrupts = <0x0 0x1D 0x4>;
  interrupt-parent = <0x3>;
  clocks = <0x1>;
};

并将bootargs更改为console=ttyPS0,115200 root=/dev/mmcblk0p1 rw rootwait earlyprintk uio_pdrv_genirq.of_id=generic-uio

如果一切顺利,您将在启动后看到/dev/uio0设备。