#include<linux/netdevice.h>
定义structnet_device和structnet_device_stats的头文件,包含了几个其他网络驱动需要的头
文件.
structnet_device*alloc_netdev(intsizeof_priv,char*name,void(*setup)(structnet_device*);
structnet_device*alloc_etherdev(intsizeof_priv);
voidfree_netdev(structnet_device*dev);
分配和释放net_device结构的函数
intregister_netdev(structnet_device*dev);
voidunregister_netdev(structnet_device*dev);
注册和注销一个网络设备.
void*netdev_priv(structnet_device*dev);
获取网络设备结构的驱动私有区域的指针的函数.
structnet_device_stats;
持有设备统计的结构.
netif_start_queue(structnet_device*dev);
netif_stop_queue(structnet_device*dev);
netif_wake_queue(structnet_device*dev);
控制传送给驱动来发送的报文的函数.没有报文被传送,直到netif_start_queue被调用.
netif_stop_queue挂起发送,netif_wake_queue重启队列并刺探网络层重启发送报文.
skb_shinfo(structsk_buff*skb);
宏定义,提供对报文缓存的"sharedinfo"部分的存取.
voidnetif_rx(structsk_buff*skb);
调用来通知内核一个报文已经收到并且封装到一个socket缓存中的函数.
voidnetif_rx_schedule(dev);
来告诉内核报文可用并且应当启动查询接口;它只是被NAPI兼容的驱动使用.
intnetif_receive_skb(structsk_buff*skb);
voidnetif_rx_complete(structnet_device*dev);
应当只被NAPI兼容的驱动使用.netif_receive_skb是对于netif_rx的NAPI对等函数;它递交一个报文给内核.当一个NAPI兼容的驱动已耗尽接收报文的供应,它应当重开中断,并且调用netif_rx_complete来停止查询.
#include<linux/if.h>
由netdevice.h包含,这个文件声明接口标志(IFF_宏定义)和structifmap,它在网络驱动的ioctl实现中有重要地位.
voidnetif_carrier_off(structnet_device*dev);
voidnetif_carrier_on(structnet_device*dev);
intnetif_carrier_ok(structnet_device*dev);
前2个函数可用来告知内核是否接口上有载波信号.netif_carrier_ok测试载波状态,如同在设备结构中反映的.
#include<linux/if_ether.h>
ETH_ALEN
ETH_P_IP
structethhdr;
由netdevice.h包含,if_ether.h定义所有的ETH_宏定义,用来代表字节长度(例如地址长度)以及网络协议(例如IP).它也定义ethhdr结构.
#include<linux/skbuff.h>
structsk_buff和相关结构的定义,以及几个操作缓存的内联函数.这个头文件由netdevice.h包含.
structsk_buff*alloc_skb(unsignedintlen,intpriority);
structsk_buff*dev_alloc_skb(unsignedintlen);
voidkfree_skb(structsk_buff*skb);
voiddev_kfree_skb(structsk_buff*skb);
voiddev_kfree_skb_irq(structsk_buff*skb);
voiddev_kfree_skb_any(structsk_buff*skb);
处理socket缓存的分配和释放的函数.通常驱动应当使用dev_变体,其意图就是此目的.
unsignedchar*skb_put(structsk_buff*skb,intlen);
unsignedchar*__skb_put(structsk_buff*skb,intlen);
unsignedchar*skb_push(structsk_buff*skb,intlen);
unsignedchar*__skb_push(structsk_buff*skb,intlen);
添加数据到一个skb的函数;skb_put在skb的尾部放置数据,而skb_push放在开始.正常版本进行检查以确保有足够的空间;双下划线版本不进行检查.
intskb_headroom(structsk_buff*skb);
intskb_tailroom(structsk_buff*skb);
voidskb_reserve(structsk_buff*skb,intlen);
进行skb中的空间管理的函数.skb_headroom和skb_tailroom说明在开始和结尾分别有多少空间可用.skb_reserve可用来保留空间,在一个必须为空的skb开始.
unsignedchar*skb_pull(structsk_buff*skb,intlen);
skb_pull"去除"数据从一个skb,通过调整内部指针.
intskb_is_nonlinear(structsk_buff*skb);
如果这个skb是为发散/汇聚I/O分隔为几个片,函数返回一个真值.
intskb_headlen(structsk_buff*skb);
返回skb的第一个片的长度,由skb->data指向.
void*kmap_skb_frag(skb_frag_t*frag);
voidkunmap_skb_frag(void*vaddr);
提供对非线性skb中的片直接存取的函数.
#include<linux/etherdevice.h>
voidether_setup(structnet_device*dev);
为以太网驱动设置大部分方法为通用实现的函数.它还设置dev->flags和安排下一个可用的
ethx给dev->name,如果名子的第一个字符是一个空格或者NULL字符.
unsignedshorteth_type_trans(structsk_buff*skb,structnet_device*dev);
当一个以太网接口收到一个报文,这个函数被调用来设置skb->pkt_type.返回值是一个协议号,通常存储于skb->protocol.
#include<linux/sockios.h>
SIOCDEVPRIVATE
前16个ioctl命令,每个驱动可为它们自己的私有用途而实现.所有的网络ioctl命令都在sockios.h中定义.
#include<linux/mii.h>
structmii_if_info;
声明和一个结构,支持实现MII标准的设备的驱动.
#include<linux/ethtool.h>
structethtool_ops;
声明和结构,使得设备与ethtool工具一起工作.
相关推荐
LDD3学习笔记设备模型之底层实现(kobject,kset)[汇编].pdf
LDD2+LDD3 linux设备驱动
经典 LDD3,linux驱动开发 linux驱动开发
ldd code ldd3驱动源代码 ldd code ldd3驱动源代码
LDD3是linux驱动开发的基础入门级图书,适合刚接触linux驱动的新手学习。
本资源为ldd3详解,该书中详细介绍了ldd3的使用以及各种驱动的设置
Linux 设备驱动 Edition 3 - LDD3中文版,学习linux必备之书,pdf格式
LDD-LinuxDeviceDrivers#1书籍-一些书中的原始码和范例目录书籍#2 study--本人的linux学习以及驱动代码目录书籍学习Linux内核的设计与实现,包括文档和示例代码,文档与同步更新自己实现的一些linux内核的驱动代码...
这是《linux设备驱动程序》的全部源代码 学习linux设备驱动的时候可以参考一下
包含linux设备驱动 第三版(ldd3)书中所有源码。
高清PDF,全英文版
Linux_设备驱动_Edition_3_-_LDD3中文版.pdf
Linux设备驱动程序(中文版第三版) 例子
LDD-3(Linux驱动)中文版,绝对好东西
ldd3-examples-3.x, 在 linux 3.x 之后,端口LDD3源代码示例 ldd3-examples-3.xlinux 3 。x 之后LDD3源代码示例的端口背景LDD3是Linux设备驱动程序,第三版。 这是一本关于如何编写linux设备驱动程序的。 你可以从 ...
ldd3中文版、chmldd3中文版chm
LDD3配套源码,配合我的百度云分享的虚拟机可以直接编译运行(虚拟机另行在我上传的资源里下载,相关可以参考我的LDD3系列博客)
由于对Linux设备驱动程序设计的需求,所以前段时间在网上下载了LDD3的HTML格式文档,在看的时候感觉不太好看,同时为了打印方便,把它转化为PDF格式,所以在此与大家一起分享。 由于本资料不是本人自创,也是来自于...
Linux内核与设备驱动程序学习笔记