Embedded °æ (¾«»ªÇø)

·¢ÐÅÈË: he (hehe), ÐÅÇø: Embedded_system
±ê  Ìâ: (ldd) Ch14-ÍøÂçÇý¶¯³ÌÐò(ÉÏ)(zz)
·¢ÐÅÕ¾: ¹þ¹¤´ó×϶¡Ïã (2001Äê06ÔÂ24ÈÕ17:21:37 ÐÇÆÚÌì), Õ¾ÄÚÐżþ


µÚÊ®ËÄÕ    ÍøÂçÇý¶¯³ÌÐò



ÎÒÃÇÒѾ­ÌÖÂÛÁË×Ö·ûÉ豸ºÍ¿éÉ豸Çý¶¯³ÌÐò£¬½Ó×ÅÒªÌÖÂÛµÄÊÇÃÔÈ˵ÄÍøÂçÊÀ½ç¡£ÍøÂç½Ó
¿ÚÊÇLinuxÉ豸ÖеĵÚÈý±ê×¼À࣬ÕâÒ»Õ¾ÍÊǽ²ÊöËüÃÇÊÇÈçºÎÓëºËÐĵÄÆäÓಿ·Ö½»»¥µÄ¡£

ÍøÂç½Ó¿Ú²¢²»Ïó×Ö·ûºÍ¿éÉ豸ÄÇÑù´æÔÚÓÚÎļþϵͳ¡£Ïà·´£¬ËüÔÚºËÐIJ㴦Àí°üµÄ·¢ËͺÍ
½ÓÊÕ£¬²¢²»Óë½ø³ÌÖеÄij¸ö´ò¿ªµÄÎļþ°ó¶¨ÔÚÒ»Æð¡£

ÍøÂç½Ó¿ÚÔÚÎļþϵͳÖеĽÇÉ«¾ÍÏó±»°²×°µÄ¿éÉ豸¡£Ò»¸ö¿éÉ豸ÔÚblk_devÊý×éºÍÆäËüºË
ÐĽṹÖÐ×¢²áËüµÄÌØÕ÷£¬½Ó×Å°´ÕÕÒªÇóͨ¹ýËüµÄrequest_fnº¯Êý¡°·¢ËÍ¡±ºÍ¡°½ÓÊÕ¡±¿é
¡£ÀàËƵأ¬Ò»¸öÍøÂç½Ó¿Ú±ØÐëÔÚÌض¨µÄÊý¾Ý½á¹¹ÖÐ×¢²á×Ô¼º£¬´Ó¶øÔÚÓëÍⲿÊÀ½ç½»»»°ü
ʱ¿ÉÒÔ±»µ÷Óá£

°²×°µÄ´ÅÅÌÓë°ü·¢ËͽӿÚÓм¸¸öÖØÒªµÄ²»Í¬¡£Ê×ÏÈ£¬´ÅÅÌÒÔÒ»¸ö½áµãµÄÐÎʽ´æÔÚÓÚ/dev
Ŀ¼£¬¶øÍøÂç½Ó¿Ú²¢²»ÔÚÎļþϵͳÖгöÏÖ¡£²»¹ýÁ½ÕßÖ®¼ä×î´óµÄ²»Í¬ÔÚÓÚ£º´ÅÅÌÊDZ»Çë
ÇóÏòºËÐÄ·¢ËÍÒ»¸ö»º³åÇø£¬¶øÍøÂç½Ó¿ÚÔòÊÇÇëÇóÏòºËÐÄÍÆËͽøÀ´µÄ°ü¡£


LinuxµÄÍøÂç×Óϵͳ±»Éè¼Æ³ÉÍêȫЭÒéÎ޹صġ£Õâ¶ÔÍøÂçЭÒ飨IP vs. IPX »òÆäËüЭÒé
£©ºÍÓ²¼þЭÒ飨ÒÔÌ«Íøvs.ÁîÅÆ»·µÈ£©¶¼ÊÇÈç´Ë¡£ÍøÂçÇý¶¯³ÌÐòºÍºËÐÄÖ®¼äµÄ½»»¥Ò»´Î´¦
ÀíÒ»¸öÍøÂç°ü£»ÕâÔÊÐíЭÒé¿ÉÒԸɾ»µØ¶ÔÇý¶¯³ÌÐòÒþ`²ØÆðÀ´£¬¶øÎïÀí´«ÊäÔò¿ÉÒÔ¶ÔЭÒé
Òþ²ØÆðÀ´¡£

±¾ÕÂÃèÊöÍøÂç½Ó¿ÚÈçºÎÓëºËÐĵÄÆäËü²¿·Ö½ôÃܺÏ×÷£¬²¢¸ø³öÒ»¸ö»ùÓÚÄÚ´æµÄÄ£¿é»¯µÄÍø
Âç½Ó¿Ú£¬³Æ֮Ϊ£¨Äã¿ÉÄÜÒѾ­²Âµ½ÁË£©snull¡£Îª¼ò»¯ÌÖÂÛ£¬Õâ¸ö½Ó¿ÚʹÓÃÒÔÌ«ÍøÓ²¼þЭ
Òé²¢´«ËÍIP°ü¡£Í¨¹ýsnull»ñµÃµÄ֪ʶ¿ÉÒԺܺõØÓ¦ÓÃÓÚIPÒÔÍâµÄЭÒ飬´ÓÒÔÌ«ÍøÒƵ½Æä
ËüÓ²¼þЭÒéÖ»ÒªÇóÄã¶ÔʹÓõÄÎïÀíЭÒéÓÐËùÁ˽⡣

snullµÄÁíÒ»¸öÏÞÖÆÊÇËü²»ÄÜÔÚLinux1.2ÖбàÒë¡£ÔÙ˵һ±é£¬ÕâÑù×öÖ»ÊÇΪÁ˱£³Ö´úÂë¼ò
µ¥£¬²¢±ÜÃâÔÚsnullÖмÓÈëһЩÁíÈËÑá¾ëµÄÌõ¼þ¡£²»¹ý£¬±¾Õ½«»áÌáµ½ÓëÍøÂçÇý¶¯³ÌÐòÏà
¹ØµÄ¿ÉÒÆÖ²ÐÔÎÊÌâ¡£

±¾Õ²¢²»½éÉÜIPµÄ±àºÅÔ­Ôò£¬ÍøÂçЭÒ飬ÒÔ¼°ÆäËüÆÕͨµÄÍøÂç¸ÅÄî¡£Õâ¸öÖ÷ÌâÓëÇý¶¯³Ì
Ðò×÷ÕßÎ޹أ¬¶øÇÒÒÔ²»µ½¼¸°ÙÒ³µÄƪ·ùÏë¶ÔÍøÂç¼¼ÊõÓÐÒ»¸öÁîÈËÂúÒâµÄ¸ÅÊöÊDz»¿ÉÄܵÄ
¡£¸ÐÐËȤµÄ¶ÁÕß¿ÉÒԲο¼Ò»Ð©½²ÊöÍøÂçÎÊÌâµÄÊé¡£

ÔÚÌÖÂÛÍøÂçÉ豸֮ǰ£¬ÎÒÏëÌáÐÑÄãÍøÂçÊÂÎñÖеÄÔ­×ÓÊý¾ÝÏî±»³Æ×öÒ»¸ö°ËÔª×飨octet£©
£¬Óɰ˸öÊý¾Ýλ×é³É¡£ÔÚ±¾ÕÂÖÐÎÒ¶¼ÕâÑùʹÓá£ÍøÂçÎĵµ´Ó²»Ê¹ÓÃÊõÓï¡°×Ö½Ú¡±¡£




SnullÈçºÎÉè¼Æ



±¾½ÚÌÖÂÛÓësnullÍøÂç½Ó¿ÚÓйصÄһЩÉè¼Æ¸ÅÄî¡£¾¡¹ÜÕâЩÐÅÏ¢¿ÉÄÜÏÔµÃÓô¦²¢²»´ó£¬µ«
Èç¹û²»Àí½âËüÔò¿ÉÄÜÔÚÑо¿Ê¾Àý´úÂëʱÓöµ½Ò»Ð©À§ÄÑ¡£

µÚһλµÄÉè¼Æ¾ö¶¨£¨Ò²ÊÇ×îÖØÒªµÄ£©ÊÇʾÀý½Ó¿Ú²»Ó¦°ó¶¨ÓÚÈκÎʵ¼ÊÓ²¼þ¡£Êµ¼Ê½Ó¿Ú²»
ÒÀÀµÓÚËù´«Ë͵ÄЭÒ飬snullµÄÕâ¸öÏÞÖƲ¢²»Ó°Ïì±¾Õ¸ø³öµÄʾÀý´úÂ룬ÒòΪËüÊÇЭÒéÎÞ
¹ØµÄ¡£IPÏÞÖƵÄΨһӰÏìÊǵØÖ··ÖÅä----ÎÒÃǽ«Î»Ê¾Àý½Ó¿Ú·ÖÅäIPµØÖ·¡£

·ÖÅäIPºÅÂë

snullÄ£¿éÉú³ÉÁ½¸ö½Ó¿Ú¡£ÕâÑùµÄ½Ó¿ÚÓë¼òµ¥µÄ»·»Ø£¨loopback£©²¢²»Ò»Ñù£¬ÕâÀïÄã´ÓÒ»
¸ö½Ó¿Ú´«Ë͵İü×ÜÊÇ»·»Øµ½ÁíÒ»¸ö½Ó¿Ú£¬¶ø²»ÊÇËü×Ô¼º¡£Ëü¿´ÆðÀ´ºÃÏóÊÇÄãÓÐÁ½¸öÍⲿ
Á´½Ó£¬µ«Êµ¼ÊÉÏÄãµÄ¼ÆËã»úÖ»ÊÇÓ¦´ð×Ô¼º¡£

²»ÐÒµÄÊÇ£¬Õâ¸öЧ¹û²¢²»Äܽö½öͨ¹ýIPºÅÂë·ÖÅäÀ´´ïµ½£¬ÒòΪºËÐIJ»»á´Ó½Ó¿ÚA·¢ËÍÒ»¸ö
Ö¸ÏòËü×Ô¼º½Ó¿ÚBµÄ°ü¡£Ïà·´£¬ÕâʱËü»áʹÓû·»ØͨµÀ£¬´Ó¶ø¸ù±¾²»Í¨¹ýsnull¡£ÎªÁËÄÜ
½¨Á¢Ò»¸öͨ¹ýsnull½Ó¿ÚµÄͨÐÅ£¬Ô´ºÍÄ¿µÄµØÖ·±ØÐëÔÚÊý¾Ý´«Ë͵ÄʱºòÐÞ¸Äһϡ£»»¾ä»°
˵£¬´ÓÒ»¸ö½Ó¿Ú·¢³öµÄ°üÓ¦Äܱ»ÁíÒ»¸ö½Ó¿Ú½ÓÊÕ£¬µ«Íâ³ö°üµÄ½ÓÊÕÕß²»Äܱ»ÈÏΪÊDZ¾»ú
¡£ÕâÒ²ÊÊÓÃÓÚÊÕµ½°üµÄÔ´µØÖ·¡£

ΪÁËÊÕµ½ÕâÖÖ¡°Òþ²Ø»·»Ø¡±µÄЧ¹û£¬snull½Ó¿Ú·´×ªÒ»ÏÂÔ´ºÍÄ¿µÄµØÖ·µÄµÚÈý¸ö°ËÔª×éµÄ
×îµÍλ¡£ÆäЧ¹û¾ÍÊÇ·¢ÏòÍøÂçA£¨Á¬ÔÚ½Ó¿Úsn0ÉÏ£©µÄ°üÔÚsn1½Ó¿ÚÉϺÃÏóÊÇÊôÓÚÍøÂçB¡£

ΪÁ˱ÜÃâºÍÌ«¶àµÄºÅÂë´ò½»µÀ£¬ÎÒÃǸøÓõ½µÄIPºÅÂë·ÖÅäһЩ·ûºÅÃû£º

l         snullnet0ÊÇÒ»¸öÁ¬½ÓÔÚsn0½Ó¿ÚÉϵÄÒ»¸öCÀàÍøÂç¡£ÀàËƵأ¬snullnet1ÊÇÁ¬
ÔÚsn1ÉϵÄÍøÂç¡£ÕâÁ½¸öÍøÂçµÄµØÖ·½öÔÚµÚÈý¸ö°ËÔª×éµÄ×îµÍλ²»Í¬¡£

l         local0ÊÇ·ÖÅä¸ø½Ó¿Úsn0µÄIPµØÖ·£»ËüÊôÓÚsnullnet0¡£Óësn1Ïà¹ØÁªµÄµØÖ·ÊÇ
local1¡£local0ºÍlocal1µÄµÚÈýºÍµÚËĸö°ËÔª×é±ØÐ붼²»Ïàͬ¡£

l         remote0ÊÇsnullnet0ÖеÄÒ»¸öÖ÷»ú£¬ËüµÄµÚËĸö°ËÔª×éÓëlocal1Ïàͬ¡£ËùÓÐ
·¢Ïòremote0µÄ°üÔÚÆäCÀàµØÖ·±»½Ó¿Ú´úÂëÐ޸ĺ󽫵½´ïlocal1¡£Ö÷»úremote1ÊôÓÚsnulln
et1£¬²¢ÇÒËüµÄµÚËĸö°ËÔª×éÓëlocal0Ïàͬ¡£

snull½Ó¿ÚµÄ²Ù×÷¼ûͼ14-1£¬Í¼ÖÐÓë½Ó¿ÚÏà¹ØÁªµÄÖ÷»úÃûÓ¡ÔÚ½Ó¿ÚÃûÅԱߡ£

ÏÂÃæÊǼ¸¸ö¿ÉÄܵÄÍøÂçºÅÂë¡£Ò»µ©Äã°ÑÕ⼸ÐÐдµ½/etc/networks£¬Äã¾Í¿ÉÒÔÓÃÃû×ÖÀ´³Æ
ºôÕâЩÍøÂç¡£ÕâЩֵÊÇ´Ó±£Áô˽ÓõĺÅÂ뷶ΧÖÐÑ¡È¡µÄ¡£


                      snullnet0      192.168.0.0

                      snullnet1      192.168.1.0

ÏÂÃæÊÇдÈë/etc/hostsµÄ¿ÉÄܵÄÖ÷»úºÅÂ룺

192.168.0.88    local0

192.168.0.99            remote0

192.168.1.99            local1

192.168.1.88    remote1



(ͼ14-1 Page304)

²»¹ýÈç¹ûÄãµÄ¼ÆËã»úÒѾ­Á¬µ½ÁËÒ»¸öÍøÂçÉÏ£¬ÄÇôһ¶¨Òª×¢Òâ¡£ÄãÑ¡ÔñµÄºÅÂëÓпÉÄÜÊÇ
ʵ¼ÊµÄInternet»òintranetµÄºÅÂ룬°ÑËüÃÇ·ÖÅä¸øÄãµÄ½Ó¿Ú¿ÉÄÜ»á·Á°­ÓëÕæÕýÖ÷»úµÄͨ
ÐÅ¡£¶øÇÒ£¬¾¡¹ÜÎÒ¸ø³öµÄÕâЩºÅÂë²»ÊÇʵ¼ÊµÄInternetºÅ£¬µ«Ò²ÓпÉÄܱ»ÄãµÄ˽ÓÃÍøËù
ÊÊÓã¬Èç¹ûËü´¦ÓÚ·À»ðǽ֮ºóµÄ»°¡£

²»ÂÛÄãÑ¡ÔñʲôºÅÂ룬Äã¿ÉÒÔͨ¹ý·¢³öÏÂÃæµÄÃüÁîÀ´ÕýÈ·µØÉèÖýӿڣº

£¨´úÂë304 #1£©

µ½´ËΪֹ£¬½Ó¿ÚµÄ¡°Ô¶¡±¶ËÒѾ­¿ÉÒÔµ½´ïÁË¡£ÏÂÃæµÄÆÁÄ»¿ìÕÕÏÔʾÁËÎÒµÄÖ÷»úÊÇÈçºÎͨ
¹ýsnullµ½´ïremote0ºÍremote1µÄ¡£

£¨´úÂë304 #2£©

×¢ÒâÄã²»¿ÉÄÜ´ïµ½ÊôÓÚÕâÁ½¸öÍøÂçµÄÆäËüÖ÷»ú£¬ÒòΪÔÚ°üµÄµØÖ·±»¸Ä±ä²¢±»½ÓÊÕµ½ºó£¬
ÄãµÄ¼ÆËã»ú»á°ÑËü¶ªÆú¡£

°üµÄÎïÀí´«ËÍ

ÖÁÓÚÊý¾Ý´«ËÍ£¬snullÊôÓÚÒÔÌ«ÍøÒ»ÀࡣʾÀý´úÂëʹÓÃÁ˺ËÐĵÄÒÔÌ«ÍøÖ§³Ö¡£ÕâʹÎÒÃDz»
±ØȥʵÏÖÍøÂçÉ豸һЩÁîÈËÑá¾ëµÄϸ½Ú¡£

ÎÒÑ¡ÔñÒÔÌ«ÍøÊÇÒòΪÏÖ´æÍøÂçµÄÖ÷Ìå----ÖÁÉÙÓ빤×÷Õ¾ÏàÁ¬µÄÕâÒ»²¿·Ö-----¶¼ÊÇ»ùÓÚÒÔ
Ì«Íø¼¼Êõ£¬²»ÂÛÊÇ10base2£¬10baseT£¬»¹ÊÇ100baseT¡£ÁíÍ⣬ºËÐÄ»¹ÌṩÁ˶ÔÒÔÌ«ÍøÉè
±¸µÄÒ»°ã»¯µÄÖ§³Ö£¬Òò´ËûÓÐÀíÓɾܾøʹÓá£ÒÔÌ«ÍøÉ豸µÄÓÅÊÆÈç´ËÃ÷ÏÔ£¬Á¬plip½Ó¿Ú
£¨Ò»ÀàʹÓôòÓ¡»ú¶Ë¿ÚµÄ½Ó¿Ú£©¶¼×Ô³ÆÊÇÒÔÌ«ÍøÉ豸¡£
£¨Ò»ÀàʹÓôòÓ¡»ú¶Ë¿ÚµÄ½Ó¿Ú£©¶¼×Ô³ÆÊÇÒÔÌ«ÍøÉ豸¡£

ÔÚsnullÖÐʹÓÃÒÔÌ«ÍøÉèÖõÄ×îºóÒ»¸öÓÅÊÆÊÇÄã¿ÉÒÔÔÚ½Ó¿ÚÉÏÔËÐÐtcpdump¡£²»¹ý£¬Èç¹û
ÄãÏëÕâÑù×ö£¬ÄãÐèÒª°Ñ½Ó¿Ú³Æ×öethx£¬¶ø²»ÊÇsnx¡£snullÄ£¿éÒѾ­×¼±¸ºÃ½«×Ô¼ºÉùÃ÷Ϊe
thx¡£Èç¹ûÔÚinsmodeÃüÁîÐÐÖÐÖ¸¶¨eth=1£¬Äã¾ÍÑ¡ÔñÁËÕâÖÖÐÐΪ¡£Èç¹ûÄãÍüÁËΪsnullÇë
ÇóethÃüÃû£¬tcpdump»á¾Ü¾øÇãµ¹Õâ¸ö½Ó¿Ú£¬¶øÊÇ·µ»ØÒ»¸ö¡°Î´ÖªµÄÎïÀí²ãÀàÐÍ¡±´í¡£

snull½Ó¿ÚµÄÁíÒ»¸öÉè¼Æ¾ö¶¨ÊÇÖ»´¦ÀíIPЭÒ飬±¾ÕµÄÌÖÂÛÒ²½öÏÞÓÚIP¡£²»¹ýҪעÒ⣬½Ó
¿ÚÇý¶¯³ÌÐò±¾Éí²¢²»ÒÀÀµÓÚËüËù´¦ÀíµÄµ×²ãЭÒ飻ÍøÂçÇý¶¯³ÌÐò¸ù±¾²»²é¿´ËüËù´«Ë͵Ä
°ü¡£¹ØÓÚ¶àЭÒé´«Ëͽ«ÔÚºóÃæµÄ¡°·ÇÒÔÌ«Íø°üÍ·¡±ÖÐÏêϸ½éÉÜ¡£

²»¹ý˵ʵ»°£¬snull»¹ÊDz鿴°üÄÚÈݵģ¬ÉõÖÁ»¹ÒªÐÞ¸ÄËüÃÇ£¬ÒòΪÕâÊÇΪ±£Ö¤´úÂ빤×÷Òª
ÇóµÄ¡£´úÂëÐÞ¸Äÿ¸öIP°üÍ·µÄÔ´£¬Ä¿µÄ£¬ÒÔ¼°Ð£ÑéºÍ£¬µ«²»¼ì²éËüÊÇ·ñÕæµØЯ´øÁËIPÐÅ
Ï¢¡£ÕâÖÖ¿ì¶øÔàµÄÊý¾ÝÐ޸ĻáÆÆ»µ·ÇIP°ü¡£Èç¹ûÄãÏëÈÃsnull´¦ÀíÆäËüЭÒ飬Äã±ØÐëÐÞ¸Ä
Õâ¸öÄ£¿éµÄÔ´Âë¡£²»¹ý£¬ÕâÖÖÐèÇó²»Ì«¿ÉÄÜÔö³¤£¬ÒòΪÿ¸öÓµÓÐLinuxºÐµÄÈ˶¼ÔËÐÐIP£¬
¶øÆäËüЭÒéÔòÊÇ¿ÉÑ¡µÄ¡£



ÓëºËÐÄÏàÁ¬

ÎÒÃǽ«Í¨¹ý²ð½âsnullÔ´ÂëÀ´¿´¿´ÍøÂçÇý¶¯³ÌÐòµÄ½á¹¹¡£±£Ö¤Óм¸¸öÇý¶¯³ÌÐòµÄÔ´ÂëÔÚÊÖ
±ß»áºÜÓÐÖúÓÚÄãÀí½âÎÒÃǵÄÌÖÂÛ¡£ÎÒ¸öÈËÍƼöloopback.c£¬plip.c£¬ÒÔ¼°3c509.c£¬ÒÔÖð
½¥Ôö¼ÓµÄ¸´ÔÓÐÔÅÅÐò¡£ÓÐskeleton.cÔÚÊÖ±ßÒ²ºÜÓаïÖú£¬¾¡¹ÜÕâ¸öʾÀýÇý¶¯³ÌÐò²¢²»ÄÜ
ÕæÕýÔËÐС£ËùÓÐÕâЩÎļþ¶¼¾ÓÓÚºËÐÄÔ´ÂëÊ÷µÄdrivers/netÏ¡£

Ä£¿é¼ÓÔØ

µ±Ò»¸öÄ£¿é±»¼ÓÔص½ÔËÐеĺËÐÄʱ£¬ËüÒªÇëÇóһЩ×ÊÔ´£¬²¢ÌṩһЩ·½±ãµÄ¹¦ÄÜ£»ÕâÒÑ
²»ÔÙÐÂÏÊ¡£ÁíÍâÇëÇó×ÊÔ´µÄ·½Ê½Ò²²»ÐÂÏÊ¡£Çý¶¯³ÌÐòҪ̽²âËüµÄÉ豸¼°Ó²¼þλÖã¨I/O¶Ë
¿ÚºÍIRQÏߣ©----µ«²¢²»×¢²áËüÃÇ----¾ÍÏóÔÚµÚ¾ÅÕÂÖжϴ¦ÀíÖС°°²×°Ò»¸öÖжϴ¦Àí³ÌÐò
¡±Ò»½ÚÖнéÉܵÄÒ»Ñù¡£ÍøÂçÇý¶¯³ÌÐòͨ¹ýËüµÄº¯Êýinit_module½øÐÐ×¢²áµÄ·½·¨Óë×Ö·û»ò
¿éÉ豸Çý¶¯³ÌÐò²»Ò»Ñù¡£ÓëÇëÇóÒ»¸öÖ÷É豸ºÅ²»Í¬£¬Çý¶¯³ÌÐòΪÿ¸öмì²âµ½µÄ½Ó¿ÚÔÚ
Ò»¸öÍøÂçÉ豸µÄÈ«¾ÖÁбíÖвåÈëÒ»¸öÊý¾Ý½á¹¹¡£

ÿ¸ö½Ó¿ÚÓÃÒ»¸ödevice½á¹¹ÃèÊö¡£sn0ºÍsn1ÕâÁ½¸ösnull½Ó¿ÚµÄ½á¹¹ÈçÏÂËùʾ£º

£¨´úÂë 306£©

×¢ÒâµÚÒ»¸öÓò£¬¼ÈÃû×ÖÓòÖ¸ÏòÒ»¸ö¾²Ì¬»º³åÇø£¬ËüÔÚ¼ÓÔØʱ½«±»Ìî³ä¡£Í¨¹ýÕâ¸ö·½·¨£¬
¿ÉÒÔÍíµã¶ùÑ¡Ôñ½Ó¿ÚÃû£¬ÏÂÃæ»á¸ø³ö½âÊÍ¡£Èç¹ûÄãÏëÔÚÕâ¸ö½á¹¹ÖÐʹÓÃÒ»¸öÏÔʽ»º³åÇø
£¬Èç¡°01234567¡±£¬ÎÒÒª¾¯¸æÄãÄÇÑù¿ÉÄܵ¼Ö´úÂë²»ÄÜ¿É¿¿µØ¹¤×÷¡£ÕâÊÇÒòΪ±àÒëÆ÷»á
½«Á½¸öÖظ´µÄ´®ÕÛµþ£»Òò´ËÄãµÃµ½µÄ»áÊÇÒ»¸ö»º³åÇøºÍÁ½¸öÖ¸ÏòËüµÄ»º³åÇø¡£¶øÇÒ£¬±à
ÒëÆ÷ÓпÉÄܽ«³£Á¿´®´æÔÚÖ»¶ÁÄÚ´æÖУ¬ÕâÏÔÈ»²»ÊÇÄãÏëÒªµÄ¡£


ÔÚϽÚ֮ǰÎÒ²»ÏëÍêÕûÃèÊö½á¹¹device£¬ÒòΪËüÊÇÒ»¸öÅÓ´óµÄ½á¹¹£¬Ì«ÔçµØÖ«½âËüûÓÐ
ʲôºÃ´¦¡£ÎÒÏëÔÚÇý¶¯³ÌÐòÖÐʹÓÃÕâ¸ö½á¹¹£¬²¢ÔÚÿ¸öÓò±»Ê¹ÓÃʱÔÙ½âÊÍËü¡£

Ç°ÃæµÄ´úÂëÏÔʽµØʹÓÃÁËdevice½á¹¹ÖеÄnameºÍinitÓò¡£nameÊǵÚÒ»¸öÓò£¬º¬ÓнӿÚÃû
£¨Ê¶±ð½Ó¿ÚµÄ×Ö·û´®£©¡£Çý¶¯³ÌÐò¿ÉÒÔ½«½Ó¿ÚÃûӲдÔÚ³ÌÐòÖУ¬Ò²ÔÊÐí¶¯Ì¬¸³Öµ£¬Æ乤
×÷·½Ê½ÈçÏ£ºÈç¹ûÃû×ֵĵÚÒ»¸ö×Ö·ûÊǸö¿Õ»òÕß¿Õ¸ñ£¬ÄÇôÉ豸ע²áÏî¾ÍʹÓõÚÒ»¸ö¿É
ÓõÄethnÃû¡£ÕâÑùµÚÒ»¸öÒÔÌ«Íø½Ó¿Ú¾Í±»³Æ×öeth0£¬ÆäËüµÄ°´ÐòºÅÀàÍÆ¡£snull½Ó¿ÚÔò±»
ȱʡµØ³ÆΪsn0ºÍsn1¡£²»¹ý£¬Èç¹ûÔÚ¼ÓÔØʱָ¶¨eth=1£¬ÄÇôinit_module½«Ê¹Óö¯Ì¬¸³
Öµ¡£È±Ê¡ÃûÓÉinit_module¸ø³ö£º

£¨´úÂë307 #1£©

initÓòÊǸöº¯ÊýÖ¸Õë¡£ÈκÎʱºòµ±Äã×¢²áÒ»¸öÉ豸ʱ£¬ºËÐÄÒªÇóÇý¶¯³ÌÐò³õʼ»¯×Ô¼º¡£
³õʼ»¯¾ÍÊÇָ̽²âÎïÀí½Ó¿Ú£¬ÓÃÕýÈ·µÄÊýÖµÌî³ädevice½á¹¹£¬ÏÂÒ»½Ú½«¸øÓèÃèÊö¡£Èç¹û
³õʼ»¯Ê§°Ü£¬Õâ¸ö½á¹¹¾Í²»Äܱ»Á´ÈëÍøÂçÉ豸µÄÈ«¾ÖÁÐ±í¡£ÕâÖÖÌرðµÄÉèÖõķ½·¨ÔÚϵ
ͳÒýµ¼Ê±ÌرðÓÐЧ£»Ã¿¸öÇý¶¯³ÌÐò¶¼ÊÔͼע²áËü×Ô¼ºµÄÉ豸£¬µ«Ö»ÓÐȷʵ´æÔÚµÄÉ豸²Å
±»Á´ÈëÁÐ±í¡£ÕâÓë×Ö·ûºÍ¿éÉ豸Çý¶¯³ÌÐò²»Í¬£¬ËüÃDZ»×éÖ¯³ÉÒ»¸öÁ½¼¶Ê÷£¬ÓÉÖ÷É豸ºÅ
ºÍ´ÎÉ豸ºÅË÷Òý¡£

ÓÉÓÚÕæÕýµÄ³õʼ»¯ÔÚ±ðµÄµØ·½Íê³É£¬init_moduleÒª×öµÄ¹¤×÷·Ç³£ÉÙ£¬Ö»ÐèÒ»¾äÈçÏ£º

£¨´úÂë307 #2£©
£¨´úÂë307 #2£©

³õʼ»¯Ã¿¸öÉ豸

É豸µÄ̽²âÔÚ½Ó¿ÚµÄinitº¯ÊýÀïÍê³É£¬Ëüͨ³£±»³Æ×ö¡°Ì½²â¡±º¯Êý¡£initÊÕµ½µÄΨһµÄ
²ÎÊýÊÇÒ»¸öÖ¸ÏòÕý±»³õʼ»¯µÄÉ豸µÄÖ¸Õ룬Æä·µ»ØÖµÊÇ0»òÕßÒ»¸ö¸ºµÄ´íÎó´úÂë----ͨ³£
ÊÇ-ENODEV¡£

¶Ôsnull½Ó¿Ú²¢Ã»ÓнøÐÐʵ¼ÊµÄ̽²â£¬ÒòΪËüδ°ó¶¨µ½ÈκÎÓ²¼þÉÏ¡£µ±ÄãΪһ¸öʵ¼ÊµÄ½Ó
¿Úдʵ¼ÊµÄÇý¶¯³ÌÐòʱ£¬Ì½²â×Ö·ûÉ豸µÄÔ­ÔòÈÔÈ»ÊÊÓãºÔÚʹÓÃI/O¶Ë¿Ú֮ǰÏȼì²âËüÃÇ
£¬ÔÚ¼ì²âÆڼ䲻ҪÏòËüд¡£ÁíÍ⣬Ä㻹Ҫ±ÜÃâÔÚ´Ëʱע²áI/O¶Ë¿ÚºÍÖжÏÏß¡£ÕæÕýµÄ×¢²á
Ó¦¸ÃÍƳٵ½É豸´ò¿ªÊ±£»Õâ¸ö·Ç³£ÖØÒª£¬ÌرðÊǵ±ÖжÏÏß±»ÆäËüÉ豸¹²Ïíʱ¡£Ã¿´Îµ±±ð
µÄÉ豸´¥·¢ÖжÏÏßʱ£¬ÄãµÄ½Ó¿Úµ±È»²»Ï£Íû±»µ÷Ó㬶øÓ¦¼òµ¥µØ»Ø´ð£º²»£¬Ëü²»ÊÇÎÒµÄ
¡£

ʵ¼ÊÉÏ£¬ÔÚ¼ÓÔØʱ½øÐÐÉ豸̽²â¶ÔISAÉ豸²¢²»¹ÄÀø£¬ÒòΪÕâÓпÉÄܺÜΣÏÕ----ISAÌåϵ
½á¹¹ÔÚÈÝ´í·½ÃæÃûÉù²»¼Ñ¡£ÓÉÓÚÕâ¸öÔ­Òò£¬´ó¶àÊýÍøÂçÇý¶¯³ÌÐòÔÚÒÔÄ£¿éµÄ·½Ê½¼ÓÔØʱ
¾Ü¾øΪÆäÓ²¼þ̽²â£¬ºËÐÄҲֻ̽²âµÚÒ»¸öÍøÂç½Ó¿Ú£¬ÔÚÒ»¸öÍøÂçÉ豸¼ì²â³öÀ´ºó²»ÔÙ½ø
ÐÐÈκÎÓ²¼þ²âÊÔ¡£Í¨³£dev->base_addr----µ±Ç°É豸µÄI/O»ùµØÖ·----¾ö¶¨ÁËÒª×öʲô£º

l         Èç¹ûdev->base_addrÊÇÒ»¸öÓÐЧµÄÉ豸I/OµØÖ·£¬½«²»ÔÙ̽²âÆäËüI/OλÖã¬
¶øÊÇʹÓÃÕâ¸öÖµ¡£Èç¹ûÕâ¸öÖµÔÚ¼ÓÔØʱ±»¸³Öµ£¬ÕâÖÖÇé¿ö¾Í»á·¢Éú¡£


l         Èç¹ûdev->base_addrÊÇ0£¬ÄÇô̽²âÉ豸ÊÇ¿ÉÒÔ½ÓÊܵġ£Óµ»¤¿ÉÒÔͨ¹ýÔÚ¼ÓÔØ
ʱÖÃÕâ¸öI/OµØַΪ0À´ÇëÇó̽²â¡£

l         ÆäËüÇé¿öÏ£¬²»½øÐÐ̽²â¡£ºËÐÄʹÓÃ0xffe0À´×èֹ̽²â£¬µ«ÆäʵÈκÎÎÞЧֵ
¶¼ÐС£ÕâÐèÒªÒÀÀµÓÚÇý¶¯³ÌÐòÀ´ÎÞÉùµØ¾Ü¾øbase_addrÖеÄÒ»¸öÎÞЧµØÖ·¡£Ò»¸öÄ£¿éÓ¦¸Ã
ȱʡµØÖÃÕâ¸öµØַΪÎÞЧֵÀ´·ÀÖ¹²»ÆÚÍûµÄ̽²â¡£×¢Òâ²é¿´PCIÉ豸×ÜÊÇ°²È«µÄ£¬ÒòΪËü
²¢²»Ç£³¶ÈκÎ̽²â£¨¼ûµÚ15Õ£¬ÍâΧ×ÜÏ߸ÅÊö£©

ÕýÈçÄã¿ÉÄÜÒѾ­×¢Òâµ½µÄ£¬ÓÃÒ»¸ö¼ÓÔØʱµÄÉèÖÃÀ´¿ØÖÆ̽²âÓëÎÒÃÇÔÚskullÖÐʹÓõļ¼Êõ
ÊÇÒ»ÑùµÄ¡£

µ±´Ódev->initÖÐÍ˳öʱ£¬dev½á¹¹Ó¦¸ÃÓÃÕýÈ·µÄÖµÌî³ä¡£³õʼ»¯Àý³ÌµÄÖ÷Òª¹¤×÷¾ÍÊÇÌî
³äÕâ¸ö½á¹¹¡£ÐÒÔ˵ÄÊÇ£¬ºËÐÄͨ¹ýº¯Êýether_setupÌî³ä½á¹¹device¸ºÔðÁËһЩÒÔÌ«ÍøµÄ
ȱʡÉèÖá£

snull_initµÄºËÐÄÊÇ£º

£¨´úÂë308£©

                        /* keep the default flags, just add NOARP */

                       dev->flags                      |=IFF_NOARP;

Õâ¶Î´úÂëΨһ²»Ñ°³£µÄÌØÕ÷ÊÇÔÚ±êÖ¾ÖÐÉèÖÃIFF_NOARP¡£ÕâÖ¸Ã÷½Ó¿Ú²»ÄÜʹÓÃARP£¬¼´¡°
µØÖ·½âÎöЭÒ顱¡£ARPÊÇÒ»¸öµÍ¼¶µÄÒÔÌ«ÍøЭÒ飻ÿ¸öÕæʵµÄÒÔÌ«Íø½Ó¿Ú¶¼¶®µÃARP£¬Òò
´Ë²»ÐèÒªÉèÖÃÕâ¸ö±êÖ¾¡£ÓÐȤµÄÊÇ×¢Òâµ½Ò»¸ö½Ó¿ÚÔÚûÓÐARPʱÈÔÄܹ¤×÷¡£ÀýÈ磬plip½Ó
¿Ú¾ÍÊÇûÓÐARPÖ§³ÖµÄÒÔÌ«ÍøÀà½Ó¿Ú£¬ÓësnullÏàËÆ¡£Õâ¸öÖ÷Ì⽫ÔÚºóÃæµÄ¡°µØÖ·½âÎö¡±
ÖÐÏêϸÌÖÂÛ£¬device½á¹¹½«ÔÚÏÂÒ»½ÚÖ«½â¡£

ÏÖÔÚÎÒÏë½éÉܽṹdeviceµÄÁíÒ»¸öÓòpriv¡£ËüµÄ×÷ÓÃÀàËÆÓëÎÒÃÇÔÚ×Ö·ûÉ豸Çý¶¯³ÌÐòÖÐ
ÓùýµÄprivate_dataÖ¸Õë¡£Óëfops->private_data²»Í¬µÄÊÇ£¬privÖ¸ÕëÊÇÔÚ³õʼ»¯Ê±·Ö
Å䣬¶ø²»ÊÇÔÚ´ò¿ªÊ±£¬ÒòΪprivËùÖ¸ÏòµÄÊý¾ÝÏî°üº¬ÓнӿڵÄͳ¼ÆÐÅÏ¢¡£ÓÐÒ»µãºÜÖØÒª
£¬¾ÍÊÇͳ¼ÆÐÅÏ¢Òª±£Ö¤×ÜÊÇ¿ÉÓõģ¬¼´Ê¹ÔÚ½Ó¿Úå´µôʱ£¬ÒòΪÓû§¿ÉÄÜÔÚÈκÎʱºòͨ¹ý
µ÷ÓÃifconfigÀ´ÏÔʽͳ¼ÆÐÅÏ¢¡£ÔÚ³õʼ»¯Ê±¶ø²»ÊÇ´ò¿ªÊ±·ÖÅäprivÀ˷ѵÄÄÚ´æÊÇÎ޹ؽô
ÒªµÄ£¬ÒòΪ¶àÊý±»Ì½²âµ½µÄ½Ó¿Ú±£³ÖÒ»Ö±ÔÚϵͳÖÐÔËÐС£snullÄ£¿éΪprivÉùÃ÷ÁËÒ»¸öÊý
¾Ý½á¹¹snull_priv¡£Õâ¸ö½á¹¹°üº¬Á˽ṹenet_statistics£¬ËüÊÇ´æ·Å½Ó¿ÚÐÅÏ¢µÄ±ê×¼µØ
·½¡£

ÏÂÃæÕ⼸Ìõsnull_initÖеÄÓï¾ä·ÖÅädev->priv£º

£¨´úÂë309 #1£©

Ä£¿éжÔØ


µ±Ä£¿é±»Ð¶ÔØʱûÓÐʲôÌØÊâµÄÊÂÇé·¢Éú¡£º¯Êýcleanup_moduleÔÚÊÍ·ÅÁËÓë˽ÓнṹÏà
¹ØµÄÄÚ´æºó£¬Ö»Ð轫½Ó¿Ú´ÓÁбíÖÐÈ¡Ïû¼´¿É¡£

£¨´úÂë309 #2£©

Ä£¿é»¯µÄºÍ·ÇÄ£¿é»¯µÄÇý¶¯³ÌÐò

¾¡¹ÜÔÚ¶Ô×Ö·ûÉ豸ºÍ¿éÉ豸À´Ëµ£¬Ä£¿é»¯ºÍ·ÇÄ£¿é»¯µÄÇý¶¯³ÌÐò²¢Ã»ÓÐʲôÒýÈË×¢ÒâµÄ
Çø±ð£¬µ«¶ÔÍøÂçÇý¶¯³ÌÐòÀ´Ëµ£¬Çé¿ö²¢·ÇÈç´Ë¡£

Èç¹ûÒ»¸öÇý¶¯³ÌÐò×öΪÖ÷Á÷LinuxºËÐĵÄÒ»²¿·Ö·¢ÐеĻ°£¬Ëü²¢²»ÉùÃ÷×Ô¼ºµÄdevice½á¹¹
£¬¶øÊÇʹÓÃÔÚdrivers/net/Space.cÖÐÉùÃ÷µÄ½á¹¹¡£Space.cÉùÃ÷ÁËËùÓÐÍøÂçÉ豸µÄÁ´±í
£¬¼´°üÀ¨plip1Ò»ÀàÇý¶¯³ÌÐòÌض¨µÄ½á¹¹£¬Ò²°üÀ¨Í¨ÓÃÄ¿µÄµÄethÉ豸¡£ÒÔÌ«Íø¸ù±¾²»¹Ø
ÐÄËüÃǵÄdevice½á¹¹£¬ÒòΪËüÃÇʹÓÃͨÓÃÄ¿µÄµÄ½á¹¹¡£ÕâÖÖͨÓõÄethÉ豸½á¹¹ÉùÃ÷ethi
f_probeΪËüÃǵÄinitº¯Êý¡£³ÌÐòÔ±ÒªÏëÔÚÖ÷Á÷ºËÐÄÖвåÈëÒ»¸öеÄÒÔÌ«Íø½Ó¿ÚÖ»ÐèÒªÔÚ
ethif_probeÖмÓÈëÒ»¸ö¶ÔÇý¶¯³ÌÐò³õʼ»¯º¯ÊýµÄµ÷Óá£ÁíÒ»·½Ã棬·ÇethÇý¶¯³ÌÐòµÄ×÷
ÕßÐèÒªÔÚSpace.cÖвåÈëËüÃǵÄdevice½á¹¹¡£ÔÚÁ½ÖÖÇé¿öÏ£¬Èç¹ûÇý¶¯³ÌÐò±ØÐë±»Á´µ½ºË
ÐÄ£¬Ö»ÐèÒªÐÞ¸ÄÔ´ÎļþSpace.c¡£

ÔÚϵͳÒýµ¼Ê±£¬ÍøÂç³õʼ»¯´úÂëÑ­»·±éÀúËùÓеÄdevice½á¹¹£¬µ÷ÓÃËüÃǵÄ̽²âº¯Êý£¨dev
->init£©£¬ÏòËüÃÇ´«µÝÒ»¸öÖ¸ÏòÉ豸±¾ÉíµÄÖ¸Õë¡£Èç¹û̽²âº¯Êý³É¹¦ÁË£¬Space.c³õʼ»¯
device½á¹¹¡£ÕâÖÖÉèÖÃÇý¶¯³ÌÐòµÄ·½Ê½ÔÊÐí½¥ÔöµØ½«É豸¸³ÓèÃû×Öeth0£¬eth1£¬ÒÀ´ÎÀà
ÍÆ£¬¶ø²»ÐèÒª¸Ä±äÿ¸öÉ豸µÄnameÓò¡£

ÁíÒ»·½Ã棬µ±¼ÓÔØÒ»¸öÄ£¿é»¯µÄÇý¶¯³ÌÐòʱ£¬ËüÉùÃ÷Ëü×Ô¼ºµÄdevice½á¹¹£¨ÈëÎÒÃÇÔÚ±¾
ÕÂÖÐÒѾ­¿´µ½µÄÄÇÑù£©£¬¼´Ê¹Ëü¿ØÖƵĽӿÚÊÇÒÔÌ«Íø½Ó¿Ú¡£

ºÃÆæµÄ¶ÁÕß¿ÉÒԲ鿴Space.cºÍnet_init.cÀ´µÃµ½¸ü¶à¹ØÓÚ½Ó¿Ú³õʼ»¯µÄÐÅÏ¢¡£ÕâÀï¶ÔÇý
¶¯³ÌÐòÉèÖõĽéÉÜÖ»ÊÇΪÁËÇ¿µ÷initÉ豸·½·¨µÄÖØÒªÐÔ¡£Èç¹ûÒ»¸öÇý¶¯³ÌÐòÄ£¿é°üº¬ÁË
Ô¤ÌîºÃµÄÉ豸½á¹¹£¬ÄÇôËü½«²»ÊʺÏÖ÷Á÷ºËÐĵijõʼ»¯¼¼Êõ£¬²¢ÇÒÈç¹û½á¹¹deviceÖÐÒý
ÈëеÄÓò£¬»áʹËü±äµÄ²»ÄÜÏòÇ°¼æÈÝ¡£



É豸½á¹¹µÄϸ½Ú

device½á¹¹¾ÓÓÚÍøÂçÇý¶¯³ÌÐòµÄÕæÕýºËÐÄ£¬ÖµµÃÍêÈ«µÄÃèÊö¡£µÚÒ»´ÎÔĶÁ±¾ÊéµÄ¶ÁÕß¿É
ÒÔÌø¹ý±¾½Ú£¬ÒòΪ¿ªÊ¼Ê±²»ÐèÒª¶ÔÕâ¸ö½á¹¹ÓÐÏêϸµÄÀí½â¡£ÏÂÃæµÄÁбíÃèÊöËùÓеÄÓò£¬
µ«Ö÷ҪĿµÄÊÇÌṩһ¸ö²Î¿¼¶ø²»ÊÇÒª±»¼Çס¡£±¾ÕµÄÆäÓಿ·ÖÔÚÒ»¸öÓò±»Ê¾Àý´úÂëÓõ½
µÄʱºò»á¼òµ¥µØÃèÊöһϣ¬ËùÒÔÄã²»±Ø²»Í£µØ»ØÍ·À´²Î¿¼±¾½Ú¡£

½á¹¹deviceÔڽṹÉÏ¿ÉÒÔ·ÖΪÁ½¸ö²¿·Ö£º¡°¿É¼ûµÄ¡±ºÍ¡°²»¿É¼ûµÄ¡±¡£¿É¼û²¿·ÖÓÉÄÇЩ
ÔÚ¾²Ì¬device½á¹¹ÖÐÏÔʽ¸³ÖµµÄÓò×é³É£¬ÏóÇ°Ãæ¸ø³öµÄÔÚsnullÖгöÏÖµÄÁ½Ïî¡£ÆäÓàµÄÓò
ÄÚ²¿Ê¹Óá£ÓÐЩ±»Çý¶¯³ÌÐò·ÃÎÊ£¨ÀýÈçÔÚ³õʼ»¯Ê±±»¸³ÖµµÄÄÇЩ£©£¬¶øÓÐЩ²»Äܶ¯¡£±¾
ÄÚ²¿Ê¹Óá£ÓÐЩ±»Çý¶¯³ÌÐò·ÃÎÊ£¨ÀýÈçÔÚ³õʼ»¯Ê±±»¸³ÖµµÄÄÇЩ£©£¬¶øÓÐЩ²»Äܶ¯¡£±¾
ÕÂÔÚ°æ±¾2.0.30Ç°¶¼ÊÇÍêÈ«µÄ¡£

¿É¼ûµÄÍ·

½á¹¹deviceµÄµÚÒ»²¿·ÖÓÉÏÂÁÐÓò×é³É£¬°´ÐòΪ£º

char *name;

É豸Ãû¡£Èç¹ûµÚÒ»¸ö×Ö·ûÊÇ0£¨NULL×Ö·û£©»ò¿Õ¸ñ£¬register_netdev¸øËü·ÖÅäÃû×Öethn
£¬nÈ¡ºÏÊʵÄÖµ¡£

unsigned long rmem_end;

unsigned long rmem_start;

unsigned long mem_end;

unsigned long mem_start;

ÕâЩÓò´æÓÐÉ豸ʹÓõĹ²ÏíÄÚ´æµÄ¿ªÊ¼ºÍ½áÊøµØÖ·¡£Èç¹ûÉ豸Óв»Í¬µÄ·¢ËͺͽÓÊÕÄÚ´æ
£¬ÄÇômemÓò¾ÍÓÃ×ö·¢ËÍÄڴ棬¶ørmemÓÃ×ö½ÓÊÕÄÚ´æ¡£mem_endºÍmem_start¿ÉÒÔÔÚϵͳÒý
µ¼Ê±ÔÚºËÐÄÃüÁîÐÐÖ¸¶¨£¬ËüÃǵÄÖµÓÉifconfig»ñÈ¡¡£RmemÓòÔÚÇý¶¯³ÌÐòÒÔÍâ²»»á±»ÒýÓÃ
¡£Ò»°ãµØ£¬endÓò±»ÉèÖóÉʹµÃend-startΪ°åÉÏ¿ÉÓÃÄÚ´æÁ¿¡£

unsigned long base_addr;

I/O»ùµØÖ·¡£Õâ¸öÓò£¬ºÍÇ°ÃæµÄÒ»Ñù£¬ÔÚÉ豸¼ì²âʱ±»¸³Öµ¡£ifconfig¿ÉÒÔÓÃÀ´ÏÔʾºÍÐÞ
¸Äµ±Ç°Öµ¡£base_addr¿ÉÒÔÔÚϵͳÒýµ¼»ò¼ÓÔØʱÔÚºËÐÄÃüÁîÐÐÏÔʽ¸³Öµ¡£

unsigned char irq;

±»¸³ÓèµÄÖжϺš£µ±½Ó¿Ú±»Áгöʱdev->irqÓÉifconfig´òÓ¡³öÀ´¡£Õâ¸öֵͨ³£ÔÚÒýµ¼»ò
¼ÓÔØʱ±»ÉèÖã¬ÒÔºó¿ÉÒÔÓÃifconfigÐ޸ġ£

unsigned char start;

unsigned char interrupt;

ÕâЩÓòÊǶþ½øÖƱêÖ¾¡£startͨ³£ÔÚÉ豸´ò¿ªÊ±ÉèÖã¬ÔڹرÕʱÇå³þ¡£ÔÚ½Ó¿Ú×¼±¸ºÅÔËÐÐ
ʱËüÊÇ·ÇÁã¡£interruptÊÇÓÃÀ´¸æËß´úÂëµÄ¸ß²ãÒ»¸öÖжϵ½´ï½Ó¿Ú£¬²¢ÕýÔÚ´¦ÀíÖС£

unsigned long tbusy;

Õâ¸öÓò±íÃ÷¡°´«ËÍ桱¡£µ±Çý¶¯³ÌÐò²»ÄÜÔÙ½ÓÊÕеİü·¢ËÍʱ£¨¼ÈËùÓеÄÊä³ö»º³åÇø¶¼
Õâ¸öÓò±íÃ÷¡°´«ËÍ桱¡£µ±Çý¶¯³ÌÐò²»ÄÜÔÙ½ÓÊÕеİü·¢ËÍʱ£¨¼ÈËùÓеÄÊä³ö»º³åÇø¶¼
ÂúÁË£©£¬ËüÓ¦¸ÃΪ·ÇÁ㡣ʹÓÃlongÀàÐͶø²»ÊÇcharÊÇÒòΪÓÐʱҪʹÓÃÔ­×ÓµÄλ²Ù×÷ÒÔ±Ü
Ã⾺ÕùÌõ¼þ¡£×¢ÒâÔÚºËÐÄ1.2£¬tbusyµÄÈ·ÊǸö°ËλµÄÓò£¬Ïòºó¿ÉÒÆÖ²µÄÇý¶¯³ÌÐòÓ¦¸Ã×¢
ÒâÕâÒ»µã¡£Ô­×ÓµÄλ²Ù×÷ÔÚµÚ¾ÅÕµġ°Ê¹ÓÃËø±äÁ¿¡±Ò»½ÚÖнéÉܹý¡£

struct device *next;

ÓÃÀ´Î¬»¤Á´±í£»ÈκÎÇý¶¯³ÌÐò¶¼²»Äܶ¯Õâ¸öÓò¡£

int (*init)(struct device *dev);

³õʼ»¯º¯Êý¡£Õâ¸öÓòͨ³£ÊÇdevice½á¹¹ÖÐÏÔʽÁгöµÄ×îºóÒ»¸öÓò¡£

Òþ²ØµÄÓò

device½á¹¹°üº¬¼¸¸ö¶îÍâµÄÓò£¬Í¨³£ÔÚÉ豸³õʼ»¯Ê±±»¸³Öµ¡£ÕâЩÓòÖеÄһЩЯ´øÁ˽Ó
¿ÚµÄÐÅÏ¢£¬Ò»Ð©´æÔÚÖ»ÊÇΪÁË·½±ãÇý¶¯³ÌÐò£¨Ò²¾ÍÊÇ˵£¬ºËÐIJ¢²»Ê¹ÓÃËüÃÇ£©£»»¹ÓÐÒ»
ЩÓò£¬×îÒýÈË×¢ÒâµÄÊÇһЩÉ豸·½·¨£¬ËüÃÇÊǺËÐĺÍÇý¶¯³ÌÐòµÄ½Ó¿Ú¡£

ÎÒÏë·Ö±ðÁÐΪÈý×飬ÓëÓòµÄʵ¼Ê˳ÐòÎ޹أ¬ÄDz¢²»ÖØÒª¡£

½Ó¿ÚÐÅÏ¢


¶àÊý½Ó¿ÚÐÅÏ¢¶¼Óɺ¯Êýether_setupÀ´ÕýÈ·ÉèÖá£ÒÔÌ«Íø¿¨Ôڴ󲿷ÖÓò¶¼¿ÉÒÔÒÀÀµÕâ¸öͨ
ÓÃÄ¿µÄµÄº¯Êý£¬µ«flagsºÍdev_addrÓòÊÇÉ豸Ìض¨µÄ£¬±ØÐëÔÚ³õʼ»¯Ê±ÏÔʽµØ¸³Öµ¡£

һЩ·ÇÒÔÌ«ÍøµÄ½Ó¿Ú¿ÉÒÔʹÓÃÀàËÆÓÚether_setupµÄÖúÊÖº¯Êý¡£driver/net/net_init.c
Òý³ötr_setup(ÁîÅÆ»·)ºÍfddi_setup¡£Èç¹ûÄãµÄÉ豸²»ÊôÓÚÕâЩÀàÖеÄÒ»ÖÖ£¬ÄãÐèÒª×Ô
¼ºÎªËùÓеÄÓò¸³Öµ¡£

unsigned short hard_header_len;

¡°Ó²¼þ°üÍ·³¤¡±¡£·¢ËÍ°üÍ·ÖÐIPÍ·£¨»òÆäËüЭÒéÐÅÏ¢£©Ö®Ç°ÄDz¿·ÖµÄ°ËÔª×é¸öÊý¡£¶ÔÒÔ
Ì«Íø½Ó¿ÚÀ´Ëµ£¬Õâ¸öÖµÊÇ14¡£

unsigned short mtu;

¡°×î´ó´«Ë͵¥Ôª¡±¡£ÔÚ°ü´«Êäʱ£¬Õâ¸öÓòÓÉÍøÂç²ãʹÓá£ÒÔÌ«ÍøµÄMTUΪ1500¸ö°ËÔª×é¡£

__u32 tx_queue_len;

ÔÚÉ豸´«ËͶÓÁÐÖпÉÒÔÅŶӵÄ×î´óìõÊý¡£ether_setup½«Õâ¸öÖµÉèΪ100£¬²»¹ýÄã¿ÉÒÔ¸Ä
±äËü¡£ÀýÈ磬plipʹÓÃ10ÒÔ±ÜÃâÀË·ÑϵͳÄڴ棨plip±Èʵ¼ÊµÄÒÔÌ«Íø½Ó¿ÚÍÌÍÂÂÊÒªµÍ£©
¡£


unsigned short type;

½Ó¿ÚµÄÓ²¼þÀàÐÍ¡£Õâ¸öÓò±»ARPʹÓÃÒÔÅжϽӿÚÖ§³ÖµÄÓ²¼þµØÖ·ÀàÐÍ¡£ÒÔÌ«Íø½Ó¿Ú°ÑËüÉè
ΪARPHRD_ETHER----ether_setupΪÄã×öÕâ¼þÊ¡£

unsigned char addr_len;

unsigned char broadcast[MAX_ADDR_LEN];

unsigned char dev_addr[MAX_ADDR_LEN];

ÒÔÌ«ÍøµØÖ·³¤ÎªÁù¸ö°ËÔª×飨ÎÒÃÇÊÇÖ¸½Ó¿Ú°åµÄÓ²¼þ±êÖ¾£©£¬²¥Ë͵ØÖ·ÓÉÁù¸ö0xff°ËÔª
×é×é³É£»ether_setup¸ºÔðÕâЩֵµÄÕýÈ·ÉèÖá£ÁíÒ»·½Ã棬É豸µØÖ·±ØÐëÒÔÉ豸Ìض¨µÄ·½
ʽ´Ó½Ó¿Ú°åÖжÁ³ö£¬Çý¶¯³ÌÐòÓ¦°ÑËü¸´ÖƵ½dev_addr¡£Õâ¸öÓ²¼þµØÖ·ÓÃÀ´ÔÚ°Ñ°ü½»¸øÇý
¶¯³ÌÐò´«ËÍÇ°²úÉúÕýÈ·µÄÒÔÌ«Íø°üÍ·¡£snull²¢²»Ê¹ÓÃÎïÀí½Ó¿Ú£¬ËüÉú³ÉÒ»¸öËü×Ô¼ºµÄÎï
ÀíµØÖ·¡£

unsigned short family;

½Ó¿ÚµÄµØÖ·×壬ͨ³£ÎªAF_INET¡£½Ó¿Ú²¢²»³£²é¿´Õâ¸öÓò»òÕßÏòÆ丳ֵ¡£

unsigned short pa_alen;

ЭÒéµØÖ·³¤¡£¶ÔAF_INETÀ´ËµÎªËĸö°ËÔª×é¡£½Ó¿Ú²»ÐèÒªÐÞ¸ÄÕâ¸öÊý¡£

unsigned long pa_addr;

unsigned long pa_brdaddr;

unsigned long pa_mask;

¿Ì»®½Ó¿ÚµÄÈý¸öµØÖ·£º½Ó¿ÚµØÖ·£¬²¥Ë͵ØÖ·£¬¼°ÍøÂçÑÚÂë¡£ÕâЩֵÊÇЭÒéÌض¨µÄ£¨¼ÈËü
ÃÇÊÇ¡°Ð­ÒéµØÖ·¡±£©£»Èç¹ûdev->familyÊÇINET£¬ÔòËüÃÇΪIPµØÖ·¡£ÕâЩÓòÓÉifconfig¸³
Öµ£¬¶ÔÇý¶¯³ÌÐòÊÇÖ»¶ÁµÄ¡£

unsigned long pa_dstaddr;

plipºÍpppÒ»Ààµãµ½µãЭÒéʹÓÃÕâ¸öÓò¼Ç¼Á¬½ÓÁíÒ»²àµÄIPºÅÂë¡£ºÍÇ°ÃæµÄÓòÒ»Ñù£¬ËüÒ²
ÊÇÖ»¶ÁµÄ¡£

unsigned short flags;

½Ó¿Ú±êÖ¾¡£Õâ¸öÓòº¬ÓÐÏÂÁÐλֵ¡£Ç°×ºIFFÒâΪ½Ó¿Ú±êÖ¾£¨InterFace Flags£©¡£ÓÐЩ±ê
Ö¾ÓɺËÐĹÜÀí£¬ÓÐЩÔòÊÇÔÚ³õʼ»¯Ê±ÓɽӿÚÉèÖã¬ÒÔÈ·ÈϽӿڵÄÄÜÁ¦¡£ÓÐЧµÄ±êÖ¾ÊÇ£º
ÚµÄÄÜÁ¦¡£ÓÐЧµÄ±êÖ¾ÊÇ£º

IFF_UP

µ±½Ó¿ÚÊÇ»îÔ¾µÄʱ£¬ºËÐÄÖÃÉϸñêÖ¾¡£Õâ¸ö±êÖ¾¶ÔÇý¶¯³ÌÐòÊÇÖ»¶ÁµÄ¡£

IFF_BROADCAST

Õâ¸ö±êÖ¾±íÃ÷½Ó¿ÚµÄ²¥Ë͵ØÖ·ÊÇÓÐЧµÄ¡£ÒÔÌ«Íø¿¨Ö§³Ö²¥ËÍ¡£

IFF_DEBUG

²é´íģʽ¡£Õâ±êÖ¾¿ØÖÆprintkµ÷ÓõÄßë߶£¬»¹ÓÃÔÚÆäËüһЩ²é´íÄ¿µÄ¡£¾¡¹ÜĿǰûÓйÙ
·½Çý¶¯³ÌÐòʹÓÃËü£¬Óû§³ÌÐò¿ÉÒÔͨ¹ýioctlÀ´¶ÔÆäÖÃλ»òÕßÇå³ý£¬ÄãµÄÇý¶¯³ÌÐò¿ÉÒÔʹ
ÓÃËü¡£misc-progs/netifdebug³ÌÐò¿ÉÒÔÓÃÀ´½«Õâ¸ö±êÖ¾´ò¿ª»ò¹Ø±Õ¡£

IFF_LOOPBACK

Õâ¸ö±êÖ¾ÔÚ»·»Ø½Ó¿ÚÖÐÒª±»ÖÃλ¡£ºËÐļì²âÕâ¸ö±êÖ¾¶ø²»Êǽ«Ãû×Ölo×÷ΪÌØÊâ½Ó¿ÚӲд
Èë³ÌÐò¡£

IFF_POINTOPOINT


µãµ½µãµÄ³õʼ»¯º¯ÊýÓ¦ÖÃλÕâ¸ö±êÖ¾¡£ÀýÈ磬plip¶ÔËüÖÃλ¡£ifconfig¹¤¾ßÒ²¿ÉÒÔ¶ÔÆä
ÖÃλºÍÇå³ý¡£µ±Ëü±»ÖÃλʱ£¬dev->pa_dstaddrÓ¦¸ÃÖ¸ÏòÁ¬½ÓµÄÁíÒ»¶Ë¡£

IFF_NOARP

³£¹æÍøÂç½Ó¿Ú¿ÉÒÔ´«ËÍARP°ü¡£Èç¹û½Ó¿Ú²»ÄܽøÐÐARP£¬Ëü±ØÐëÖÃÕâ¸ö±êÖ¾¡£ÀýÈ磬µãµ½
µã½Ó¿Ú²¢²»ÐèÒªÔËÐÐARP£¬ËüÖ»ÄÜÔö¼Ó¶îÍâµÄͨÐÅ£¬È´²»ÄÜ»ñÈ¡ÈκÎÓÐÓõÄÐÅÏ¢¡£snull
²»¾ßÓÐARPÄÜÁ¦£¬Òò´ËËüÒª¶ÔÆäÖÃλ¡£

IFF_PROMISC

Õâ¸ö±êÖ¾±»ÖÃλÒÔ»ñµÃÔÓÀà²Ù×÷¡£ÔÚȱʡÇé¿öÏ£¬ÒÔÌ«Íø½Ó¿ÚʹÓÃÓ²¼þ¹ýÂËÆ÷ÒÔ±£Ö¤Ëü
Ö»ÊÕµ½²¥ËÍ°üºÍÖ¸ÏòÆäÓ²¼þµØÖ·µÄ°ü¡£¶øÏótcpdumpÒ»Àà°ü¼àÊÓÆ÷ÔòÔÚ½Ó¿ÚÉÏÉèÖÃÔÓÀàÄ£
ʽ£¬ÒÔ»ñÈ¡¾­¹ý½Ó¿Ú´«Êä½éÖʵÄËùÓаü¡£

IFF_MULTICAST

ÄܽøÐÐÑ¡²¥´«Ë͵ĽӿÚÒªÖÃÕâ¸ö±êÖ¾¡£ether_setupÔÚȱʡÇé¿ö϶ÔÆäÖÃλ¡£ËùÒÔÈç¹ûÄã
µÄÇý¶¯³ÌÐò²»Ö§³ÖÑ¡²¥£¬Ëü±ØÐëÔÚ³õʼ»¯Ê±Çå³ýÕâ¸ö±êÖ¾¡£

IFF_ALLMULTI


Õâ¸ö±êÖ¾¸æËß½Ó¿Ú½ÓÊÕËùÓеÄÑ¡²¥°ü¡£Ö»Óе±IFF_MULTICAST±»ÖÃ룬¶øÖ÷»úÓɽøÐÐÑ¡²¥
·ÓÉʱ£¬ºËÐĶÔÆäÖÃλ¡£Ëü¶Ô½Ó¿Úʱֻ¶ÁµÄ¡£IFF_MULTICASTºÍIFF_ALLMULTIÔçÔÚ1.2°æ
¾ÍÒѾ­¶¨ÒåÁË£¬µ«ÄÇʱ²¢Î´Ê¹Óá£ÔÚºóÃæ¡°Ñ¡²¥¡±Ò»½ÚÎÒÃǽ«¿´µ½ËüÊÇÈçºÎʹÓõġ£

IFF_MASTER

IFF_SLAVE

ÕâЩ±êÖ¾±»¼ÓÔؾùºâ´úÂëʹÓ᣽ӿÚÇý¶¯³ÌÐò²»ÐèÒªÖªµÀËüÃÇ¡£

IFF_NOTRAILERS

IFF_RUNNING

ÕâЩ±êÖ¾ÔÚLinuxÖв»Ê¹Óã¬Ö»ÊÇΪÁ˺ÍBSD¼æÈݶø´æÔÚ¡£

µ±Ò»¸ö³ÌÐò¸Ä±äIFF_UP£¬openºÍclose·½·¨»á±»µ÷Óᣵ±IFF_UP»òÆäËü±êÖ¾±»ÐÞ¸Äʱ£¬se
t_multicast_list·½·¨±»µ÷Óá£Èç¹ûÇý¶¯³ÌÐòÒòΪ±êÖ¾µÄÐ޸ĶøÒªÖ´ÐÐһЩ¶¯×÷£¬ÄÇô
±ØÐëÔÚset_multicast_listÖнøÐС£ÀýÈ磬µ±IFF_PROMIS±»ÖÃλ»òÇå³ýʱ£¬°åÉÏÓ²¼þ¹ý
ÂËÆ÷±ØÐ뱻֪ͨ¡£Õâ¸öÉ豸·½·¨µÄÔðÈν«ÔÚºóÃæµÄ¡°Ñ¡²¥¡±Ò»½Ú¼òµ¥½éÉÜ¡£




É豸·½·¨

Óë×Ö·ûÉ豸ºÍ¿éÉ豸µÄÇé¿öÒ»Ñù£¬Ã¿¸öÍøÂçÉ豸ҪÉùÃ÷ÔÚÆäÉϲÙ×÷µÄº¯Êý¡£¿ÉÒÔÔÚÍøÂç
½Ó¿ÚÉϽøÐеIJÙ×÷ÁÐÔÚÏÂÃ档һЩ²Ù×÷¿ÉÒÔÁôΪNULL£¬»¹ÓÐһЩͨ³£²»È¥¶¯ËüÃÇ£¬ÒòΪe
ther_setup¸øËüÃÇ·ÖÅäºÏÊʵķ½·¨¡£

Ò»¸öÍøÂç½Ó¿ÚµÄÉ豸·½·¨¿ÉÒÔ·ÖΪÁ½Àࣺ»ù±¾µÄºÍ¿ÉÑ¡µÄ¡£»ù±¾µÄ°üÀ¨ÄÇЩΪ·ÃÎʽӿÚ
ËùÐèÒªµÄ£»¿ÉÑ¡µÄ·½·¨ÊµÏÖһЩ²¢²»ÑϸñÒªÇóµÄ¸ß¼¶¹¦ÄÜ¡£ÏÂÃæÊÇ»ù±¾·½·¨£º

int (*open)(struct device *dev);

´ò¿ª½Ó¿Ú¡£Ö»Òªifconfig¼¤»îÒ»¸ö½Ó¿Ú£¬Ëü¾Í±»´ò¿ªÁË¡£open·½·¨Òª×¢²áËüÐèÒªµÄËùÓÐ
×ÊÔ´£¨I/O¶Ë¿Ú£¬IRQ£¬DMA£¬µÈ£©£¬´ò¿ªÓ²¼þ£¬Ôö¼ÓÄ£¿éµÄʹÓüÆÊý¡£

int (*stop)(struct device *dev);

ÖÕÖ¹½Ó¿Ú¡£½Ó¿ÚÔڹرÕʱ¾ÍÖÕÖ¹ÁË£»ÔÚ´ò¿ªÊ±½øÐеIJÙ×÷Ó¦±»±£Áô¡£

int (*hard_start_xmit)(struct sk_buff *skb, struct device *dev)£»

Ó²¼þ¿ªÊ¼´«ËÍ¡£Õâ¸ö·½·¨ÇëÇóÒ»¸ö°üµÄ´«ËÍ¡£Õâ¸ö°üº¬ÔÚÒ»¸öÌ×½Ó×Ö»º³åÇø½á¹¹£¨sk_bu
ff£©ÖС£Ì×½Ó×Ö»º³åÇøÔÚÏÂÃæ½éÉÜ¡£

int (*rebuild_header)(void *buf, struct device *dev, unsigned long raddr,
struct sk_buffer *skb);

Õâ¸öº¯ÊýÓÃÀ´ÔÚÒ»¸ö°ü´«ËÍ֮ǰÖع¹Ó²¼þ°üÍ·¡£Õâ¸öÒÔÌ«ÍøÉ豸ʹÓõÄȱʡ°üÍ·ÓÃARPÏò
°üÖÐÌîÈëȱÉÙµÄÐÅÏ¢¡£snullÇý¶¯³ÌÐòʵÏÖÁËËü×Ô¼ºµÄÕâ¸ö·½·¨£¬ÒòΪARP²¢²»ÔÚsn½Ó¿Ú
ÉÏÔËÐС££¨ÔÚ±¾ÕµĺóÃæ»á½éÉÜARP¡££©Õâ¸ö·½·¨µÄ²ÎÊýÊÇһЩָÕ룬·Ö±ðÖ¸ÏòÓ²¼þ°üÍ·
£¬É豸£¬¡°Â·ÓÉÆ÷µØÖ·¡±£¨°üµÄ³õʼĿµÄµØ£©£¬ÒÔ¼°±»´«Ë͵Ļº³åÇø¡£

int (*hard_header)(struct sk_buffer *skb, struct device *dev, unsigned
short type,

                               void *daddr, void *saddr, unsigned len);

Ó²¼þ°üÍ·¡£Õâ¸öº¯ÊýÓÃÒÔÇ°»ñÈ¡µÄÔ´ºÍÄ¿µÄµØÖ·¹¹Ôì°üÍ·£»ËüµÄÈÎÎñÊÇ×éÖ¯ÄÇЩÒÔ²ÎÊý
µÄÐÎʽ´«¸øËüµÄÐÅÏ¢¡£eth_headerÊÇÒÔÌ«ÍøÀà½Ó¿ÚµÄȱʡº¯Êý£¬ ether_setupÏàÓ¦µØ¶Ô
Õâ¸öÓò¸³Öµ¡£¸ø³öµÄ²ÎÊý˳ÐòÊÊÓÃÓÚºËÐÄ2.0»ò¸ü¸ß°æ±¾£¬µ«Óë1.2ÓÐËù²»Í¬¡£Õâ¸ö¸Ä±ä
¶ÔÒÔÌ«ÍøÇý¶¯³ÌÐòÊÇ͸Ã÷µÄ£¬ÒòΪËü¼Ì³ÐÁË eth_headerµÄʵÏÖ£»ÆäËüÇý¶¯³ÌÐò¿ÉÄÜÒª´¦
ÀíÒ»ÏÂÕâ¸ö²»Í¬£¬Èç¹ûËüÃÇÏë±£³ÖÏòºó¼æÈݵĻ°¡£

struct enet_statistics * (*get_stats)(struct device *dev);
struct enet_statistics * (*get_stats)(struct device *dev);

µ±Ó¦ÓÃÏ£Íû»ñµÃ½Ó¿ÚµÄͳ¼ÆÐÅϢʱÐèÒªµ÷ÓÃÕâ¸ö·½·¨£¬ÀýÈ磬µ±ÔËÐÐifconfig»ònetstat
 ¨Ciʱ¡£ÔÚsnullÖеÄÒ»¸öʾÀýʵÏÖ½«ÔÚºóÃ桰ͳ¼ÆÐÅÏ¢¡±ÖнéÉÜ¡£

int (*set_config)(struct device *dev, struct ifmap *map);

¸Ä±ä½Ó¿ÚµÄÅäÖá£Õâ¸ö·½·¨ÊÇÅäÖÃÇý¶¯³ÌÐòµÄÈë¿Úµã¡£É豸µÄI/OµØÖ·ºÍÖжϺſÉÒÔÔÚÔË
ÐÐʱÓÃset_config¸Ä±ä¡£ÔÚ½Ó¿Ú²»ÄÜ̽²âµ½Ê±£¬ÏµÍ³¹ÜÀíÔ±¿ÉÒÔÊÊÓÃÕâ¸öÄÜÁ¦¡£Õâ¸ö·½
·¨ÔÚºóÃæµÄ¡°ÔËÐÐʱÅäÖá±ÖнéÉÜ¡£



ÆäÓàµÄÉ豸·½·¨ÊDZ»ÎÒ³ÆΪ¿ÉÑ¡µÄÄÇЩ¡£´«µÝ¸øÆäÖÐһЩµÄ²ÎÊýÔÚLinux1.2µ½Linux2.0
µÄת±äÖиÄÁ˺ü¸´Î¡£Èç¹ûÄãÏëдһ¸ö¿ÉÒÔÔÚÁ½¸ö°æ±¾ºËÐĶ¼¹¤×÷µÄÇý¶¯³ÌÐò£¬Äã¿ÉÒÔ
ֻΪ´Ó2.0¿ªÊ¼µÄ°æ±¾ÊµÏÖÕâЩ²Ù×÷¡£

int (*do_ioctl)(struct devices *dev, struct ifreg *ifr, int cmd);

Ö´ÐнӿÚÌض¨µÄioctlÃüÁî¡£ÕâЩÃüÁîµÄʵÏÖÔÚºóÃæµÄ¡°×Ô¶¨ÒåioctlÃüÁÖÐÃèÊö¡£Õâ
Àï¸ø³öµÄÔ­ÐÎÔÚ1.2ÒÔÉϵĺËÐĶ¼Äܹ¤×÷¡£Èç¹û½Ó¿Ú²»ÐèÒªÈκνӿÚÌض¨µÄÃüÁÄÇô½á
¹¹deviceÖÐÏàÓ¦µÄÓò¿ÉÒÔÁôΪNULL¡£


void (*set_multicast_list)(struct device *dev);

µ±É豸µÄÑ¡²¥Áбí¸Ä±äºÍ±êÖ¾¸Ä±äʱ£¬½«µ÷ÓÃÕâ¸ö·½·¨¡£ÕâÀïµÄ²ÎÊý´«µÝÓë1.2°æ±¾²»Í¬
¡£¸ü¶àµÄϸ½ÚºÍÒ»¸öʾÀýʵÏÖ¼û¡°Ñ¡²¥¡±Ò»½Ú¡£

int (*set_mac_address)(struct device *dev, void *addr);

Èç¹û½Ó¿ÚÖ§³Ö¸Ä±äÓ²¼þµØÖ·µÄÄÜÁ¦£¬¿ÉʵÏÖÕâ¸öº¯Êý¡£¶àÊý½Ó¿ÚҪô²»Ö§³ÖÕâ¸öÄÜÁ¦£¬
ҪôʹÓÃȱʡµÄeth_mac_addrʵÏÖ¡£Õâ¸öÔ­ÐÎÓë1.2°æÒ²²»Í¬¡£

#define HAVE_HEADER_CACHE

void (*header_cache_bind)(struct hh_cache **hhp, struct device *dev,
unsigned short htype, __u32 daddr);

void (*header_cache_update)(struct hh_cache *hh, struct device *dev,
unsigned char *haddr);

ÕâЩº¯ÊýºÍºêÔÚLinux1.2ÖÐûÓС£ÒÔÌ«ÍøÇý¶¯³ÌÐò²»±Ø¹ØÐÄheader_cacheµÄÎÊÌ⣬ÒòΪe
th_setup»á°²ÅÅʹÓÃȱʡµÄ·½·¨¡£

#define HAVE_CACHE_MTU

int (*change_mtu)(struct device *dev, int new_mtu);

Èç¹û½Ó¿ÚµÄMTU£¨×î´ó´«Ë͵¥Ôª£©·¢ÉúÁ˸ı䣬Õâ¸öº¯Êý¸ºÔð²ÉÈ¡¶¯×÷¡£Õâ¸öº¯ÊýºÍºêÔÚ
Linux1.2Öж¼Ã»ÓС£µ±MTU¸Ä±äʱ£¬Èç¹ûÇý¶¯³ÌÐòÒª×öһЩÌØÊâµÄÊÂÇ飬ËüÓ¦¸ÃÉùÃ÷Ëü×Ô
¼ºµÄº¯Êý£¬²»È»½«ÓÉȱʡº¯ÊýÀ´Íê³É¡£Èç¹ûÄã¸ÐÐËȤ£¬snullÓÐÒ»¸öÕâ¸öº¯ÊýµÄÄ£°æ¡£



¹¤¾ßÓò

ÆäÓàµÄ½á¹¹deviceÖеÄÓò±»½Ó¿ÚÓÃÀ´±£´æһЩÓÐÓõÄ״̬ÐÅÏ¢¡£ÆäÖÐһЩ±»ifconfigºÍn
etstatÓÃÀ´ÏòÓû§Ìṩµ±Ç°ÅäÖõÄÐÅÏ¢¡£Òò´Ë£¬½Ó¿ÚÓ¦¸Ã¶ÔÕâЩÓò¸³Öµ¡£

unsigned long trans_start;

unsigned long last_rx;

ÕâÁ½¸öÓòÓÃÀ´±£´æһЩ˲¼äÖµ¡£ËüÃÇÄ¿Ç°²»Ó㬵«ºËÐÄÓпÉÄܽ«À´Ê¹ÓÃÕâЩ¼ÆʱÌáʾ¡£
Çý¶¯³ÌÐò¸ºÔðÔÚ´«ËÍ¿ªÊ¼Ê±ºÍÊÕµ½°üʱ¸üÐÂÕâЩֵ¡£trans_startÓò»¹¿ÉÒÔ±»Çý¶¯³ÌÐòÓÃ
À´¼ì²âËø¶¨¡£Çý¶¯³ÌÐò¿ÉÒÔÔڵȴýÒ»¸ö¡°´«ËÍÍê³É¡±µÄÖжÏʱÓÃtrans_startÀ´¼ì²é³¬Ê±
¡£
¡£

void *priv

µÈ¼ÛÓÚfilp->private_data¡£Çý¶¯³ÌÐòÓµÓÐÕâ¸öÖ¸Õ룬¿ÉÒÔËæÒâʹÓá£Í¨³£Õâ¸ö˽ÓÐÊý
¾Ý½á¹¹º¬ÓÐÒ»¸öenet_statistics½á¹¹Ïî¡£Õâ¸öÓòÔÚÒÔÇ°µÄ¡°³õʼ»¯Ã¿¸öÉ豸¡±ÖÐÓùý¡£


unsigned char if_prot;

Õâ¸öÓòÓÃÀ´¼Ç¼ÄĸöÓ²¼þ¶Ë¿Ú±»½Ó¿ÚʹÓã¨ÀýÈ磬BNC£¬AUI£¬TP£©¡£ÈκÎÊýÖµ¶¼¿ÉÒÔ°´
ÐèÒª¸³¸øËü¡£

unsigned char dma;

±»½Ó¿ÚʹÓõÄDMAͨµÀ¡£Õâ¸öÓò±»ioctlµÄSIOCGIFMAPÃüÁîʹÓá£

struct dev_mc_list *mc_list;

int mc_count

ÕâÁ½¸öÓò±»ÓÃÀ´´¦ÀíÑ¡²¥´«ËÍ¡£Mc_countÊÇmc_listÖÐÏîµÄ¸öÊý¡£¸ü¶àµÄϸ½Ú¼û¡°Ñ¡²¥¡±
¡£



½á¹¹deviceÖл¹ÓÐһЩ±ðµÄÓò£¬µ«Çý¶¯³ÌÐòûÓÐʹÓÃËüÃÇ¡£
  

--
¡ù À´Ô´:¡¤¹þ¹¤´ó×϶¡Ïã bbs.hit.edu.cn¡¤[FROM: 202.118.235.250]
[°Ù±¦Ïä] [·µ»ØÊ×Ò³] [Éϼ¶Ä¿Â¼] [¸ùĿ¼] [·µ»Ø¶¥²¿] [Ë¢ÐÂ] [·µ»Ø]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
Ò³ÃæÖ´ÐÐʱ¼ä£º202.423ºÁÃë