【Linux device driver】网络设备驱动程序(二)

Linux网络设备驱动程序中,sk_buff是关键数据结构,用于各层间数据传递。它包含控制方法和数据缓冲区,以双向链表形式组织,常用于删除链表头元素和添加到链尾。sk_buff的相关操作包括:alloc_skb、dev_alloc_skb、kfree_skb、skb_clone、skb_copy等,以及用于管理队列的skb_queue_head、skb_queue_tail等方法。这些方法在网络数据处理和协议重组中起到重要作用。
摘要由CSDN通过智能技术生成
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
2.1 网络驱动程序的结构    
  Linux网络驱动程序的体系结构如图1所示。
可以划分为四层:
(1)协议接口层
(2)网络设备接口层
(3)设备驱动功能层
(4)及网络设备和网络媒介层。
网络驱动程序重点:完成设备驱动功能层
在Linux中,所有网络设备都抽象为一个接口(interface)。这个接口提供了对所有网络设备的操作集合,由数据结构 struct net_device表示。
数据结构net_device中有很多供系统访问和协议层调用的设备方法,包括供设备初始化和往系统注册用的init函数、打开和关闭网络设备的open和stop函数、处理数据包发送的函数hard_ start_xmit,以及中断处理函数等。有关net_device数据结构(在内核中也就是net_device)的详细内容,请参看/linux/include/linux/netdevice.h
2.2 网络驱动实现模式
  
  实现Linux网络设备驱动功能主要有两种形式:

    (1)通过内核来进行加载,当内核启动的时候,就开始加载网络设备驱动程序,内核启动完成之后,网络驱动功能也随即实现了;

    (2)再就是通过模块加载的形式。

    比较两者,第二种形式更加灵活。
在此着重对模块加载形式进行讨论。
  (1)insmod 来把网络设备驱动程序插入到内核之中。
    (2) insmod将调用init_module()函数
    (3) 对dev->init
函数指针赋值
    (4)register_netdev()函数注册该网络设备。如果成功,网络设备初始化,
        将net_device 数据结构插入到dev_base链表的末尾。
    (5)模块卸载 rmmod
具体实现过程见图2所示。

 

2.3 网络驱动程序的基本方法
2.3.1 初始化
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值