网卡驱动程序分析

Linux网络子系统如图:

这里写图片描述

网络子系统分为用户空间和内核空间,而内核空间又可以分为:
①系统调用接口层
为应用程序提供访问网络子系统的统一方法,如socket,accept等函数接口。
②协议无关层
提供通用的方法来使用传输层协议。即无论下层使用的是何种网络协议,协议无关层将该种网络协议的接口转化为统一接口,提供给系统调用接口层使用。
③网络协议栈
实现具体的网络协议
④设备无关层
协议与设备驱动之前通信的通用接口。即统一了设备驱动的接口函数,使上层能够使用统一的函数接口来访问驱动函数。
⑤设备驱动程序
实现具体的设备操作。


在Linux内核中,每个网卡都由一个net_device结构来描述,其中的一些重要成员有:

struct net_device
{
    char name[IFNAMSIZ]; /*设备名,如:eth%d*/
    unsigned long base_addr; /*I/O 基地址*/
    const struct net_device_ops *netdev_ops; /**/
}

类似于字符设备驱动中的file_operations结构,net_device_ops结构记录了网卡所支持的操作。如:

static const struct net_device_ops dm9000_netdev_ops =
{
    .ndo_open = dm9000_open,
    .ndo_stop = dm9000_stop,
    .ndo_start_xmit = dm9000_start_xmit,
    .ndo_do_ioctl = dm9000_ioctl,
    .ndo_validate_addr = eth_validate_addr,
    .ndo_set_mac_address = eth_mac_addr,
};

Linux内核中的每个网络数据包都由一个套接字缓冲区结构 struct sk_buff 描述,即一个sk_buff结构就是一个网络包,指向sk_buff的指针通常被称做skb。


网卡驱动程序的重点有初始化、数据发送、数据接收
初始化

这里写图片描述

数据发送

这里写图片描述

数据接收

这里写图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值