如何使用 SPI 编写网络设备驱动程序?

用户8725011

我已经使用 rust 在用户空间中NRF24L01+ 收发器实现了一个设备驱动程序用户空间驱动程序使用内核 spi 接口驱动程序。将驱动程序编写为内核模块似乎非常困难,因为linux 设备驱动程序中找到的linux/netdevice.h文档似乎已经过时(或者我不够聪明,无法理解复杂的细节)。

慕尼黑工业大学的一个新项目建议使用vfio根据我的理解,这种类型的驱动程序实现使用 iommu 来管理设备的受保护内存区域的隔离。“Project Ixy”使用网络设备作为块设备,因此它可以被映射。SPI 是不同的,因为它是一种流媒体协议。

我的问题是,是否可以将用户空间 spi 网络设备驱动程序集成到 linux 网络堆栈中,例如让所有协议等都由网络堆栈处理。是否可以使用与 Project Ixy 类似的方法,比如在内核空间中有一个小组件,它是为了安全而隔离的,它为用户空间建立了一个“桥梁”?

用户2699113

我认为可以通过两种方式:

  1. 使用 TAP 接口
  2. 在用户空间和内核空间之间编写自己的“桥接”接口,如 TAP

如果类似以太网的接口对您来说已经足够了 - 那么请使用 TAP。我的意思是 TAP 提供了将物理层移动到用户空间的功能。在您的情况下,它可以这样工作:SPI 接收到的数据可以推送到 Linux 网络堆栈的 TAP 接口。从 TAP 接口(来自 Linux 网络堆栈)接收的数据可以通过 SPI 推送。那是你想要的吗?

如果类似以太网的接口(如 TAP)对您来说还不够 - 您可以基于 TAP 源在内核空间中编写自己的接口。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何编写简单的Linux设备驱动程序?

如何练习编写真正的Linux设备驱动程序?

如何编写多个从i2c客户端设备驱动程序?

如何编写Linux驱动程序模块调用/使用其他驱动程序模块?

Linux内核驱动程序模块:使用单个驱动程序处理多个设备文件

SPI Linux驱动程序

如何编写符合ALSA标准的虚拟设备驱动程序?

从虚拟Linux网络设备驱动程序发送的RX数据包被丢弃

如何修复在Linux内核SPI驱动程序中始终无法通过验证的SPI驱动程序

使用ADB访问SPI驱动程序

将多个SPI端口(设备)注册到单个SPI平台驱动程序?

是否应该使用IOKit或DriverKIt(或HIDDriverKit)在macOS中为USB或蓝牙多点触控设备编写驱动程序?

使用Eclipse为内核2.6编写“ Hello World”设备驱动程序

如何开始编写驱动程序?

如何更新设备驱动程序?

如何在C#Windows应用程序中为HID设备编写驱动程序

如何在正在运行的Debian Linux机器上换出网络设备的驱动程序?

如何为Raspberry Pi编写简单的UART Linux设备驱动程序?

Linux:如何查找用于设备的设备驱动程序?

如何在安装新内核时自动安装网络设备驱动程序r8168

使用ModemManager启用串行网络设备

Linux内核驱动程序-SPI如何识别SPI设备?

当多个设备适用时,如何指定设备使用的驱动程序

使用读写操作编写一个简单的杂项char设备驱动程序

如何编写虚拟网络设备驱动程序

使用 Python 的 Selenium 网络驱动程序

如何使用设备驱动程序获取文件版本?

使用无线扩展配置网络设备

使用 spi-bitbang 驱动程序