·ÖÎöÄں˰汾£ºLinux 2.6.36.2¡£ ·ÖÎöÍø¿¨£ºDM9000
Ò»¡¢ÍøÂçÉ豸Çý¶¯³ÌÐò·ÖÎö¡£
1¡¢Linux ÍøÂçÉ豸Çý¶¯³ÌÐò ·Ö²ã£º
Linux ÍøÂçÉ豸Çý¶¯³ÌÐò´ÓÉϵ½Ï¿ɷÖΪ4²ã£¬ÒÀ´ÎΪ£ºÍøÂçÐÒé½Ó¿Ú²ã¡¢ÍøÂçÉ豸½Ó¿Ú²ã¡¢Ìṩʵ¼Ê¹¦ÄܵÄÉ豸 Çý¶¯¹¦Äܲ㡢ÒÔ¼° ÍøÂçÉ豸Óëý½é²ã¡£Õâ4²ã×÷ÓÃÈçÏ£º
1) ÍøÂçÐÒé½Ó¿Ú²ã£ºÍøÂçÐÒé½Ó¿Ú²ãÏëÍøÂçÐÒéÌṩͳһµÄÊý¾Ý°üÊÕ·¢½Ó¿Ú£¬²»ÂÛÊÇÉϲãARP£¬»¹ÊÇIP£¬¶¼Í¨¹ýdev_queue_xmit() º¯ÊýÊÕ·¢Êý¾Ý£¬²¢Í¨¹ýnetif_rx º¯Êý
½ÓÊÕÊý¾Ý¡£ÕâÒ»²ãµÄ´æÔÚʹµÃÉϲãÐÒé¶ÀÁ¢ÓÚ¾ßÌåµÄÉ豸¡£
2)ÍøÂçÉ豸½Ó¿Ú²ã£ºÍøÂçÉ豸½Ó¿Ú²ãÏòÐÒé²ã½Ó¿Ú²ãÌṩͳһµÄÓÃÓÚÃèÊö¾ßÌåÍøÂçÉ豸ÊôÐÔ ºÍ ²Ù×÷µÄ½á¹¹Ìå net_device£¬¸Ã½á¹¹ÌåÊÇÉ豸Çý¶¯¹¦ÄܲãÖи÷º¯ÊýµÄÈÝÆ÷£¬
ʵ¼ÊÉÏ£¬ÍøÂçÉ豸½Ó¿Ú²ã´Óºê¹ÛÉϹ滮Á˾ßÌå²Ù×÷Ó²¼þµÄÉ豸Çý¶¯¹¦ÄܲãµÄ½á¹¹¡£
3)É豸¹¦Äܲ㣺¸Ã²ãµÄ¸÷¸öº¯ÊýÊÇÍøÂçÉ豸½Ó¿Ú²ãnet_device Êý¾Ý½á¹¹¾ßÌå³ÉÔ±£¬ÊÇÇýÊ¹ÍøÂçÉ豸Ӳ¼þÍê³ÉÏàÓ¦¶¯×÷µÄ³ÌÐò£¬Ëüͨ¹ýhar_start_xmit() º¯ÊýÆô¶¯·¢ËͲÙ×÷£¬
²¢Í¨¹ýÍøÂçÉ豸ÉϵÄÖжϴ¥·¢½ÓÊÕ²Ù×÷¡£
4)ÍøÂçÉ豸 Óë ý½é²ã£º ÊÇÍê³ÉÊý¾Ý°ü·¢ËͺͽÓÊÕµÄÎïÀíʵÌ壬°üÀ¨ÍøÂçÊÊÅäÆ÷ºÍ¾ßÌåµÄ´«Êäý½é£¬ÍøÂçÊÊÅäÆ÷±»É豸Çý¶¯¹¦ÄܲãÖеĺ¯ÊýÎïÀíÉÏÇý¶¯£¬¶ÔÓÚLinux¶øÑÔ£¬
ÍøÂçÉ豸ºÍý½é¶¼ÊÇ¿ÉÒÔÐéÄâµÄ¡£
ÔÚÉè¼Æ¾ßÌåµÄÍøÂçÉ豸Çý¶¯³ÌÐòÊÇ£¬ÎÒÃÇÐèÒªÍê³ÉµÄÖ÷Òª¹¤×÷ÊDZàдÉ豸Çý¶¯¹¦ÄÜ²ã µÄ Ïà¹Øº¯ÊýÒÔÒÔÌî³änet_device Êý¾Ý½á¹¹µÄÄÚÈݲ¢½«net_device ×¢²áÈëÄںˡ£
2¡¢ÍøÂçÐÒé½Ó¿Ú²ã³ÌÐò·ÖÎö£º
1) int netif_xmit (struct sk_buff *skb)£»// ·¢ËÍÒ»¸ösk_buff Êý¾Ý°ü
int netif_rx (struct sk_buff *skb)£» // ½ÓÊÕÒ»¸öÊý¾Ý°ü
ÒÔÉϺ¯Êý¶¨ÒåÔÚ net/core/dev.c ÖÐ
sk_buff ½á¹¹Ì嶨ÒåÔÚ include/linux/skbuff.h Îļþ£¬ ËüµÄº¬ÒåΪ¡°Ì×½Ó×Ö»º³åÇø¡±£¬ÓÃÓÚÔÚLinux ÍøÂç×ÓϵͳÖиö²ãÖ®¼ä´«µÝÊý¾Ý£¬ÊÇLinux ÍøÂç×ÓϵͳÊý¾Ý´«µÝµÄ¡°ÖÐÊàÉñ¾¡±
2) Ì×½Ó×Ö»º³åÇø sk_buff ½á¹¹Ìå