我正在尝试学习用户模式驱动程序以接收网卡的中断。
我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 :(得分: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
设备。