Chinaunix首页 | 论坛 | 博客
  • 博客访问: 633298
  • 博文数量: 140
  • 博客积分: 2635
  • 博客等级: 少校
  • 技术积分: 1353
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-04 15:46
文章分类
文章存档

2015年(2)

2014年(12)

2013年(10)

2012年(10)

2011年(85)

2010年(21)

分类: LINUX

2012-03-16 09:46:20

一直在找一种了解linux kernel方法,总是看书无法真正的了解某一部分;想从理论当中到代码中,感觉总是深刻;借此研究e1000网卡驱动,了解kernel内核加载 驱动功工作原理和内核网路协议栈的处理过程;e1000 是在虚拟机上加载可以使用的;
内核版本:linux-3.1
先从实质性问题出发
问题1,内核如何找到对应的驱动
问题2,网卡如何加载
问题3,网卡驱动工作原理

调研这三个问题:
在e1000目下面驱动文件:
e1000_ethtool.c  e1000.h  e1000_hw.c  e1000_hw.h  e1000_main.c  e1000_osdep.h  e1000_param.c  
kernel是如何发现设备和e1000加载的那?
抛开所有的资料,仔细读取源码
e1000_main.c驱动开始的第一个.c文件,文件中是该模块被加载的开端
 242  * e1000_init_module is the first routine called when the driver is
 243  * loaded. All it does is register with the PCI subsystem.
 264 module_init(e1000_init_module);
驱动加载时e1000_init_module程序第一个被调用的。 PCI 子系统注册好一切的准备工作;
从这句话中我们可以去了解PCI子系统如何去要加在e1000驱动而不是如何去加载其他的驱动;
PCI 是外围设备总线,有很多设备都连接到PCI总线上。PCI总线知识,我们计算机组成原理中也有到过
这个是讲述linux PCI驱动模型的文章
就是从Host/PCI桥开始进行探测和扫描,逐个“枚举”连接在第一条PCI总线上的所有设备并记录在案。如果其中的某个设备是PCI-PCI桥,则又进一步再探测和扫描连在这个桥上的次级PCI总线。就这样递归下去,直到穷尽系统中的所有PCI设备。





阅读(4213) | 评论(1) | 转发(0) |
0

上一篇:嵌入式系统调试

下一篇:堆排序算法

给主人留下些什么吧!~~

技术宅2013-05-10 21:45:37

解决办法?