摘要: 设备关闭操作主要完成设备启用标记位的清除,未发送完的数据发送完,发送禁用通知等操作;下面为相关函数的调用关系,其中dev_change_flags调用__dev_close的流程,已经在设备开启文章中做过介绍,此处不再分析; 1 /** 2 * 设备禁用函数调用关系 3 * dev_change_f 阅读全文
posted @ 2017-09-15 15:00 AlexAlex 阅读(844) 评论(0) 推荐(0) 编辑
摘要: __dev_open函数,完成对设备的启用操作,并进行一些必要初始化和通知,调用关系如下,本文主要对这几个函数进行分析; 1 /** 2 * _dev_open函数的调用关系 3 * dev_change_flags-->_dev_change_flags-->__dev_open 4 * 5 * 阅读全文
posted @ 2017-09-15 14:45 AlexAlex 阅读(2230) 评论(0) 推荐(0) 编辑
摘要: 在注销网络设备时,会调用pci_driver->remove函数,以e100网卡驱动为例,实际调用e100_remove,该函数调用函数unregister_netdev进行设备注销操作; 函数调用关系图如下,注销分为两步: (1) 回滚注册操作,进行初步注销,过程中如果设备尚未关闭,则需先调用de 阅读全文
posted @ 2017-09-15 14:33 AlexAlex 阅读(1513) 评论(0) 推荐(0) 编辑
摘要: 注册网络设备时,会调用pci_driver->probe函数,以e100网卡驱动为例,在调用alloc_ehterdev分配内存之后,会接着调用register_netdev进行设备注册,注册过程包含部分成员初始化,注册到文件系统,消息通知等; 1 /** 2 * 设备注册函数调用关系图 3 * e 阅读全文
posted @ 2017-09-15 14:17 AlexAlex 阅读(1675) 评论(0) 推荐(0) 编辑
摘要: 在注册网络设备时,会调用pci_driver->probe函数,以e100网卡驱动为例,其最终会调用alloc_netdev_mqs来分配内存,并且在分配内存后调用setup函数(以太网为ether_setup)初始化二层地址等信息。下面以e100为例,分析alloc_netdev_mqs函数和et 阅读全文
posted @ 2017-09-15 14:10 AlexAlex 阅读(3285) 评论(0) 推荐(0) 编辑
摘要: net_device结构是二层中一个非常重要的结构,其结构中成员很多,包含了硬件信息,接口信息,其他辅助信息,以及设备操作函数等等;下面对其中重要的字段含义进行了标注,目前仍在阅读代码过程中,其中某些字段含义会在后面进行补充或者更新; 1 struct net_device { 2 /* 设备名称, 阅读全文
posted @ 2017-09-15 14:00 AlexAlex 阅读(9707) 评论(0) 推荐(0) 编辑
摘要: 每个pci驱动都有一个pci_driver实例,用以描述驱动名称,支持的设备信息,以及对应的操作函数; 1 /* 2 描述一个pci设备,每个pci驱动必须创建一个pci_driver实例 3 */ 4 struct pci_driver { 5 struct list_head node; 6 / 阅读全文
posted @ 2017-09-15 13:46 AlexAlex 阅读(3062) 评论(0) 推荐(0) 编辑
摘要: 标准PCI设备都有一个配置寄存器,用来存储各种参数; 1 /* pci设备配置寄存器 */ 2 struct pci_device_id { 3 /* 厂商id,设备id */ 4 __u32 vendor, device; /* Vendor and device ID or PCI_ANY_ID 阅读全文
posted @ 2017-09-15 13:41 AlexAlex 阅读(5153) 评论(0) 推荐(0) 编辑