[图解linux][Network stack系列]:网络设备驱动的抽象与实现

在这里插入图片描述

网络设备驱动体系结构

Linux 网络驱动程序的体系结构可以划分为四层, 如下图所示, 从上到下分别为协议接口层, 网络设备接口层, 再就是提供实际功能的设备驱动功能层, 以及网络设备和网络媒介层 。
在这里插入图片描述
Linux 内核源代码 中提供了网络设备接口及以上层次的代码 , 因此移植特定网络硬件的驱动程序的主要工作就是完 成设备驱动功能层的相应代码 , 根据底层具体的硬 件特性 , 定义网络设备接口struc t net_device 类型的结构体变量, 并实现其中相应的操作函数及中断处理程序 Linux 中所有的网络设备都抽象为一个统一的接口, 即网络设备接口, 通过 struct net_device 类型的结构体变量表示网络设备在内核中的运行情况 , 这里既包括回环 ( loopback ) 设备 , 也包括硬件网络设备接口内核通过以 dev _ base 为头指针的设备链表来管理所有的网络设备。

实际上 dev_base 是指向 device 结构的指针,并且是由device 结构组成的链表的表头来构成的,在系统完成初始化以后, 系统检测到的网络设备就自动地保存在这张链表中,其中每一个链表项表示 一个存在的物理网络设备。当要发送数据包时,网络子系统将根据系统路由表选择相应的网络接 口进行数据传输,而当接收到数据包时,则通过驱动程序注册的中断服务程序进行数据的接收处理。

net_device 抽象

网络驱动程序的实现

おすすめ

転載: blog.csdn.net/qq_33487044/article/details/108183443