ºìÁªLinuxÃÅ»§
Linux°ïÖú

Linux ÄÚºË Simulator Framework ÈëÃÅ

·¢²¼Ê±¼ä:2005-12-16 09:41:23À´Ô´:ºìÁª×÷Õß:zz123
Device Simulator Framework£¨DSF£©ÎªÄúµÄËùÓÐÉ豸ÌṩÁËÒ»¸öÒ×ÓõÄÊäÈëÊä³ö¿ØÖÆ (ioctl) ½Ó¿Ú£¬ÎÞÂÛÕâЩÉ豸ÊÇ·ñȷʵ´æÔÚ¡£¶ÔÄÇЩ¾­Ñé·á¸»µÄÄں˺ÍÉ豸Çý¶¯³ÌÐòÈí¼þ¿ª·¢ÈËÔ±¶øÑÔ£¬DSF Èõ÷ÊԺͲâÊÔÉ豸´úÂë±äµÃ¸üÈÝÒ×£¬¶øÕâЩ¹¤×÷Èç¹ûûÓÐ DSF ½«ÄÑÒÔ½øÐÐÄ£ÄâºÍÔÙÏÖ¡£

Ϊ Linux Äں˴´½¨²âÊÔÓÃÀýÏ൱¼òµ¥£»Í¨³£ÒªÃ´ÒªÇóÌض¨µÄ·¶Î§£¬ÒªÃ´ÒªÇó¹ã·ºµÄ·¶Î§¡£²»¹ý£¬µ±ÔÚÓû§¿Õ¼ä½øÐвâÊÔʱ£¬ÓÐһЩÌØÊâÇé¿ö¿ÉÄܺÜÄѲâÊÔ¡£ºÜÉÙÖ´ÐеķÖÖ§´úÂë¡¢²»´æÔÚµÄÉ豸ÒÔ¼°´íÎ󷾶´úÂëµÈÄÑÒÔ²âÊÔ¡£

Device Simulator Framework£¨DSF£©¿ÉÒÔ½â¾öÕâÒ»ÎÊÌ⣬ËüÓµÓÐÒ»¸öÄں˿ռ䵽Óû§¿Õ¼äµÄÊäÈëÊä³ö¿ØÖƽӿڣ¬ÈòâÊÔÓÃÀý¿ª·¢ÈËÔ±¿ÉÒÔÖ´ÐÐÄں˵ÄÌض¨Ä¿±êÇøÓò¡£µ±É豸¿ÉÄܲ»´æÔÚʱ£¬DSF ÌرðÓÐÖúÓÚÖ´ÐÐÉ豸Çý¶¯³ÌÐòÄں˴úÂë¡£ËäÈ» DSF ²»ÄÜÈ¡´úÕæÕýµÄÉ豸²âÊÔ£¬µ«ÊÇËü¿ÉÒÔÔںܴó³Ì¶ÈÉÏ°ïÖúÄúµ÷ÊԺͲâÊÔÇý¶¯³ÌÐò´úÂë¡£

DSF »¹¿ÉÒÔ¼Ó¿ì²âÊÔÓÃÀýµÄ¿ª·¢£¬ÒòΪÄú²»±ØȥѧϰÓÃÓÚÓû§/Äں˿ռäͨÐŵÄÊäÈëÊä³ö¿ØÖƽӿڡ£

µ½Ä¿Ç°ÎªÖ¹£¬Ö»Ö§³Ö×î½ü·¢²¼µÄ Linux 2.5.xx µ½µ±Ç°µÄ 2.6.xx Ö®¼äµÄÄں˰汾¡£ ÈëÃÅ
Ê×ÏÈ£¬ÎÒ½¨ÒéÄúÏÂÔØÕû¸ö Linux Test Project (LTP) ²âÊÔÌ×¼þ£¬ÆäÖаüÀ¨ DSF ´úÂë¡£Linux Test Project ÊÇ IBM Linux Technology Center (LTC) ÓëÆäËûһЩ×éÖ¯ºÏ×÷µÄÏîÄ¿£¨Çë²ÎÔÄ ²Î¿¼×ÊÁÏ ÖеÄÁ´½Ó£©¡£

½âѹ´æµµÎļþºó£¬Äú½«ÔÚ testcases/kernel/device-drivers/dev_sim_framework Ŀ¼ÏÂÕÒµ½Óû§/ÄÚºËÄ£°å²âÊÔ´úÂë¡£±àÒë LTP ²âÊÔÌ×¼þ²¢°²×°Ëü£¬È»ºóÇл»µ½ DSF Ŀ¼¡£½øÈë DSF Ŀ¼ºó£¬Äú½«¿´µ½ kernel_space Ŀ¼ºÍ user_space Ŀ¼¡£ÏàÓ¦µÄÄÚºËÄ£¿éºÍÓû§¿Õ¼äÎļþ·Ö±ðÔÚÕâÁ½¸öĿ¼ÖС£Çл»µ½ÕâÁ½¸öĿ¼²¢ÔËÐÐ make À´±àÒëÄ£°å¡£

ʹÓÃÄ£°å
Ä£°å±àÒëÍê³Éºó£¬ÔÚÖ´ÐÐÓû§¿Õ¼ä´úÂë֮ǰÄú¿ÉÒÔÓà insmod »ò modprobe À´¼ÓÔØÄÚºËÄ£¿é¡£Çл»µ½ user_space Ŀ¼£¬Ö´ÐÐÓû§¿Õ¼ä´úÂë¡£ÓÉÓÚÄ£°åÖ»ÊÇÓëÒѾ­×¢²áµÄÄÚºËÄ£¿éͨÐŲ¢·µ»Ø£¬ËùÒÔÓû§´úÂ뽫ÔËÐв¢Ñ¸ËÙ·µ»Ø½á¹û¡£

ÐÞ¸ÄÄ£°åÀ´Ö´ÐÐÆÚÍûµÄÄں˴úÂëÏà¶ÔÒ²±È½Ï¼òµ¥¡£²»¹ý£¬»¹ÊÇÐèҪһЩÄں˱à³ÌµÄ֪ʶ¡£EXPORT_SYMBOL ±êÇ©ÄÚ¶¨ÒåµÄº¯Êý¶ÔÈ«²¿Äں˴úÂ빫¿ª£¬²»ÓÃÐÞ¸ÄÄں˴úÂë¾Í¿ÉÒÔÔÚÄúµÄÄÚºËÄ£¿éÖÐÖ±½Óµ÷Óá£Äú»¹¿ÉÒÔÊÖ¹¤ÐÞ¸ÄÄÚºËÔ´´úÂëÀ´µ¼³öÁíÍâµÄº¯Êý£¬ÓÃÓÚÖØбàÒë²¢¼ÓÔØÐÂÄں˺óµÄ²âÊÔ¡£ DSF Ó¦ÓÃ
ÏÂÃæµÄ´úÂëÊÇÒ»¸öÈçºÎʵÏÖÉ豸ÀàÐͲâÊÔµÄÀý×Ó£º

Çåµ¥ 1. ÐéÄâÉ豸´úÂë

¡¡ switch(cmd) {
¡¡¡¡ case LTP_OPTION1: rc = test_option(); break;
¡¡¡¡ case PCI_ENABLE:¡¡rc = pci_enable(); break;
¡¡¡¡ default:
¡¡¡¡¡¡printk("Mismatching ioctl command\n");
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ break;
¡¡¡¡¡¡¡¡¡¡ }

¡¡ .
¡¡ .
¡¡ .

¡¡ /*
¡¡ * pci_enable
¡¡ *¡¡enable a pci device so that it may be used in
¡¡ *¡¡later testing in the user test program
¡¡ */

¡¡ static int pci_enable() {
¡¡ int rc = 0;
¡¡ struct pci_dev *dev = ltp_pci.dev;

¡¡ /* check if can enable the device pointer */
¡¡ if(!dev) {
¡¡¡¡ printk("tpci: dev is NULL\n");
¡¡¡¡ return 1;
¡¡ }

¡¡ if( pci_enable_device(dev) ) {
¡¡¡¡ printk("tpci: failed to enable pci device\n");
¡¡¡¡ rc = 1;
¡¡ }

¡¡ else {
¡¡¡¡ printk("tpci: enabled pci device\n");
¡¡¡¡ rc = 0;
¡¡ }

¡¡ return rc;
¡¡ }

Õâ¸öÀý×ÓÆôÓÃÁËÒ»¸öµ÷Óà pci ÄÚºË API µÄ¡°ÐéÄâµÄ¡±PCI É豸¡£Õâ¸öÐéÄâµÄÉ豸»¹¿ÉÒÔÓÃÓÚÆäËû²âÊÔ¡£

½áÊøÓï
Èç¹ûÄúÊÇһλ¾ßÓÐÒ»¶¨¾­ÑéµÄ Linux Äں˺ÍÉ豸Çý¶¯³ÌÐò¿ª·¢ÈËÔ±£¬Ê¹Óà DSF ½«ÈÃÄúË«ÖØÊÜÒ棺ÓÉÓÚ DSF Ä£°å¿ÉÒÔÓÃÓںܶ಻ͬµÄ²âÊÔ£¬ËùÒÔÄú¿ÉÒÔ¸ü¿ìµØ¿ª·¢²âÊÔÓÃÀý²¢±£Ö¤Æä¸ü¼ÓÒ»Ö¡£¶øÇÒ£¬Äú»¹¿ÉÒÔÖ´ÐÐÄں˵ÄÌض¨Ä¿±êÇøÓò£¬ÕâÑùµäÐ͵ÄÓû§¿Õ¼ä²âÊÔÓÃÀýÖ´ÐÐÄں˴úÂëʱ¾Í²»»áÔÙÂþÎÞÄ¿µÄ¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 1 ÌõÆÀÂÛ

  1. suo2800 ÓÚ 2006-07-13 21:16:55·¢±í:

    ·Ç³£µÄºÃ