如何发送数据/触发以太网网络设备驱动的ndo_start_xmit?

问题描述 投票:0回答:2

我正在开发以太网网络设备驱动程序,我遵循的步骤将设备注册为eth1并为其分配MAC地址(a0:b0,c0,d0,e0,f0),IPV4地址(192.168.10.127),甚至可以查看 /sys/class/net devices 中创建的设备。有关信息,我遵循了构建内核设备驱动程序的所有步骤,它生成了一个 .ko 文件并使用 insmod 加载了驱动程序。

当我使用 ifconfig eth1 up --> 调用设备打开时, ifconfig eth1 down --> 调用设备关闭, 但是当我 ping 它时 ping -I eth1 www.google.com(something) 我看不到设备传输 ndo_start_xmit 回调 未触发/调用。

有人可以指导我如何触发 ndo_start_xmit 回调/将数据传输到以太网网络设备驱动程序吗?

linux networking kernel linux-device-driver ethernet
2个回答
0
投票

在 Linux 源代码中搜索包装器

netdev_start_xmit


-1
投票

当然,调用驱动程序的 start_xmit 例程是您的责任。因为现在只有您可以看到您的司机:-@),这意味着需要查看清单:

  1. 你的 struct net_dev_ops 是否声明 .ndo_start_xmit =
  2. 驱动程序中的某个例程是否充当 ndo_start_xmit 的调用者,您能看看您是否到达了调用它的地步(大概您没有)?如果没有,为什么不呢?
  3. 您的驱动程序策略是否要求您发出 tx 中断?如果是这样,您能否验证它是否已生成并处理?
  4. 您的驱动程序是否执行适当的 wmb() 调用以确保所有元数据已写入/同步/对设备可见,以便设备可以看到您有可用/排队发送的数据包并正在请求它要发送吗?

如果您要在已知工作的驱动程序上建模并选择尽可能简单的驱动程序,则所有这些要点都应该从该驱动程序的代码中清晰可见。如果您这样做,您就有更好的机会使任何设备驱动程序正常工作,而不是尝试从头开始编写整个驱动程序。

© www.soinside.com 2019 - 2024. All rights reserved.