在网络上搜索到一片Linux-千兆网卡驱动实现机制浅析,自己大概浏览了一下,觉得写得很好,可是自己没有看明白的时候还是白扯。想起来一句话,文档时写给已经懂了的人的。这句话在我做一个小东西的时候领悟的特别深刻。
所以还是老老实实的从代码开始吧,似乎有人说过代码面前没有秘密,可是linux开源了,未必所有搞计算机的都敢去读一读,至少我还没有。好吧,言归正传。开始e1000
同样也是2.6.28内核的e1000网卡驱动的源代码。从e1000_main.c开始,在开始之前大概浏览了一下所有的文件,四个c文件,三个h文件,数量上不多,但是我估计内容够我吃挺长时间的。
e1000_init_module中最主要的就是pci_register_driver,以及pci_register_driver的参数e1000_driver。先不去管它,继续读下去。e1000_exit_module与 e1000_init_module是对应的。功能大概就是向内核注册和删除一个模块。而这个模块实现的是注册一个驱动,即pci_register_driver和pci_unregister_driver实现的功能。希望我这些琐碎的话能为开始的人带来一点继续下去的动力。
按照顺序,e1000_request_irq从字面意义来理解,就是请求irq。我们知道网卡是离不开这个irq的,至于怎么离不开,为什么离不开,我也不是特别清楚,我只是知道连硬件都知道这个irq,足见它的重要。pci_enable_msi的功能是configure device's MSI capability structure(MSI function:Message Signaled Interrupts allow the device to write a small amoun