摘要: rtl8139 网卡驱动分析:(注:这里只分析了主要函数,代码版本是:8139too.c71420 bytes2010-04-01 22:56:18)/* * 提供了一系列驱动程序可调用的接口,主要用于发现和初始化设备 */static struct pci_driver rtl8139_pci_driver = { .name = DRV_NAME, .id_table = rtl8139_pci_tbl, .probe = rtl8139_init_one, .remove ... 阅读全文
posted @ 2012-08-04 21:35 KingsLanding 阅读(2014) 评论(0) 推荐(0) 编辑
摘要: 紧接上一篇,这里简要介绍net_device 结构和网卡驱动框架。 struct net_device 是一个比sk_buff 更复杂的结构,里面包含了与TCP/IP协议栈通信的接口函数,但是自从2.6.31 之后的内核中这些接口函数就被封装在了 stuct net_device_ops 结构中,在net_device 结构中以 netdev_ops 成员的形式出现。我们就来看如何使用该结构:1. 在初始化幻术中驱动需要分配一个net_device 结构,可以使用alloc_netdev()函数,也可以使用一个更常用的函数 alloc_etherdev() 函数来实现。这个函数在创建... 阅读全文
posted @ 2012-08-04 21:33 KingsLanding 阅读(2824) 评论(1) 推荐(0) 编辑
摘要: 接上一篇,我们来看与skb相关的一些重要函数:网络模块中,有两个用来分配SKB描述符的高速缓存,在SKB模块初始函数skb_init()中被创建:void __init skb_init(void){skbuff_head_cache = kmem_cache_create("skbuff_head_cache", sizeof(struct sk_buff), 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);skbuff_fclone_cache = kmem_cache_create("skbuff_fclone_cache&q 阅读全文
posted @ 2012-08-04 21:26 KingsLanding 阅读(1840) 评论(0) 推荐(0) 编辑
摘要: 参考:1. 深入理解Linux网络技术内幕 PartIII 2. Essential Linux Device Driver Chap15 3. Linux 内核源码剖析——TCP/IP 实现 5. rtl8139too.c 2010.4 修订 6. Linux 内核 2.6.33 7. google当你在写一个网卡驱动的时候回接触到3个重要的数据结构:1. struct sk_buff sk_buff 结构贯穿整个协议栈2. struct net_device 该结构定义了网卡驱动和协议栈之间的接口3. I/O 总线相关的结构,比如 struct pci_... 阅读全文
posted @ 2012-08-04 21:08 KingsLanding 阅读(1308) 评论(0) 推荐(0) 编辑