¡¾ÇóÖú¡¿¹ØÓÚinbºÍinwµÄÒÉÎÊ
³õѧlinuxÄںˣ¬ÔÚÔĶÁÍøÂçÉ豸Çý¶¯³ÌÐòʱ¶ÔinbºÍinwº¯ÊýµÄÓ÷¨¸Ðµ½²»½â£º£¨1£©ISAÍø¿¨Çý¶¯³ÌÐòµÄ̽²â¹ý³Ì£¨º¯Êýnetcard_probe1()ÖУ©£¬´ÓÆðʼ¶Ë¿Ú¶ÁÈ¡3×Ö½ÚÍø¿¨Ó²¼þµØÖ·½øÐÐУÑ飺
if ( inb(ioaddr+0) != SA_ADDR0 ¦ ¦ inb(ioaddr+1) != SA_ADDR1 ¦ ¦ inb(ioaddr+2) != SA_ADDR3 )
{ return -ENODEV; }
...
for ( i=0; i <6; i++ )
printk("%2.2x" , dev->dev_addr[i] = inb(ioaddr+i));
£¨2£©ÔÚ½ÓÊÕº¯ÊýÖУ¨º¯Êýnet_rx()£©£¬³öÏÖ:
int status = inw(ioaddr);
int pkt_len = inw(ioaddr);
·Ö±ð±íʾ¶Áȡ֡״̬ÂëºÍÖ¡³¤¶È£¬ÊÇ´Óͬһ¸ö¶Ë¿Ú¶Áµ½µÄÒ»¸ö°üÖеÄÁ½¸ö²»Í¬Êý¾Ý
ÄÇô£¬ÎªÊ²Ã´£¨1£©ÖÐÈý¸ö×Ö½ÚµÄÓ²¼þµØÖ·ÊÇÔÚÈý¸öÁ¬Ðø¶Ë¿ÚÖжÁ³öÀ´µÄ£¨inbÖеÄ"+0"¡¢"+1"¡¢"+2"£©£¬¶ø£¨2£©ÖÐ֡״̬ÂëºÍ³¤¶ÈÈ´ÊÇͬһ¸ö¶Ë¿ÚÄØ£¿
¶øÇÒÈç¹û¶Ôͬһ¶Ë¿ÚµÄÁ¬Ðø¶ÁÈ¡»áµÃµ½²»Í¬µÄÊý¾Ý£¬ÔÚ£¨1£©ÖУ¬¶ÁÈ¡µØÖ·Ð£ÑéÍêºóµÄ´òÓ¡¹ý³Ì£¨inb(ioaddr+i)£©»¹ÄÜÈ·¶¨ÊÇУÑéʱ¶ÁÈ¡µÄÓ²¼þµØÖ·Êý¾Ýô£¿
Çë¸ßÊÖÖ¸½Ì£¬Ð»Ð»£¡ ÎÒÏ룬Õâ¸öioaddrÊǾֲ¿±äÁ¿°É£¬Á½¸öº¯ÊýÖеľֲ¿±äÁ¿Ó¦¸ÃÊÇ·çÂíÅ£²»Ï༰µÄ°É¡£
»Ø¸´ #2 zltjiangshi µÄÌû×Ó
Á½¸öº¯ÊýÖеÄioaddr¶¼ÊÇÖ¸µÄÍø¿¨µÄIO»ùµØÖ·£¬ÎÒ¶ÔIO_BASEÀí½â²»É¿´µ½×ÊÁÏÉÏ˵¡°Íø¿¨macµØÖ·´æÓÚ¿ªÊ¼µÄÁù¸ö¼Ä´æÆ÷ÖС±£¬²»ÖªÊÇ·ñÓë»ùµØÖ·Ïà¹Ø¡£ ÎÒ»¹ÊǾõµÃÁ½¸öº¯ÊýÖеÄioaddr²»ÊÇÒ»¸öµØÖ·£¬Òª²»Äã°ÑËüÃǵÄÉùÃ÷´¦Ìù³öÀ´¿´¿´¡£Èç¹ûº¯Êý²»³¤£¬°ÑÕû¸öº¯ÊýÌù³öÀ´Ò²¿ÉÒÔ¡£ ioaddrÕâ¸öportÒ»Ö±¶¼ÊDZ£´æÍø¿¨Ó²¼þµØÖ·Âð£¿
ÎÒû¿´¹ýÍø¿¨Çý¶¯,Ö»¿´¹ýɨÃèÒÇÇý¶¯,ËùÒԸе½ºÜºÃÆæ,Ò»°ãÊÇÏòcontrol port·¢ËÍÖ¸Áî,È»ºó´Ódata port»òstatus portÖжÁÈ¡Êý¾Ý.ÎÒÈÏΪioaddrÊÇÒ»¸ödata port»òstatus port,ÔÚ½ÓÊÕº¯ÊýÖÐÓ¦¸ÃÒѾÏòcontrol port·¢ËÍÖ¸ÁîÁË,È»ºó´ÓioaddrÖжÁÈ¡Êý¾Ý
ÎÒ¶ÔÍø¿¨Çý¶¯ÖªµÀµÄºÜÉÙ,ÎÞÖªÕßÎÞη´ó¸Å˵µÄ¾ÍÊÇÎÒÁË ÊܽÌÁË£¬ÊÇÎÒ¿´´úÂë¿´µÄÌ«ËÀÁË£¬Ð»Ð»£¡
Ò³:
[1]