07 数据面路径与 drivers 分界机制与实现详解
1. 接收路径(RX)
要点:
- 驱动 只做 DMA 描述符 → skb 封装、硬件 offload 标记;
- GRO 在 core 合并;
- Netfilter PRE_ROUTING 在 L3 入口;
- 协议栈 向上递交到 socket 接收队列。
2. 发送路径(TX)
1 | sock_sendmsg → proto_sendmsg → ip_queue_xmit → neigh_resolve_output |
TSO/GSO:在 core/protocol 分段,驱动发大包或硬件分段。
3. 分界表
| 职责 | net/ | drivers/net/ |
|---|---|---|
| 套接字语义 | ✓ | |
| TCP/UDP 状态机 | ✓ | |
| FIB/ARP/ND | ✓ | |
| net_device 抽象 | ✓ 定义 | ✓ 注册实例 |
| 寄存器/DMA/NAPI | ✓ | |
| MDIO PHY | ✓(常 phy 子目录) | |
| ethtool 能力声明 | ✓ 框架 | ✓ ops 实现 |
| XDP 程序 attach | ✓ 框架 | ✓ ndo_bpf |
4. RK3588 常见驱动位置
| 接口 | 典型路径 |
|---|---|
| 板载 GMAC | drivers/net/ethernet/stmicro/stmmac/ 或 Rockchip dwmac |
| PCIe 网卡 | r8169、igc 等 |
| WiFi | drivers/net/wireless/broadcom/brcmfmac、bcmdhd 等 |
| USB 网卡 | asix、r8152 |
Device Tree 描述 MAC/PHY 在 arch/arm64/boot/dts/rockchip/,不在 net/。
5. 统计与调试接口
| 工具 | 内核侧 |
|---|---|
ip -s link |
dev->stats、per-queue stats |
ethtool -S |
get_ethtool_stats(驱动) |
drop_monitor |
net/core/drop_monitor.c |
| ftrace/tcp | 协议 tracepoint |
6. 与编解码/多媒体
RK3588 VPU/NPU 不走 net/ 主路径;RTP/RTSP 多在用户态或 MPP,内核仅提供 UDP socket。网络调优关注 带宽、抖动、防火墙。
7. 小结
排障时先确定层次:链路 up?(驱动)→ 路由?(fib)→ 过滤?(netfilter)→ 应用?(socket)。线速问题常落 驱动 + 中断亲和 + RPS。
正在加载留言…