【问题标题】:Is there a way to drive a today's computer NIC with no underlying OS?有没有办法在没有底层操作系统的情况下驱动今天的计算机网卡?
【发布时间】:2010-12-12 20:13:09
【问题描述】:

我想编写一个没有底层操作系统、在 x86 架构上运行并驱动任何现代网络接口控制器的 IO 密集型应用程序。

通过查看 Linux 的驱动程序源代码,我知道驱动例如 Intel e1000e 千兆位控制器需要数千行代码。我认为这样的代码很难从 Linux 源代码中提取出来。

您是否知道任何解决方案/项目提供了一种驱动当今计算机(包括其 NIC)的方法,可能是通过包装 Linux 驱动程序?

非常感谢

【问题讨论】:

  • 你为什么不想要一个操作系统?以 Linux 为例,将其剥离到最基本的部分,然后就可以了……

标签: linux x86 kernel drivers io


【解决方案1】:

您必须编写一个驱动程序和一个操作系统(某种意义上)来管理所有这些。调度、内存管理、带外 IO、IP 堆栈(如果您选择走那条路线)。为什么要重新发明轮子?获取实时 Linux 发行版,或获取 vxworks 或 QNX - 专为 IO 密集型需求而构建的东西。

【讨论】:

  • 其实他得写很多驱动。我可以理解想要在裸 x86 上运行某些东西,但是想要这样做并使用各种 NIC 是很奇怪的。
【解决方案2】:

UNDI 是网络设备的通用编程接口,应该适用于所有支持 PXE 的网卡(现在基本上都是这样)。

UNDI 设计为在真实(16 位无保护)模式下运行,无需操作系统即可轻松使用。 (没有操作系统或像 DOS 这样的笨操作系统比在现代操作系统中容易得多,后者在 32 位或 64 位保护模式下运行。)

【讨论】:

  • 是的,使用 UNDI API 的性能不可能接近适当的硬件驱动程序的性能。仅当您在有限的环境中工作时才有用,在这种环境中您不太关心性能,因为您没有许多特定于 NIC 的驱动程序。
  • 拥有驱动程序的部分好处是能够利用 DMA 和所有有趣的东西来提高性能。他绝对可以做到这一点,尤其是使用 GPL 驱动程序作为基准,但它会变得更加艰难,稳定性也会大大降低,而且最终可能比 QNX 许可证的成本更高。
猜你喜欢
  • 2010-10-26
  • 2013-02-18
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多