网络设备驱动体系结构
Linux 网络驱动程序的体系结构可以划分为四层, 如下图所示, 从上到下分别为协议接口层, 网络设备接口层, 再就是提供实际功能的设备驱动功能层, 以及网络设备和网络媒介层 。
Linux
内核源代码 中提供了网络设备接口及以上层次的代码 , 因此移植特定网络硬件的驱动程序的主要工作就是完 成设备驱动功能层的相应代码 , 根据底层具体的硬 件特性 , 定义网络设备接口struc t net_device
类型的结构体变量, 并实现其中相应的操作函数及中断处理程序 Linux
中所有的网络设备都抽象为一个统一的接口, 即网络设备接口, 通过 struct net_device
类型的结构体变量表示网络设备在内核中的运行情况 , 这里既包括回环 ( loopback
) 设备 , 也包括硬件网络设备接口内核通过以 dev _ base
为头指针的设备链表来管理所有的网络设备。
实际上 dev_base
是指向 device
结构的指针,并且是由device
结构组成的链表的表头来构成的,在系统完成初始化以后, 系统检测到的网络设备就自动地保存在这张链表中,其中每一个链表项表示 一个存在的物理网络设备。当要发送数据包时,网络子系统将根据系统路由表选择相应的网络接 口进行数据传输,而当接收到数据包时,则通过驱动程序注册的中断服务程序进行数据的接收处理。