2

我正在尝试在 Rust 中构建一个 unikernel,它将启动并启动一个 Web 服务器。我正在使用Qemu进行测试。

到目前为止,通过关注各种在线博客和 github 上的项目,我已经设法编写了一个支持分段、分页和中断的操作系统。int 32内核已启动并运行,并且能够检测软件中断和硬件中断(如果显式调用了某种中断) 。在此之后,我启用了 IO 端口并实现了所有端口 I/O 功能,如inboutbinloutlinwoutw这有助于我读取和写入端口。我在某处读到这就是驱动程序和设备相互通信的方式。使用这些我使用探测方法来检测外围设备。在 qemu 中,检测到 3 个设备。

其中一个设备Intel 82540EM Ethernet Controller带有 device id0x100e和 vendor id 0x8086。我正在尝试与此驱动程序通信以实现将完成我的项目的数据包的传输和接收。我知道网卡和驱动程序之间发生的所有通信都是通过设备的 IO 端口进行的。

但是,我无法清楚地理解背景中发生的事情。那么,有人可以解释一下—— 我们如何检测到一些新数据包已经到达网卡?

4

0 回答 0