¡õ ·±ÌåÖÐÎÄ
¡õ ¸ß¼¶ËÑË÷
 
Ê×Ò³ | µç×Ó¼¼ÊõÓ¦Óà | ÐÐÒµ×îж¯Ì¬ | ÐÐÒµ×îвúÆ· | Èí¼þ×ÊÁÏÏÂÔØ | µç·ͼֽÐÀÉÍ | ²©¿ÍÎÄÕ¾«Ñ¡ | µç×Ó¾«Æ·ÂÛ̳ | µç×Ó¼¼ÊõÌù°É

µ±Ç°Î»ÖãºÊ×Ò³ >> µç×Ó¼¼ÊõÓ¦Óà >> ǶÈëʽϵͳ-Ó¦Óà >> ÍøÂç¿ØÖÆÆ÷DM9000AÔÚǶÈëʽϵͳÖеÄÓ¦ÓÃ
ÍøÂç¿ØÖÆÆ÷DM9000AÔÚǶÈëʽϵͳÖеÄÓ¦ÓÃ
×÷Õߣº¼Ö¶«Ò« ¹ãÖݾÛê͵ç×Ó¹«Ë¾ ÅíÊ÷ÁÖ ÐÂÌ«¿Æ¼¼¹É·ÝÓÐÏÞ¹«Ë   À´Ô´£ºµç×Ó²úÆ·ÊÀ½ç ·¢±íʱ¼ä£º2008-08-16  ×ֺţº´ó ÖРС

¡¡

Ŀǰ£¬ÍøÂç¼¼ÊõÔÚµç×Ó²úÆ·ÖеÄÓ¦ÓÃÔ½À´Ô½¹ã£¬¸ü¶àµÄǶÈëʽÉ豸ÐèÒªÌá¹©ÍøÂç½Ó¿Ú£¬ÒÔ·½±ãÓëÍⲿ»¥ÁªÍ¨Ñ¶¡£ÏÖÔÚÁ÷ÐеĴó¶àÊýǶÈëʽCPU(ÈçARM¡¢PPC)¶¼ÌṩÁË´ËÀà½Ó¿Ú£¬µ«¶ÔÓÚһЩÏà¶Ô¸´ÔÓµÄǶÈëʽϵͳÀ´Ëµ£¬¿ÉÄÜÐèÒªÀ©Õ¹ÒÔÌ«Íø¿Ú£¬ÒÔÂú×ãÍøÂçͨѶÐèÒª¡£±¾ÎĽéÉÜÒ»ÖÖпîÍøÂç½Ó¿ÚоƬDM9000A£¬Ëü¿ÉÒԺܷ½±ãµÄʵÏÖÓëǶÈëʽCPUµÄ½Ó¿Ú£¬ÊµÏÖÀ©Õ¹ÒÔÌ«Íø¿ÚµÄ¹¦ÄÜ¡£

DM9000A

¡¡¡¡DM9000AÊÇÖйų́ÍåDAVICOM¹«Ë¾ÍƳöµÄÒ»¿î¸ßËÙÒÔÌ«Íø½Ó¿ÚоƬ£¬Æä»ù±¾ÌØÕ÷ÊÇ£º¼¯³É10/100MÎïÀí²ã½Ó¿Ú£»ÄÚ²¿´øÓÐ16K×Ö½ÚSRAMÓÃ×÷½ÓÊÕ·¢Ë͵ÄFIFO»º´æ£»Ö§³Ö8/16bitÁ½ÖÖÖ÷»ú¹¤×÷ģʽ£»Í¨¹ýHPÈÏÖ¤µÄAUTO-Mdix(Ö§³ÖÖ±½Ó»¥Á¬×Ô¶¯·­×ª)¹¦ÄÜ£»Ö§³ÖTCP/IP¼ÓËÙ(IPV4 check sum offload)¼õÇáCPU¸ºµ££¬Ìá¸ßÕû»úЧÄÜ£»10ns I/O¶Áдʱ¼ä¡£DM9000AÒÔÌ«Íø¿ØÖÆÆ÷×ñÑ­IEEE°ä²¼µÄ802.3ÒÔÌ«Íø´«ÊäЭÒé¡£¸Ãµç·»¹¼¯³ÉÁËEEPROM½Ó¿Ú£¬×Ô¾Ùʱͨ¹ýEEPROM½Ó¿ÚÊäÈ뵽оƬÖУ¬´Ó¶øÊµÏÖ×Ô¶¯³õʼ»¯¡£

Ó²¼þ½Ó¿ÚÉè¼Æ

¡¡¡¡DM9000A¿ÉÒԺܷ½±ãµÄÓëĿǰÖ÷Á÷µÄǶÈëʽCPUÒÔ8λ»ò16λµÄ×ÜÏß·½Ê½Á¬½Ó£¬±¾ÎÄÉè¼ÆµÄϵͳCPUΪAT91RM9200£¬ËüÊÇÒ»¸ö²ÉÓÃARMºËµÄ32λ΢´¦ÀíÆ÷¡£¶þÕߵĽӿÚÉè¼ÆÈçͼ1¡£


ͼ1 DM9000AÓëAT91RM9200Ó²¼þÁ¬½Ó

¡¡¡¡ÏµÍ³Éϵçʱ£¬AT91RM9200ͨ¹ý×ÜÏßÅäÖÃDM9000AÄÚ²¿ÍøÂç¿ØÖÆ¼Ä´æÆ÷(NCR)¡¢ÖжϼĴæÆ÷(ISR)µÈ£¬Íê³ÉDM9000AµÄ³õʼ»¯¡£Ëæºó£¬DM9000A½øÈëÊý¾ÝÊÕ·¢µÈ´ý״̬¡£µ±AT91RM9200ÏòÒÔÌ«Íø·¢ËÍÊý¾Ýʱ£¬ÏȽ«Êý¾Ý´ò°ü³ÉUDP»òIPÊý¾Ý°ü£¬²¢Í¨¹ý16 bit×ÜÏß·¢Ë͵½DM9000AµÄÊý¾Ý·¢ËÍ»º´æÖУ¬È»ºó½«Êý¾Ý³¤¶ÈµÈÐÅÏ¢Ìî³äµ½DM9000AµÄÏàÓ¦¼Ä´æÆ÷ÄÚ£¬Ê¹ÄÜ·¢ËÍ¡£µ±DM9000A½ÓÊÕµ½Íâ²¿ÍøÂçËÍÀ´µÄÒÔÌ«ÍøÊý¾Ýʱ£¬Ê×Ïȼì²âÊý¾ÝÖ¡µÄºÏ·¨ÐÔ£¬Èç¹ûÖ¡Í·±êÖ¾ÓÐÎó»ò´æÔÚCRCУÑé´íÎó£¬Ôò½«¸ÃÖ¡Êý¾Ý¶ªÆú¡£·ñÔò½«Êý¾ÝÖ¡»º´æµ½ÄÚ²¿RAM£¬²¢Í¨¹ýÖжϱê־λ֪ͨAT91RM9200£¬ÓÉAT91RM9200¶ÔDM9000A½ÓÊÕµ½µÄÊý¾Ý½øÐд¦Àí¡£

LinuxÇý¶¯ÊµÏÖ

¡¡¡¡LinuxÍøÂçÇý¶¯Ìåϵ½á¹¹
¡¡¡¡ÔÚLinux²Ù×÷ϵͳÖеÄÉ豸Çý¶¯£¬¸ù¾Ý¸÷ÀàÍâΧI/OÉ豸µÄ²»Í¬£¬·ÖΪÈýÀ࣬¼´×Ö·ûÉ豸(Èç¼üÅÌ¡¢LCD) Çý¶¯¡¢¿éÉ豸(ÈçÓ²ÅÌ¡¢CF¿¨) Çý¶¯ºÍÍøÂçÉ豸(ÈçÍø¿¨) Çý¶¯¡£ LinuxÍøÂçÉ豸Çý¶¯³ÌÐò½á¹¹ÉÏÓÉËIJ¿·Ö×é³É(ͼ2)£ºÍøÂçЭÒé½Ó¿Ú£¬ÍøÂçÉ豸½Ó¿Ú£¬É豸Çý¶¯¹¦ÄÜ²ã¼°ÍøÂçÉ豸½éÖÊ¡£


ͼ2 LinuxÍøÂçÇý¶¯Ìåϵ½á¹¹

Éè¼Æ¿ª·¢LinuxÍøÂçÇý¶¯³ÌÐòʱ£¬×îÖ÷ÒªµÄ¹¤×÷¾ÍÊÇÍê³ÉÉ豸Çý¶¯¹¦Äܲ㡣ÀàËÆÓÚ¶Ô×Ö·ûÉ豸ºÍ¿éÉ豸µÄ´¦Àí£¬ÎªÁËÆÁ±ÎÍøÂç»·¾³ÖÐÎïÀíÍøÂçÉ豸µÄ¶àÑùÐÔ£¬LinuxÀûÓÃÃæÏò¶ÔÏóµÄ˼Ïë¶ÔËùÓеÄÍøÂçÎïÀíÉ豸½øÐгéÏ󣬶¨ÒåÁËÒ»¸öͳһµÄ½Ó¿Ú¡£¶ÔÓÚËùÓÐÍøÂçÓ²¼þµÄ·ÃÎʶ¼ÊÇͨ¹ý½Ó¿Ú½øÐеģ¬½Ó¿ÚÏòÓû§ÌṩÁËÒ»¸ö¶ÔÓÚËùÓÐÀàÐ͵ÄÍøÂçÓ²¼þÒ»Ö»¯µÄ²Ù×÷¼¯ºÏ¡£LinuxÄÚºËÌṩµÄÍ³Ò»ÍøÂçÉ豸½á¹¹Îªnet_device£¬´Ë½á¹¹ÌåλÓÚÍøÂçÇý¶¯²ãµÄºËÐĵØÎ»¡£

¡¡¡¡net_device ÖÐÓкܶ๩ϵ·ÃÎʺÍЭÒé²ãµ÷ÓõÄÉ豸·½·¨£¬ÆäÖаüÀ¨£º
¡¡¡¡%26#183; dev-%26gt;open£º´ò¿ªÉ豸¡£open·½·¨Ó¦µ±×¢²áÍøÂçÉ豸ÐèÒªµÄÈκÎϵͳ×ÊÔ´( I/O ¿Ú£¬IRQ£¬ DMAµÈ)£¬´ò¿ªÓ²¼þ£¬½øÐÐÉ豸ҪÇóµÄÆäËûÉèÖá£
¡¡¡¡%26#183; dev¡ª%26gt;stop£ºÍ£Ö¹É豸¡£ ¸Ãº¯ÊýÓ¦µ±»Ö¸´ÔÚ´ò¿ªÊ±½øÐеIJÙ×÷¡£
¡¡¡¡%26#183; dev-%26gt;hard_start_xmit£º·¢Ëͱ¨ÎÄ¡£
¡¡¡¡%26#183; dev-%26gt;tx_timeout£º·¢Ëͳ¬Ê±µ÷Óõķ½·¨,ËüÓ¦µ±´¦ÀíÕâ¸öÎÊÌâ²¢»Ö¸´±¨ÎÄ·¢ËÍ¡£
¡¡¡¡%26#183; dev-%26gt;set_mac_address£ºÐÞ¸ÄÍøÂçµÄÓ²¼þMACµØÖ·¡£

¡¡¡¡ÍøÂçÇý¶¯¾ÍÊÇҪʵÏÖÕâЩ¾ßÌåµÄÉ豸·½·¨¡£

¡¡¡¡É豸³õʼ»¯
¡¡¡¡ÍøÂçµÄ³õʼ»¯ÊÇÉ豸¹¤×÷µÄµÚÒ»²½¡£µ±ÏµÍ³¼ÓÔØÍøÂçÇý¶¯Ä£¿éµÄʱºò£¬¾Í»áµ÷Óóõʼ»¯¹ý³Ì¡£Ê×ÏÈÀûÓú¯Êýrequest_mem_regionÓ³ÉäDM9000AµÄÊý¾Ý¡¢µØÖ·¶Ë¿Ú£¬Í¨¹ýdmfe_probeº¯Êý¼ì²âÍøÂçÎïÀíÉ豸ÊÇ·ñ´æÔÚ£¬¼ì²âDM9000AÄÚ²¿´®ÐÐNICµÄÖµÊÇ·ñÕýÈ·£¬È»ºóÔÙ¶ÔÉ豸½øÐÐ×ÊÔ´ÅäÖ㬹¹ÔìÉ豸µÄnet_deviceÊý¾Ý½á¹¹¡£°üÀ¨Ò»Ð©µÍ²ãÓ²¼þÐÅÏ¢£ºbase_addr(ÍøÂç½Ó¿ÚµÄ I/O »ùµØÖ·)£¬irq(°²ÅŵÄÖжϺÅ)µÈ¡£

¡¡¡¡´ò¿ªÉ豸ºÍ¹Ø±ÕÉ豸
¡¡¡¡open·½·¨ÔÚÍøÂçÉ豸±»¼¤»îµÄʱ±»µ÷Ó㬾ßÌåDM9000AµÄÓ²¼þ³õʼ»¯¹¤×÷·Åµ½ÕâÀïÀ´×ö¡£¶ÔÓÚDM9000AÐèÒªÍê³ÉµÄ³õʼ»¯°üÀ¨£º¶ÔDM9000AÄÚ²¿Éϵ磬Èí¼þ¸´Î»£¬Í¨¹ýNCR¼Ä´æÆ÷ÉèÖÃÍøÂ繤×÷ģʽ,¿ÉÒÔÑ¡ÔñÉèÖÃÄÚ²¿»òÕßÍⲿPHY¡¢È«Ë«¹¤»òÕß°ëË«¹¤Ä£Ê½¡¢Ê¹ÄÜ»½ÐÑʼþµÈÍøÂç²Ù×÷£¬¶ÔRX£¯TXÖжÏʹÄÜ£¬Ê¹ÄÜÊý¾Ý½ÓÊÕ¹¦ÄÜ¡£µ÷ÓÃrequest_irq()ÉêÇëÖжϺŵǼÇÖжϴ¦Àíº¯Êý£¬µ÷ÓÃnetif_carrier_onÕì²âÁ¬½Ó״̬¡£

¡¡¡¡Æô¶¯¶¨Ê±Æ÷£¬µ÷ÓÃnetif_start_queue¼¤»îÉ豸·¢ËͶÓÁС£
¡¡¡¡ÕâÀï¶ÔDM9000AµÄÖжÏÉè¼Æ×öÁËÒ»¸öÌØÊâ´¦Àí£ºÍ¨³£AT91RM9200Ìṩ×î¶à32¸öÖжÏÔ´£¬Ä¬ÈÏÌṩ7¸öÍⲿÖжÏÔ´£¬µ«¶ÔÓڽϸ´ÔÓµÄǶÈëʽϵͳ£¬¿ÉÄÜ»áÃæÁÙÖжÏÔ´²»¹»ÓõÄÇé¿ö¡£ÓÉÓÚAT91RM9200µÄPIO¿ÉÒÔʵÏÖ¹¦Äܸ´Óã¬Òò´Ë¿ÉÒ԰ѶàÓàµÄIOÒý½ÅÅäÖÃΪ¿ÉÓõÄÖжÏÔ´¡£¹Ê±¾ÏµÍ³ÖУ¬Éè¼ÆDM9000AÖжÏÔ´ÓëAT91RM9200ÍⲿI/O¿ÚPD8Òý½ÅÏàÁ¬¡£Ò»¸öPIO¶Ë¿ÚµÄ32¸öÒý½Å¹²ÏíÒ»¸öÖжÏID£¬Ö»ÐèÒªÔÚÖжÏ״̬¼Ä´æÆ÷ÖÐÇø·Ö¾ßÌåÄĸöÒý½ÅÒýÆðÖжϣ¬È»ºóתÏòÌØ¶¨µÄÖжϴ¦Àíº¯ÊýÖ´ÐвÙ×÷£¬¾Í¿ÉÒÔʵÏÖÖжϴ¦Àí¡£

¡¡¡¡closeËù×öµÄ¹¤×÷ºÍopenÏà·´£¬Ö÷ÒªÊÍ·Åopen»ñµÃµÄ×ÊÔ´£¬ÒÔ¼õÉÙϵͳ¸ºµ£¡£

¡¡¡¡Êý¾Ý°ü·¢ËÍ
¡¡¡¡Êý¾Ý°üµÄ·¢ËͺͽÓÊÕÊÇʵÏÖLinuxÍøÂçÇý¶¯³ÌÐòÖÐÁ½¸ö×î¹Ø¼üµÄ¹ý³Ì£¬¶ÔÕâÁ½¸ö¹ý³Ì´¦ÀíµÄºÃ»µ½«Ö±½ÓÓ°Ïìµ½Çý¶¯³ÌÐòµÄÕûÌåÔËÐÐÖÊÁ¿¡£

¡¡¡¡Êý¾Ý´«Êäͨ¹ýhard_start_xmitº¯ÊýʵÏÖ£¬Ê×ÏȰѴæ·ÅÔÚÌ×½Ó×Ö»º³åÇøÖеÄÊý¾Ý·¢Ë͵½ÍøÂçоƬDM9000AÄÚ²¿µÄTX FIFO SRAMÖУ¬¸Ã»º³åÇøÊÇÓÉÊý¾Ý½á¹¹sk_buff±íʾ£¬°ÑÒª´«Ë͵ÄÊý¾Ý³¤¶ÈдÈëDM9000AÖеĴ«Êä°ü³¤¶È¼Ä´æÆ÷TXPLLºÍTXPLHÖС£È»ºóʹÄÜ´«Êä¡£Èç¹ûÊý¾Ý·¢Ëͳɹ¦£¬Ôò»á´¥·¢Ò»´ÎÖжϡ£

¡¡¡¡Êµ¼ÊÖлá³öÏÖ¶à¸öÊý¾ÝÖ¡´«Ê䣬ÐèÒª¿¼ÂÇ×ö²¢·¢´¦Àí¡£ÔÚ·¢ËÍʱ¼ì²â´«Êä¶ÓÀýÔÝʱÂúÔØÊ±¾ÍҪͨ¹ýnetif_stop_queueÀ´ÔÝÍ££¬µ±·¢ËÍÍê³É´¥·¢Öжϴ¦Àíʱ£¬µ÷ÓÃnetif_wake_queueº¯ÊýÀ´ÖØÐÂÆô¶¯´«Êä¶ÓÀý¡£

¡¡¡¡ÍøÂç´«ÊäÓÉÓÚϵͳæ»òÓ²¼þµÄÎÊÌâ·¢ÉúÑÓ³Ù£¬Ôò»áµ÷Óô«Ëͳ¬Ê±´¦Àíº¯Êýtx_timeout£¬¶ÔÓ²¼þ¸´Î»²Ù×÷¡£
Êý¾Ý°ü½ÓÊÕ
¡¡¡¡Êý¾Ý°üµÄ½ÓÊÕÊÇͨ¹ýÖжϴ¦Àí£¬µ±ÓÐÊý¾Ýµ½´ïʱ£¬¾Í²úÉúÖжÏÐźţ¬ÍøÂçÉ豸Çý¶¯¹¦Äܲã¾Íµ÷ÓÃÊý¾Ý°ü½ÓÊÕ³ÌÐòÀ´´¦ÀíÊý¾Ý°üµÄ½ÓÊÕ£¬È»ºóÍøÂçЭÒé½Ó¿Ú²ãµ÷ÓÃnetif_rxº¯Êý°Ñ½ÓÊÕµ½µÄÊý¾Ý°ü´«Êäµ½ÍøÂçЭÒéµÄÉÏ²ã½øÐд¦Àí¡£

¡¡¡¡DM9000A½ÓÊÕ»º´æÇøÖеÄÿ֡Êý¾ÝÓÉ4×Ö½Ú³¤µÄÊײ¿¡¢ÓÐЧÊý¾ÝºÍCRCУÑéÐòÁй¹³É¡£Êײ¿4×Ö½ÚÒÀ´ÎÊÇ01H¡¢ÒÔÌ«ÍøÖ¡×´Ì¬¡¢ÒÔÌ«ÍøÖ¡³¤¶ÈµÍ×ֽںͳ¤¶È¸ß×Ö½Ú£¬Êý¾Ý°ü½ÓÊÕ³ÌÐòÊ×Ïȼì²âÈç¹ûµÚÒ»¸ö×Ö½ÚÊÇ01H£¬Ôò˵Ã÷ÓÐÊý¾Ý£»Èç¹ûÊÇ00H£¬Ôò˵Ã÷ÎÞÊý¾Ý£¬ÐèÒª½øÐи´Î»¡£È»ºóµ÷Óú¯Êýdev_alloc_skbÉêÇëÒ»¿ésk_buff½á¹¹»º³åÇø£¬´ÓDM9000A¶Á³öÊý¾Ý·ÅÖõ½»º³åÇøÀ¸ù¾Ý»ñÈ¡µÄ³¤¶ÈÐÅÏ¢£¬ÅжÏÊÇ·ñ¶ÁÍêÒ»Ö¡¡£Èç¹û¶ÁÍ꣬½Ó×ŶÁÏÂÒ»Ö¡£¬Ö±µ½Óöµ½Ê××Ö½ÚÊÇ00HµÄÖ¡£¬ËµÃ÷½ÓÊÕÊý¾ÝÒѶÁÍê¡£½ÓÏÂÀ´Ìî³äsk_buffÖеÄһЩÐÅÏ¢£¬Ê¹Ö®³ÉΪ¹æ·¶µÄsk_buff½á¹¹£¬×îºóµ÷ÓÃnetif_rx()º¯Êý½«½ÓÊÕµ½µÄÊý¾Ý´«Êäµ½ÍøÂçЭÒéµÄÉϲ㡣

½áÓï

¡¡¡¡¸ÃÉè¼Æ³É¹¦ÓÃÓÚÄ³ÍøÂç²âÊÔÉ豸µÄÖ÷¿ØÄ£¿éÉÏ£¬¿ÉÒÔͨ¹ýÒÔÌ«Íø½ÓÈëInternet£¬´Ó¶øÊµÏÖ´ÓInternetÉÏ¼à¿ØÇ¶ÈëʽÉ豸¡£

²Î¿¼ÎÄÏ×£º

1. Davicom Corporation,DM9000A Application Notes V1.20, 2005
¡¡¡¡2. Lessandro Rubini,Jonathan Corbet. Linux Device Drivers, second edition£¬O¡¯Reilly %26amp; Associates,2002
3. Àî·½¾ü¡¢½ðì¿¶«£¬Ç¶ÈëʽLinuxÍøÂçÇý¶¯³ÌÐòµÄÑо¿ÓëʵÏÖ£¬ÏÖ´úµç×Ó¼¼Êõ£¬2005£¬16

4. Atmel Corporation, AT91RM9200 Datasheet, version E, 2005


£¡×¢Ò⣺Èç¹ûÄú·¢ÏÖ´ËÎÄÕ³öÏÖÓ°ÏìÄúµÄÔĶÁµÄ×´¿ö£¬Çë´Óä¯ÀÀÆ÷µØÖ·À¸Àï¸´ÖÆ±¾ÎĵÄÁ´½Óµ½ÁôÑÔ±¾±¨¸æ¸øÕ¾³¤½â¾ö£¡
  • ÉÏһƪ£º NVIDIA¹«Ë¾·ñÈÏÆäÏÔ¿¨È±ÏÝÑ꼰̨ʽоƬ
  • ÏÂһƪ£º DSPÈí¼þÏò×ÀÃæºÍǶÈëʽϵͳÌôÕ½

  • >> ÁªÏµÎÒÃÇÇë¸øÎÒÃÇÁôÑÔ¡¤ÁôÑÔ±¾
    ±¾Õ¾ËùÓÐÌṩµÄÐÅÏ¢Èí¼þ×ÊÁϾùÀ´×ÔÍøÂç,°æÈ¨¼°Öø×÷Ȩ¹éÔ­×÷ÕßËùÓÐ,Èç¹ûÎÞÒâÖÐÇÖ·¸ÁËÄúµÄÏà¹ØÈ¨Àû»ò´¥¼°·¨ÂÉ·¨¹æ,Çë¸øÎÒÃÇÁôÑÔ, ÎÒÃǽ«ÔÚ24СʱÄÚɾ³ý¡£
      ÕãICP±¸05071687ºÅ  µç×Ó¼¼Êõ¾«Æ·Íø