【问题标题】:How to send data/trigger ndo_start_xmit of the ethernet network device driver?如何发送数据/触发以太网网络设备驱动程序的 ndo_start_xmit?
【发布时间】:2021-06-20 08:11:55
【问题描述】:

我正在开发以太网网络设备驱动程序,我遵循的步骤将设备注册为 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


    【解决方案1】:

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

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

    如果您在一个已知工作的驱动程序上建模您的驱动程序,该驱动程序被选择为尽可能简单,那么所有这些点都应该从该驱动程序的代码中清楚地看出。如果您这样做而不是尝试从头开始编写整个驱动程序,那么您就有更好的机会使任何设备驱动程序工作。

    【讨论】:

      猜你喜欢
      • 2022-09-19
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多