Sis900 驱动程序解析[5]

[入库:2005年9月19日] [更新:2007年3月25日]

本文简介:

改变目前封包过滤器的模式。当你使用


      # ifconfig eth0 promisc
      # ifconfig eth0 multicast

等命令时会被呼叫。一般而言,驱动程序的默认值是只接受目的地址和网络卡的 MAC address 相同的封包。你可以透过 ifconfig 命令控制驱动程序接受其它种类的封包。

结语
好了 ! 我己经解析完整个网络卡的驱动程序了。当你了解这个驱动程序后,再去了解其它的驱动程序变成一件很简单的事情。大部份网络驱动程序的架构其实都很类似。事实上, Linux 早期的网络卡驱动程序几乎是由同一个人完成的。而后来的驱动程序也几乎都以这些驱动程序为蓝本,所以看起来都很类似。你要不要也试着再去读另一个网络驱动程序的源代码呢 ? 也许 你会开始抱怨怎幺写驱动程序这幺神秘的东西怎幺变得如此简单了 !

多馀的一节
这一节多馀的,你不想看就算了 :-) 为了证明网络驱动程序之间有多类似我再简略的 trace Intel eepro100 的驱程程序给大家看。不罗唆,马上开始。

初始化


static struct pci_device_id eepro100_pci_tbl[] __devinitdata = {
        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82557,
                PCI_ANY_ID, PCI_ANY_ID, },
        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82559ER,
                PCI_ANY_ID, PCI_ANY_ID, },
        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ID1029,
                PCI_ANY_ID, PCI_ANY_ID, },
        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ID1030,
                PCI_ANY_ID, PCI_ANY_ID, },
        { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82820FW_4,
                PCI_ANY_ID, PCI_ANY_ID, },
        
};
MODULE_DEVICE_TABLE(pci, eepro100_pci_tbl);

tatic struct pci_driver eepro100_driver = {
        name:           "eepro100",
        id_table:       eepro100_pci_tbl,
        probe:          eepro100_init_one,
        remove:         eepro100_remove_one,
#ifdef CONFIG_EEPRO100_PM
        suspend:        eepro100_suspend,
        resume:         eepro100_resume,
#endif
};

return pci_module_init(&eepro100_driver);

嗯 ! 一切都不出意类之外,是吧 !

初始化装置


eepro100_init_one()

这个看起来比 SIS900 的复杂多了。不过几个关鉴的函数还是一样,只是它的程序码看起比较乱。 BSD 的人喜欢说 Linux 的程序码太乱 ! 嗯,好象不承认不行 :-) 不过我说它乱的很可爱,行了吧 !

传送封包


speedo_start_xmit(struct sk_buff *skb, struct net_device *dev)

这个函数相似到我不必做任何讲解,也不必有任何文件你就可以知道它在做些什幺事了 ! 程序码几乎到了一行对一行的程度 ( 夸张了一点 ! 不过很接近事实。我信相 SIS900 的 driver 是很整个程序 copy 过去再修改的 )

中断处理


void speedo_interrupt(int irq, void *dev_instance, struct pt_regs *regs);

本文关键:Sis900 驱动程序解析
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top