1网络设备驱动程序框架可以分为四层
网络协议接口层
----------------------------------------------------------------------------------------------------------
数据的发送 数据的接收
hard_start_xmit(struct sk_buffer *skb sturt *net_device) | netif_rx(struct sk_buffer *skb sturt *net_device)
----------------------------------------------------------------------------------------------------------
||
||
\/
设备接口层
----------------------------------------------------------------------------------------------------------
struct net_device
该结构体上层提供(网络协议接口层)提供发送和接收的函数,是下层(设备驱动层)各种属性和函数操作的集合。
该层主要分为五个部分
1:全局变量及其该结构体各个操作函数的初始化及其对该结构体赋值
例如,char name[IFNAMESIZE],int (*init)(struct net_device *dev)等,其中init函数是在模块初始化的时候调用,该函数的作用
就是初始化 struct net_device 中的一些函数 比如网络的打开、关闭、 sbk的发送、接收以ioctl、超时函数等
2:硬件的相关信息
例如共享内存的起始/结束地址mem_start/mem_end,io的基地址以及设备使用的中断号等等
3:接口信息
例如设备的接口的硬件类型type,设备的硬件地址dev_addr[MAX_ADDR_LEN]和广播地址brodcast[MAX_ADDR_LEN]等
4:设备的各种操作函数
例如网络的打开open(struct net_device* dev)/close(struct net_device* dev)/hard_start_xmit(...)/netif_rx(...)
5: 辅助成员
例如私有数据 void *priv,最后一次发送和接收数据包的时间
----------------------------------------------------------------------------------------------------------
||
||
\/
设备驱动层
----------------------------------------------------------------------------------------------------------
该层主要是实现net_device结构体中的各个函数,如打开和关闭网络函数、发送和接收数据包的函数,超时函数等等
----------------------------------------------------------------------------------------------------------
||
||
\/
设备与媒介
----------------------------------------------------------------------------------------------------------
该层说是设备与媒介,不怎么好听,我个人理解就是真正的硬件操作,比如操作寄存器,
该层主要是操作寄存器,比如从寄存器上读数据发送数据
本文出自 “菜鸟的驱动之路” 博客,转载请与作者联系!
原文:http://junzhang.blog.51cto.com/4634169/1536117