【问题标题】:How do I write a network device driver using SPI?如何使用 SPI 编写网络设备驱动程序?
【发布时间】:2020-03-31 08:58:38
【问题描述】:

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

一个新的project from the TU Munich 提议使用vfio。据我了解,这种类型的驱动程序实现使用 iommu 来管理设备对受保护内存区域的隔离。 “Project Ixy”使用网络设备作为块设备,因此可以映射。 SPI 是不同的,因为它是一种流协议。

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

【问题讨论】:

    标签: linux driver spi


    【解决方案1】:

    我认为有两种可能:

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

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

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

    【讨论】:

    • 听起来很合理。因此,TAP 接口位于数据链路层,而用户空间驱动程序提供物理访问。如果你指的是this,我会试一试。感谢您的提示!
    • 是的 - 它是 TUN/TAP 驱动程序接口。但是对于您的解决方案,应该使用 TAP 接口 - 而不是 TUN。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多