易截截图软件、单文件、免安装、纯绿色、仅160KB

linux设备驱动程序——网络设备驱动程序

Linux的网络系统主要是基于BSD Unix 的socket机制, 访问网络设备的驱动程序不需要使用设备节点。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递。系统内部支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。因此,选择哪个驱动程序是基于内核内部的其他决定,而不是调用open(),对网络设备的使用通常由系统调用socket接口引入。
Linux网络设备驱动程序从上到下可以划分为4层,依次为网络协议接口层、网络设备接口层、提供实际动能的设备驱动功能层以及网络设备与媒介层。在设计具体的网络设备驱动程序时,我们需要完成的主要工作是编写设备驱动功能层的相关函数以填充net_device数据结构的内容并将net_device注册入内核。
一、网络协议接口层
      网络协议接口层最主要的功能是给上层协议提供了透明的数据包发送和接收接口。当上层ARP或IP协议需要发送数据包时,它将调用网络协议接口层的dev_queue_xmit()函数发送该数据,上层数据包的接收也通过向netif_rx()函数传递一个struct sk_buff数据结构的指针来完成。
       sk_buff结构体非常重要,它的含义为“套接字缓冲区”,用于在Linux网络子系统中的各层之间传递数据,是Linux网络子系统数据传递的“中枢神经”。
1.套接字缓冲区成员
(1) 各层协议头h、nh和mac 3个协议头对应于网络协议的不同层次,分别为传输层TCP/UDP协议头h、网络层协议头nh和链路层协议头mac。
(2) 数据缓冲区指针head、data、tail和end
(3) 长度信息len、data_len、truesize
2. 套接字缓冲区操作
分配 alloc_skb(),dev_alloc_skb();释放 kfree_skb(),dev_kfree_skb(),dev_kfree_skb_irq(),dev_kfree_skb_any();
指针移动 skb_put(),_ _skb_put(),skb_push(),_ _skb_push(),skb_pull(),skb_reserve()。
二、网络设备接口层
主要功能是为千变万化的网络设备定义了统一、抽象的数据结构net_device结构体,以不变应万变,实现多种硬件在软件层次上的统一。
设备操作:open(),stop()。
三、设备驱动功能层
       net_device结构体的成员需要被设备驱动功能层的具体数值和函数赋予。
       由于网络数据包的接收可由中断引发,设备驱动功能层中另一个主体部分将是中断处理函数,它负责读取硬件上接收的数据包并


相关文档:

实战Linux Bluetooth编程(三) HCI层编程

1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI)  就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......

linux系统管理

帐号管理
/etc/passwd         系统帐号信息
/etc/shadow         帐号密码信息         经MD5   32位加密
          在密码栏前面加『   *   』『   !   』禁止使用某帐号
/etc/group   &nb ......

Linux的裁剪

http://www.mcublog.com/more.asp?name=sharkdn&id=8810
=======================================
好些时候,我们需要一个只要一张软盘就能启动Linux 的系统,比如说做路由器。但是我们该怎样做呢? 也就是说我们要把Kernel和FileSystem都做在一张3.5'的盘上。我们先把FileSystem 分解成如下几个部分吧。
  1. /b ......

Linux笔记(11)入对行与嫁对郎:Linux的职业前景

  和我们讨论的主题越来越近了。“男怕入错行,女怕嫁错郎”,我对这句话的体会越来越深刻了。最近有个民生银行的老总和我探讨了这个问题,毫无疑问,在银行这个行业肯定比一般的行业挣钱。于是,自然切到我们的话题:Linux这个行业怎么样?挣钱吗?以后开源了我还有饭吃吗?最近,我拿到了一份Linux的职业报告。调查 ......

Linux网管学习笔记(12)关于Linux的内核安全

Linux内核是作为Monolithic architecture (单内核体系结构) 而实现的,为了获得 Microkernel architecture (微内核体系结构) 带来的可扩展性和可维护性,Linux 引入了模块 (module) 机制,(比较准确的说法是 Loadable Kernel Module, 可装载内核模块),藉此来保证内核的紧凑性和Linux本身固有的单一体系结构的优点—&# ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号