专题15-网卡驱动程序设计
第1课-网卡驱动架构分析
l Linux网络子系统
l 系统调用接口层:为应用程序提供访问网络子系统的统一方法。
l 协议无关层:提供通用的方法来使用传输层协议。
l 协议栈的实现:实现具体的网络协议
l 设备无关层:协议与设备驱动之前通信的通用接口
l 设备驱动程序
- 重要数据结构
在Linux内核中,每个网卡都由一个net_device结构来描述,其中的一些重要成员有:
l char name[IFNAMSIZ],设备名,如:eth%d
l unsigned long base_addr,I/O 基地址
l 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_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,
};
- 网卡操作集合
类似于字符设备驱动中的file_operations结构,net_device_ops结构记录了网卡所支持的操作。
static const struct net_device_ops dm9000_netdev_ops =
{
.ndo_open = dm9000_open,
.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。
第2课-回环网卡驱动设计
第3课-网络子系统深度剖析
第4课-DM9000网卡驱动深度分析
第5课-DM9000网卡驱动实现
原文地址:https://www.cnblogs.com/free-1122/p/11452269.html