linux net子系统-设备驱动层

设备驱动层框架


struct net_device

添加struct net_device

static struct platform_driver rtl8168_platform_driver = {
...
    .probe      = rtl8168_init_one,
};
rtl8168_init_one
    rtl8168_init_board
        struct net_device *dev = alloc_etherdev(sizeof (*tp))
            alloc_etherdev_mq
                alloc_etherdev_mqs

注册struct net_device

register_netdev(dev)
    register_netdevice //由net/core/dev.c文件实现

struct net_device_ops

static const struct net_device_ops rtl8168_netdev_ops = {
    .ndo_open       = rtl8168_open,
    .ndo_stop       = rtl8168_close,
    .ndo_get_stats      = rtl8168_get_stats,
    .ndo_start_xmit     = rtl8168_start_xmit,
    .ndo_tx_timeout     = rtl8168_tx_timeout,
    .ndo_change_mtu     = rtl8168_change_mtu,
    .ndo_set_mac_address    = rtl8168_set_mac_address,
    .ndo_do_ioctl       = rtl8168_do_ioctl,
    .ndo_set_rx_mode    = rtl8168_set_rx_mode,
    .ndo_fix_features   = rtl8168_fix_features,
    .ndo_set_features   = rtl8168_set_features,
};

用户空间的ifconfig会导致rtl8168_open的调用


struct ethtool_ops

static const struct ethtool_ops rtl8168_ethtool_ops = {
    .get_drvinfo        = rtl8168_get_drvinfo,
    .get_regs_len       = rtl8168_get_regs_len,
    .get_link           = ethtool_op_get_link,
    .get_settings       = rtl8168_get_settings,
    .set_settings       = rtl8168_set_settings,
    .get_msglevel       = rtl8168_get_msglevel,
    .set_msglevel       = rtl8168_set_msglevel,
    .get_regs           = rtl8168_get_regs,
    .get_wol            = rtl8168_get_wol,
    .set_wol            = rtl8168_set_wol,
    .get_strings        = rtl8168_get_strings,
    .get_sset_count     = rtl8168_get_sset_count,
    .get_ethtool_stats  = rtl8168_get_ethtool_stats,
    .get_ts_info        = ethtool_op_get_ts_info,
};

ndo_start_xmit

rtl8168_start_xmit

rtl8168_rx_skb

rtl8168_open
    request_irq(dev->irq, rtl8168_interrupt...)
        rtl8168_rx_interrupt
            rtl8168_rx_skb
                netif_rx(skb)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luckywang1103

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值