我使用铁锈在用户空间为NRF24L01+收发器实现了一个设备驱动程序。用户空间驱动程序使用内核spi接口驱动程序。将驱动程序编写为内核模块似乎非常困难,因为在linux设备驱动程序中找到的linux/netdevice.h文档似乎过时了(或者我不够聪明,无法理解复杂的细节)。
一个新的慕尼黑大学项目建议使用vfio。据我所知,这种类型的驱动程序实现使用iommu来管理设备的受保护内存区域的隔离。"Project“使用网络设备作为块设备,因此可以映射它。SPI是不同的,因为它是流协议。
我的问题是,是否有可能将用户空间spi网络设备驱动程序集成到linux网络堆栈中,例如由网络堆栈处理所有协议等。是否可以使用类似于Project的方法,比如在内核空间中有一个小组件,这是为了安全而隔离的,从而为用户构建一个“桥梁”?
发布于 2019-12-06 11:39:47
我认为有两种可能:
如果类似以太网的接口对您来说已经足够了,那么就使用TAP。我的意思是,TAP提供了将物理层移动到用户空间的功能。在您的例子中,它可以这样工作: SPI接收的数据可以被推到linux网络堆栈的接口上。从TAP接口(从Linux网络栈)接收的数据可以通过SPI进行推送。这就是你想要的吗?
如果以太网之类的接口(如TAP )对您来说是不够的,那么您可以基于TAP源在内核空间中编写自己的接口。
https://stackoverflow.com/questions/59211904
复制相似问题