Skip to content

诚实的边界

这是轮询驱动,不走中断。 收包靠 poll_rx 主动去查 ring,不是设备中断来通知。理由有二:一是 QEMU 在嵌套 KVM 下 MSI-X 锁存不可靠(xHCI 同款教训),二是 82540em 只支持 MSI(cap 0x05),不支持 MSI-X,中断路径没法抄现成的 MsixController。轮询在协议栈跑稳之前够用,真中断收包留后续。

没有协议栈,只到 L2。 这一章的驱动收发的是以太网帧(链路层,ethertype 0x0806 是 ARP、0x0800 是 IP)。测试能验证「发广播 ARP、收单播 reply」「发 DHCPDISCOVER、收广播 DHCPOFFER」——但内核里还没有 IP 层、没有 ICMP、没有 socket。所以这一步不能 ping:ping 是 ICMP over IP,要等下一章把 IP/ICMP 立起来。e1000 这章铺的是物理+链路层的跑道,网络协议栈在上面跑是后面的事。

链路起来了,但「真网络」还得等。 CTRL.SLU 把链路拉起来了(link=1),MAC 有了,收发环通了——但「往互联网发一个包并收到回包」这种端到端的事,要等协议栈把 IP/路由/socket 都立起来。这一章交付的是「一块能收能发的网卡」,不是「能上网」。

验证该看到什么,见配套 lab。下一章(058)在 e1000 这块跑道上立 IP/ICMP——到那时才能 ping 10.0.2.2

035_multi_terminal-45-gf25de18 · f25de18 · 2026-08-04