»ùÓÚARM9µÄǶÈëʽLinuxϵͳÑо¿¼°É豸Çý¶¯³ÌÐòµÄ¿ª·¢£¨À¼ÖÝÀí¹¤(4)

2019-03-27 20:21

µÄCRAMFS£¬¶øÔÚ¸ùÎļþϵͳÏÂÎÒÃÇ»¹¿ÉÒÔ¹ÒÔØÒ»¸ö¿É¶ÁдµÄYAFFS2Îļþϵͳ¡£ÕâÑù¼È¿ÉÒÔÌá¸ß´æ´¢É豸µÄÀûÓÃÂÊ£¬ÓÖ¿ÉÒÔ±£Ö¤Êý¾ÝµÄÕý³£¶ÁÈ¡¡£YAFFS2£¨Yet Another nandFlash FileSytem2£©ÊÇרÃÅÕë¶ÔNandFlashÉ豸µÄÒ»ÖÖÎļþϵͳ¡£ËäÈ»YAFFS2ÀàËÆÓÚJFFS/JFFS2Îļþϵͳ£¬µ«ÓÉÓÚ²ÉÓÃÁËÔöÇ¿µÄË鯬ÕûÀí»úÖÆºÍ¾ùºâÄ¥Ëð¼¼Êõ£¬²»µ«ËüµÄ¶ÁдËٶȽÏJFFS/JFFS2ÓкܴóµÄÌá¸ß£¬ÆäʹÓÃÊÙÃüºÍÎȶ¨ÐÔ¿É¿¿ÐÔÒ²ÓкܴóµÄÌáÉý¡£ÕâʹµÃ¸ÃÎļþϵͳ¿ÉÒÔÔÚ´óÈÝÁ¿Ð¾Æ¬Öеõ½ÍƹãʹÓá£ËùÒÔ˵YAFFSÎļþϵͳ¾ßÓкܴóµÄÓÅÊÆºÍ·¢Õ¹Ç±Á¦¡£3.4.1½¨Á¢¸ùÎļþϵͳLinuxÄÚºËÆô¶¯ÒԺ󣬻á²ÎÊýlinux_cmd_lineµÄÒýµ¼¶øÌø×ªµ½¸ùÎļþϵͳµÄÈë¿ÚµØÖ·£¬À´Íê³ÉÎļþϵͳµÄ³õʼ»¯ºÍ¹ÒÔØÈÎÎñ¡£¸ùÎļþµÄÖÆ×÷·½·¨·ÖΪÁ½ÖÖ£ºÒ»ÊÇ×Ô¼ºÊÖ¶¯½¨Á¢£»¶øÊÇʹÓÃһЩ¿ª·¢Ì×¼þÀ´ÊµÏÖ¸ùÎļþϵͳµÄ¿ìËÙ½¨Á¢¡£ÊÖ¶¯½¨Á¢ÔÚµ÷ÊÔ¹ý³ÌÖлá±È½ÏÂé·³£¬±¾Æ½Ì¨Ê¹ÓÃÒ»¸ö¿ª·¢Ì×¼þÀ´°ïÖúÍê³É»ù±¾ÎļþϵͳµÄ½¨Á¢¡£Busybox¾ÍÊÇÕâÑùµÄÒ»ÖÖ¿ª·¢Ì×¼þ£¬Æä±¾ÉíÊÇÓÉBruce Perens·¢ÆðµÄÒ»Ïî¼Æ»®£¬±¾À´ÊÇÓÃÀ´Ð­ÖúDebianÔÚ·¢ÐÐÌ×¼þÖÐÓÃÀ´½¨Á¢°²×°´ÅÅÌ¡£µ«ÓÉÓÚBusybox²»½öСÇɶøÇÒÓкÜÇ¿´óµÄ¹¦ÄÜ£¬µ¼ÖÂÁËÆäÔÚǶÈëʽϵͳÖÐÓ¦Óù㷺¡£¾ßÌåµÄ·½·¨ÊÇ£ºÊ×ÏÈÏÂÔØBusybox³£ÓõĿɿ¿°æ±¾£¨www.busybox.net£©£¬½âѹºóÀàËÆÓÚÄں˵ÄÅäÖùý³Ì£¬Ö±½Óµ½ÏàÓ¦µÄĿ¼ÖÐÖ´ÐÐmake menuconfigÃüÁ´Ó¶ø¿ÉÒÔ½øÈëBusyboxÅäÖýçÃæ£¨Õâ¸ö½çÃæÀàËÆÓÚÄÚºËÅäÖÃͼ£©¡£ÔÚAppletsÏÂÃæÑ¡ÔñÊÊºÏÆ½Ì¨µÄÃüÁȻºóÍ˳ö±£´æ¡£Æä´ÎÊÇÖ´ÐÐmake£¬make install¡£Õâʱ¾Í»áÔÚBusyboxµÄĿ¼ÏÂÉú³É_installĿ¼£¬Õâ¸öĿ¼¾ÍÒѾ­°üº¬ÁËÅäÖúõÄÃüÁ¾ß°ü¡£±¾Æ½Ì¨ÖÐÖ»Òª°ÑÕâ¸öĿ¼¿½±´µ½¹¤×÷Ŀ¼£¬²¢ÇÒ¸üÃûΪrootfs¡£ÕâÑùÎÒÃǾÍÔÚ¸ÃĿ¼µÄ»ù´¡ÉϽ¨Á¢Á˸ùÎļþϵͳ¡£ÔÚrootfs/Ï£¬Ê×ÏÈÔÚ/rootfs/devϽ¨Á¢±ØÐëµÄÉ豸Îļþ¡£¹ØÓÚÉ豸µÄ½¨Á¢£¬¿ÉÒԲο¼Filesystem Hierarchy StandardÀ´È·¶¨ÐèÒªµÄÄÄЩÉ豸Îļþ£¬ÏÂÒ»²½¾ÍÊÇÍê³É/rootfs/etcÕâ¸öĿ¼ÏµÄ3¸ö±È½ÏÖØÒªµÄÎļþinittab,fstab,init.d/rcS(»òÕßÊÇrc.d/rc.sysinit,Õâ¸öÓÉinittab¾ö¶¨)¡£×îºó£¬¼ÓÈëÐèÒªµÄÁ´½Ó¿âÎļþ¾Í¿ÉÒÔÁË¡£µ«ÊÇÕⲿ·ÖµÄʵÏÖÊDZȽϷ±ËöµÄ£¬ÒòΪ×ßµ½ÕâÒ»²½Ê±£¬ÎÒÃǶÔÓÚÓ¦ÓÃÖе½µ×ÐèÒªÄÄЩ¾ßÌåµÄ¿âÎļþ²¢²»ÊǺÜÇå³þ£¬Õâ

»ùÓÚARM9µÄǶÈëʽLinuxϵͳÑо¿¼°É豸Çý¶¯³ÌÐòµÄ¿ª·¢28¾Íµ¼ÖÂÁËÎÒÃÇÖÆ×÷µÄÎļþϵͳµÄ´óС²¢²»ÊÇÌ«ºÃ¿ØÖƵġ£¶øÍ¨³£Çé¿öÏÂÕâÀïÓÐÁ½ÖÖ¾­ÑéÐԵĴ¦Àí·½·¨£ºÒ»ÊDzÉÓÃreadelfÕâ¸ö¹¤¾ß°üÀ´ÕÒ³öÁ´½Ó¿â£»¶þÊDzο¼linuxÏà¹ØÍøÕ¾ÉÏËùÌṩµÄÎļþϵͳ£¬À´½øÒ»²½È·¶¨ÎÒÃÇÆ½Ì¨ÖÐËùÐèÒªµÄÁ´½Ó¿âÎļþ¡£3.4.2ÖÆ×÷YAFFS2Îļþϵͳ¸ùÎļþϵͳ×öºÃºó£¬¿ÉÒÔͨ¹ýNFS£¨http://nfs.sourceforge.net/nfs-howto/£©À´²âÊÔÎļþϵͳÊÇ·ñ¿ÉÐУ¬×îºóÎÒÃÇÒª°ÑÕâ¸öÎļþϵͳÉÕ½øÄ¿±ê°å¡£¿ÉÒÔÓÐÁ½ÖÖ·½Ê½À´Ó¦ÓÃYAFFS2Îļþϵͳ£¬Ò»ÊÇCRAMFS+YAFFS2µÄ×éºÏ£¬Ò»ÖÖÊÇ´¿YAFFS2Îļþϵͳ¸ñʽ¡£ÔÚ±¾Æ½Ì¨ÖÐÄں˺͸ùÎļþϵͳµÄÓ¦ÓÃÊ®·ÖÎȶ¨£¬ËùÒÔ´Ó½ÚÊ¡¿Õ¼ä¡¢½µµÍ³É±¾¡¢±£»¤ÏµÍ³µÄ½Ç¶ÈÀ´¿´£¬Ñ¡ÓÃCRAMFSÕâÖÖ¸ßѹËõÂÊ¡¢Ö»¶ÁÎļþϵͳ£¬¾ßÓкܴóµÄÏÖʵÒâÒå[45]¡£¶ÔÓÚCRAMFSÖ»¶ÁÎļþϵͳ£¬ÎÒÃDzÉÓÃmkcramfs/rootfs~/root.imgÕ⼸¸öÃüÁîÀ´Éú³Écramfs¾µÏñ£¬¶ø/rootfs±¾Éí¾ÍÊÇ֮ǰ½¨Á¢ºÃµÄĿ¼£¬~/root.img×÷ΪÉú³É¾µÏñµÄÖ¸¶¨±£´æÄ¿Â¼À´Óá£ÓÉÓÚYAFFS2Îļþϵͳ¾ÍÊǸù¾ÝNandFlashÉ豸À´Éè¼ÆµÄ£¬¶øÔÚ±¾ÎĵÄÓ¦ÓÃÖÐÎļþϵͳǡºÃÉèÖóɴÓNandFlashÖÐÆô¶¯µÄ£¬Õâ¾ÍÐèÒªÎÒÃÇÔÚÄÚºËÖмÓÈëÖ§³ÖNandFlashÆô¶¯µÄÉ豸Çý¶¯´úÂ룬²¢ÔÚarch\\arm\\mach-s3c2410\\devs.cÎļþÖÐÌí¼ÓÓйØNandFlash·ÖÇøµÄ´úÂë¡£ÔÚ±¾Æ½Ì¨Öн«NandFlash·ÖΪbootloader¡¢kernel¡¢rootÈý¸ö±Ë´ËÏàÁ¬µÄ·ÖÇø¡£ÏÂÃæÊǾßÌåµÄÖ´Ðйý³Ì£ºÔÚÏàÓ¦µÄÍøÕ¾ÖÐÏÂÔØYAFFS2£¨GPL£©Ô´Â룬Ê×ÏȽâѹºóÔÚYAFFS2Ŀ¼ÏÂÖ´ÐУºpatch-ker.sh~/Linux2.6.29.5ÃüÁÕâÑù¾Í¿ÉÒÔÔÚÏàÓ¦µÄĿ¼ÖвúÉúYAFFS2Ŀ¼¡£¶øÏÂÒ»²½¾ÍÊÇÔÚ¸ÃĿ¼ÏÂÖ´ÐÐmake menuconfigÃüÁîÀ´ÔÚÄں˵ÄÅäÖÃÏàÓ¦µÄÇý¶¯³ÌÐò£¬µÈµ½ÕâЩ¶¼Ë³ÀûÍê³ÉÖ®ºó±£´æÍ˳öÉèÖá£Æä´ÎÖ´ÐÐmakeÃüÁMake½áÊøºó¾ÍÉú³ÉÁËÒ»¸öÓйÒÔØyaffs2ÎļþϵͳÄÜÁ¦µÄÄں˾µÏñ¡£¶øÔÚUbootÔ´ÎļþÖУ¬½«NandFlash·Ö³É¼¸¸ö·ÖÇø£¬´ËʱÕâÀïµÄ

·ÖÇø±ØÐëºÍÇ°ÃæËùÌáµ½µÄdevs.cÎļþÀïµÄ·ÖÇø±£³ÖÒ»Ö£¬ÒòΪÄں˺ÍÎļþϵͳµÄµØÖ·¾ùÔÚÇ°Ãæ¶¼µ½È·ÈÏ£¬ËùÒÔ×îºóÆô¶¯Ê±Ò²»áµ½ÏàÓ¦µÄµØÖ·È¥Ñ°ÕÒÖ¸Áî¡£ÔÚ±¾Æ½Ì¨ÖУ¬ÎÒÃǽ«Flash·Ö³ÉUboot¡¢kernel¡¢root¡¢userËĸö·ÖÇø¡£ÆäÖÐCRAMFSÎļþϵͳ¹ÒÔØÓÚ¸ùĿ¼Ï£¬¶øYAFFS2Îļþϵͳ¹ÒÔØÓÚÓû§Ä¿Â¼Ï¡£ÔÚYAFFS2Ô´ÎļþµÄutilsĿ¼Ï£¬Ö´ÐÐmakeÃüÁî¾Í¿ÉÒÔÉú³Émkyaffs2image¾µÏñ¹¤¾ß£¬¶øÖ´ÐÐ./mkyaffs2imageÔò¿ÉÒÔÉú³Éyaffs2Îļþϵͳ¡£µ±È»Ò²¿ÉÒÔ½«YAFFS2×÷Ϊ¶¯Ì¬Ä£¿éÀ´±àÒëµ½ÄÚºËÖУ¬ÒòΪ¸ùÎļþϵͳÊÇCRAMFS¸ñʽ£¬Èç´ËÕâÑù¿ÉÒÔʹµÃÎļþϵͳ¸ü¼ÓÁé»î¡£Îļþϵͳ×îºóµÄÄ¿µÄ¾ÍÊÇÔÚÄÚºËÆô¶¯Íê³Éºó½øÐмÓÔØ£¬¶øÎļþϵͳ²»Ö¹Ò»ÖÖ¹ÒÔØ·½Ê½£¬¾ßÌåµÄ˵ÓÐÁ½ÖÖ·½Ê½£ºÊÖ¶¯ºÍ×Ô¶¯¹ÒÔØ¡£ÎļþµÄ¹ÒÔØÏÔÈ»ÊÇÒªÔÚÎÞÈ˵ÄÇé¿öÏÂ×Ô¶¯µÄ½øÐУ¬Õâ¾ÍÐèÒª¶Ô/etc/init.d/rcSµÄ½Å±¾½øÐб༭¡£ÔÚÕâ¸öÀïÃæ¿ÉÒÔ

À¼ÖÝÀí¹¤Ë¶Ê¿ÂÛÎÄ29¶Ôʱ¼ä½øÐÐÉèÖá¢ÅäÖý»»»·ÖÇø´óС¡¢²É¼¯Ö÷»úÃûµÈµÈ¡£µÈµ½½Å±¾¶¼ÉèÖÃÍê³ÉÖ®ºó£¬¾Í¿ÉÒÔ½«ÎļþϵͳÉÕдµ½ÏàÓ¦·ÖÇøÖÐÈ¥£¬µ½´Ë´¦ÎÒÃǾͳɹ¦µÄÌí¼ÓÁ˶ÔÓÚÎļþϵͳµÄÖ§³Ö¡£Í¼3.10ÎļþϵͳÅäÖÃͼ3.5±¾ÕÂС½á±¾ÕÂÖØµã½éÉÜÁËUbootºÍLinuxÄں˵ÄÒÆÖ²¹ý³Ì£¬²¢Õë¶Ô±¾Æ½Ì¨µÄ´¢´æ·½Ê½£¬¼ÓÈëÁËÏàÓ¦µÄÖ§³Ö´úÂë¡£²¢ÇÒÖÆ×÷ÁËÏàÓ¦µÄÎļþϵͳ£¬ÎªÏÂÒ»²½µÄÇý¶¯µÄ¿ª·¢Éè¼ÆÌṩÁ˿ɿ¿£¬Îȶ¨µÄÈí¼þƽ̨¡£

»ùÓÚARM9µÄǶÈëʽLinuxϵͳÑо¿¼°É豸Çý¶¯³ÌÐòµÄ¿ª·¢30µÚ4ÕÂÉ豸Çý¶¯É豸Çý¶¯³ÌÐòÊÇLinuxÄں˵ÄÖØÒª×é³É²¿·Ö,¿ØÖÆÁ˲Ù×÷ϵͳºÍÓ²¼þÉ豸֮¼äµÄ½»»¥¡£Ëüͨ¹ýÏòÓû§ÌṩÕë¶ÔϵͳӲ¼þµÄ±ê×¼»¯½Ó¿Ú£¬Ê¹µÃÓû§ÔÚ³ÌÐòÉè¼ÆµÄ¹ý³ÌÖв»ÐèÒªÌØ±ð¹Ø×¢É豸µÄ¹¤×÷ϸ½Ú¡£ÔÚLinuxϵͳµÄÔËÐÐ״̬ÖУ¬·ÖΪÈý²ã½á¹¹£¬¶¥²ãµÄÊÇÓû§²ãµÄÓ¦ÓóÌÐò£¬ÖвãÊÇÄں˵ÄÔËÐУ¬¶øµ×²ãÔòÊÇÉ豸Çý¶¯²ã£¬Äں˺ÍÇý¶¯½ôÃÜÏàÁ¬£¬ÈκÎÓû§²ãµÄÓ¦ÓóÌÐò£¬ÏëÒª¿ØÖƶÔÓ¦µÄÓ²¼þÉ豸£¬¶¼±ØÐëͨ¹ýÇý¶¯²ã²ÅÄÜʵÏÖ¡£4.1É豸Çý¶¯¼ò½éLinuxϵͳÖÐÉ豸һ°ã¿ÉÒÔ·ÖΪÈýÖÖÀàÐÍ£º×Ö·ûÉ豸¡¢¿éÉ豸ºÍÍøÂçÉ豸¡£ÎÄÖÐËùÉæ¼°µÄLCDÇý¶¯ÊôÓÚ×Ö·ûÐÍÉ豸Çý¶¯³ÌÐò¡£ÔÚ¶Ô×Ö·ûÉ豸·¢³ö¶Á¡¢Ð´ÇëÇóʱ£¬Êµ¼ÊµÄÓ²¼þI/OÒ»°ã¾Í½ô½Ó×Å·¢ÉúÁË¡£Linuxϵͳ·ÃÎÊÉ豸¾ÍÏñ·ÃÎÊÎļþÒ»Ñù£¬ÀýÈç´ò¿ª¹Ø±ÕÉ豸ϵͳµ÷ÓÃopen()ºÍclose()º¯Êý¡£É豸Çý¶¯µÄ¹¤×÷Á÷³ÌÊÇÕâÑùµÄ£ºÔÚ¼ÓÔØÊ±Ê×ÏÈÐèÒªµ÷ÓÃÈë¿Úº¯Êýinit_module()£¬ÕâÖ÷ÒªÊǽ«É豸µÄ¼Ä´æÆ÷ºÍ¿ØÖÆÆ÷½øÐгõʼ»¯ÉèÖ᣶øÕâ¸öÈë¿Úº¯ÊýÖÐ×îµäÐ͵Ä×Óº¯Êý¾ÍÊÇregister_chrdev()ºÍregister_blkdev()£¬Ç°ÕßÍê³ÉÏòÄÚºË×¢²á×Ö·ûÉ豸µÄÈÎÎñ£¬ºóÕßʵÏÖÁË¿éÉ豸ÔÚÄÚºËÖеÄ×¢²á¹ý³Ì¡£µ±ÕâЩÉ豸ÔÚÄÚºËÖÐ×¢²á³É¹¦ºó£¬ÏµÍ³»áÏòÕâ¸ö³É¹¦×¢²áµÄÉ豸·ÖÅäÖ÷É豸ºÅºÍ×Ô¶¨ÒåµÄ´ÎÉ豸ºÅ£¬Í¬Ê±»¹ÒªºÍÎļþϵͳ½¨Á¢ÆðÒ»¶¨µÄÁªÏµ¡£×Ö·ûÉ豸Çý¶¯ÔÚÏòLinuxÄÚºË×¢²áµÄ¹ý³ÌÖУ¬Ê×ÏÈÆä¶ÔÓ¦µÄÏòÁ¿±íchrdevs»áÌí¼Ódevice_structÕâ¸öÊý¾Ý½á¹¹£¬Í¬Ê±ÔÚ×¢²á³É¹¦Ê±£¬ÏµÍ³·ÖÅäµÄÉ豸±êʶ·û»á×÷ΪÕâ¸öÏòÁ¿±íµÄÖ¸Õë¡£¶ÔÓÚdevice_structÕâ¸öÕë¶ÔÉ豸µÄÊý¾Ý½á¹¹£¬ÆäÒ»°ãÓÉÁ½¸ö²¿·Ö×é³É£ºÒ»¸öÊÇÖ¸Ïò¸ÃÉ豸Ãû³ÆµÄ×Ö·ûÐÍÖ¸Õ룬ÁíÒ»¸öÊǶÔÓÚÕâ¸öÉ豸½øÐÐÎļþ²Ù×÷µÄÒ»×é·µ»ØÖµÎª²¼¶ûÐ͵ÄÖ¸Õë¡£¶ø¶ÔÓÚÕâЩÉ豸µÄÎļþ²Ù×÷Æäʵ¾Í´æÔÚÓÚÉ豸Çý¶¯³ÌÐòÖУ¬µ±ÐèÒª´ò¿ª¡¢¶ÁдÕâЩÉ豸µÄʱºò£¬¶¼Í¨¹ýÉÏÃæµÄÎļþ²Ù×÷À´ÊµÏֵġ£¶ø×¢²áµÇ¼ÇµÄ¹ý³Ì£¬Êµ¼ÊÉϾÍÊǽ«Ä£¿éËùÄÜʶ±ðµÄÎļþ²Ù×÷µ÷Óú¯ÊýºÍÉ豸Çý¶¯ÖеÄÉ豸½á¹¹ÌåÏà¹ØÁªÆðÀ´£¬ÐγÉÀàËÆÓڹܵÀµÄ¹¦ÄÜ¡£Ò»µ©ÕâÖÖ¹ØÏµ½¨Á¢ÆðÀ´£¬Äں˿ÉÒÔͨ¹ýÄ£¿éÓëÉ豸֮¼äµÄ¹ÜµÀ¹ØÏµ£¬ÊµÏÖ¶ÔÉ豸µÄ²Ù×÷¡£µ«ÊÇÕâ¸öʱºòÄں˺ÍÓ¦ÓóÌÐò²¢Ã»ÓÐÖ±½ÓµÄ½Ó¿Úº¯Êý£¬Ó¦ÓóÌÐòÖ»ÄÜͨ¹ýÔÚÎļþϵͳÖд´½¨½ÚµãµÄ·½Ê½£¬À´ºÍÉ豸Îļþ½á¹¹ÌåÐγɹØÁª¡£ÔÚLinuxÖÐϵͳÖÐͨ¹ýmknod()´´½¨Õë¶ÔÕâ¸öÉ豸µÄÎļþ½Úµã£¬ÕâÑùÓ¦ÓóÌÐò¾Í¿ÉÒÔͨ¹ýÎļþϵͳÀ´Ö±½Ó²Ù×÷ÍⲿÉ豸ÁË¡£ÕâҲʵÏÖÁËLinux¶ÔÉ豸µÄ¶Áд¾ÍÈçͬ¶ÔÎļþµÄ¶Áд¡£µ±É豸Çý¶¯Ð¶ÔصÄʱºò£¬Õâ¸ö¹ý³ÌºÍ¼ÓÔØµÄʱºò¸ÕºÃÏà·´£¬

À¼ÖÝÀí¹¤Ë¶Ê¿ÂÛÎÄ31Ê×ÏÈÓ¦ÓóÌÐòͨ¹ýÎļþϵͳÊ×ÏÈɾ³ýµô¶ÔÓ¦µÄ½Úµã£¬Ö®ºóÄں˻á¸ù¾Ý

É豸ºÅÀ´ÊÍ·ÅÆäÕ¼ÓõÄÓ²¼þ×ÊÔ´£¬À´ÊµÏÖ¶Ô¾ßÌåÉ豸µÄÐ¶ÔØ¹ý³Ì¡£ÏÂͼÊÇÉ豸Çý¶¯µÄ½á¹¹Í¼¡£Ó¦ÓóÌÐòÉ豸ÎļþÇý¶¯Ä£¿éÓ²¼þÄÚºËOpen,read,writeOpen,read,writeÒÔÉ豸ºÅ½¨Á¢½Úµã·µ»ØÖ÷É豸ºÅInsmod£¨£©×¢²áͼ4.1Çý¶¯Ô­Àíͼ4.2 LCDÉ豸Çý¶¯Éè¼Æ4.2.1Ö¡»º³åÉ豸½á¹¹Ö¡»º³å£¨framebuffer£©ÊÇLinuxΪÏÔʾÉ豸ÌṩµÄÒ»¸ö½Ó¿Ú£¬°ÑÏÔ´æ³éÏó³ÉÒ»ÖÖÉ豸£¬Õë¶ÔͼÐλ¯½çÃæÏµÄÓ¦ÓóÌÐòÏÔʾÎÊÌ⣬ÌṩÁËÒ»ÖÖ¿ÉÒÔÖ±½Ó¶ÁдÏÔʾ»º´æÇøµÄ·½°¸¡£ÕâÖÖÉèÖöÔÓÚÓû§²ãÊÇ͸Ã÷µÄ£¬¼´Óû§ÎÞ·¨ÖªÏþ¾ßÌåµÄÏÔ´æ´óС¡¢´æ´¢»úÖÆµÈµÈ¡£Óû§Ö»ÒªÍ¨¹ý¶Ô¸Ã½Ó¿ÚµÄµ÷Ó㬿ÉÒÔÖ±½ÓÍê³ÉÖîÈ续ͼºÍͼÐοòµÄÏÔʾ¡£¸Ã·½°¸Ò²ÊÇLinuxÖÐÏÔʾºº×ÖµÄΨһ½â¾ö·½°¸£¬³ý´ËÖ®ÍâÕâÊÇPC»úÖнâ¾ö´°¿ÚÏÔʾµÄÖ÷Òª·½Ê½¡£Ö¡»º³åÉ豸¶ÔÓ¦µÄÉ豸Çý¶¯ÎļþΪ/dev/fb£¬µ±ÏµÍ³Óв»Ö¹ÓÐÒ»¸öÏÔ¿¨Ê±£¬LinuxÒ²Ö§³Ö¶à´ï32¸öÖ¡»º³åÉ豸µÄÏÔʾ£¬ÆäÎļþ±àºÅ·Ö±ð´Ó/dev/fb0µ½/dev/fb31£¬¶øÒ»°ãÇé¿öÏÂÖ¸Ïò/dev/fb0µÄÖ¡»º³åÉ豸ͨ³£ÊÇ/dev/fb£¬¼´Îªµ±Ç°Ä¬ÈϵÄÖ¡»º³åÉ豸¡£ÔÚ±¾Æ½Ì¨µÄϵͳÖУ¬Ö»ÓÐÒ»¸öÖ¡»º³åÉ豸£¬ËùÒÔ¶ÔÓÚ»º´æµÄÏÔʾÉèÖÃÊÇ×ã¹»µÄ¡£Ö¡»º³åÉ豸ΪµäÐ͵Ä×Ö·ûÉ豸£ºÆäÖ÷É豸ºÅΪ29£¬´ÓÉ豸ºÅ´Ó0µ½31×ܹ²ÓÐ32¸ö£¬Õâ·Ö±ð¶ÔÓ¦/dev/fb0-/dev/fb31¡£Í¨¹ýĬÈϵÄÖ¡»º³åÉ豸£¬Ó¦ÓóÌÐòµÄ²Ù×÷·½Ê½ÓУº

»ùÓÚARM9µÄǶÈëʽLinuxϵͳÑо¿¼°É豸Çý¶¯³ÌÐòµÄ¿ª·¢32£¨1£©¶Ô/dev/fbµÄ¶Áд£ºÏ൱ÓÚ¶Ô»º³åÇøµÄ¶Áд²Ù×÷¡£±ÈÈçʹÓÃÃüÁîcp/dev/fb0 tmp£¬Æä¿ÉÒÔ½«´ËʱµÄÆÁÄ»µÄÄÚÈݸ´ÖƵ½Ò»¸ö¾ßÌåµÄÎļþÖУ¬¶øcp tmp>/dev/fb0Õâ¸öÃüÁîÔò½«»º³åÇøµÄͼÐλòÕßÊý¾ÝͶӰµ½ÆÁÄ»ÉÏ¡££¨2£©Ó³Éä²Ù×÷£ºÔÚÏÖ´ú¼ÆËã»ú¼¼ÊõÖУ¬³öÓÚ¶ÔÊý¾ÝºÍ´úÂëµÄ±£»¤£¬Í¨³£Çé¿ö²¢²»Ö§³ÖÓ¦ÓóÌÐò¶ÔÄÚ´æµÄ¾ßÌåÄÚÈݵĽøÐÐÖ±½ÓµÄ¶Áд²Ù×÷£¬ÕâÖÖģʽ³ÆÎª±£»¤Ä£Ê½¡£Ã¿¸öÓ¦ÓóÌÐò¶¼ÓÐÏà¶Ô¶ÀÁ¢µÄÐéÄâµØÖ·¿Õ¼ä¡£Linux×÷ΪÏȽøµÄ²Ù×÷ϵͳҲ²»ÀýÍâ¡£ËùÒÔΪÁ˽«ÎļþµÄÄÚÈÝÓ³Éäµ½Óû§¿Õ¼ä£¬LinuxÕë¶ÔÎļþ²Ù×÷ÖÐÌṩÁËÒ»¸ö³ÆÎªmmapµÄº¯Êý¡£¶ÔÓÚÖ¡»º³åÉ豸£¬Í¬Ñù¿ÉÒÔͨ¹ýÓ³Éä²Ù×÷£¬½«ÏÔʾ»º³åÇøµÄÎïÀíµØÖ·Ó³Éäµ½Óû§¿Õ¼äµÄÒ»¶ÎÐéÄâµØÖ·ÖС£Ó³ÉäÍê³ÉºóÓû§¾Í¿ÉÒÔͨ¹ýÕâ¶ÎÐéÄâµØÖ·£¬¶ÔÆÁÄ»»º³åÇø½øÐÐÊý¾ÝµÄ¶Áд²Ù×÷»òÕßÔÚÆÁÄ»ÉÏ»æÖÆÍ¼ÐΡ£ÊÂʵÉÏÓ¦ÓóÌÐòµÄͼÐÎÏÔʾ¹¦Äܶ¼ÊÇͨ¹ýÓ³Éä²Ù×÷À´ÊµÏֵġ£¶øÓ³Éä²Ù×÷ÔËÐÐÓÚϵͳµÄÄÚºË̬£¬ËùÒÔÎÒÃÇÒª×öµÄ¹¤×÷Ò»°ã²»¶à¡££¨3£©I/O¿ØÖÆ£ºÖ¡»º³åÉ豸ÖжÔÓÚÊäÈëÊä³ö²¿·ÖµÄ¿ØÖÆ£¬ÈçÆÁÄ»µÄÏñËØ´óС¡¢·Ö±æÂÊ¡¢É«²ÊÉî¶ÈµÈµÈÖ÷ÒªÊÇͨ¹ýµ×²ãµÄÇý¶¯À´Íê³ÉµÄ¡£ÔÚÓ¦ÓóÌÐòÖУ¬²Ù×÷/dev/fbµÄÒ»°ã²½ÖèÈçÏ£º£¨1£©´ò¿ª/dev/fbÉ豸Îļþ¡££¨2£©Í¨¹ýµ÷Óú¯ÊýioctrlÀ´»ñÈ¡µ±Ç°ÆÁÄ»µÄ²ÎÊý£¬ÈçÆÁÄ»´óС£¬Ã¿¸öÏñËØµãRGBλÊý¡£ÓÉ´Ë¿ÉÒÔ¼ÆËã³öÏàÓ¦µÄÏÔʾ»º³åÇøµÄ´óС¡££¨3£©½«ÏÔʾ»º³åÇøµÄÄÚÈÝÓ³Éäµ½Óû§¿Õ¼äÖÐÈ¥¡££¨4£©Ó³ÉäºóÍê³Éºó¾Í¿ÉÒÔͨ¹ý¶ÁдÏÔʾ»º³åÇø£¬À´ÊµÏÖͼÐÎÏÔʾºÍͼÐεĻæÖÆ¡£µäÐͳÌÐò¶ÎÈçÏ£º#includeint main(){int fbfd=0;struct fb_var_screeninfo vinfo;struct fb_fix_screeninfo finfo;long int screensize=0;/*´ò¿ªÉ豸Îļþ*/fbfd=open(\È¡µÃLCDµÄÏà¹Ø²ÎÊý*/ioctl(fbfd,FBIOGET_FSCREENINFO,&finfo);ioctl(fbfd,FBIOGET_VSCREENINFO,&vinfo);/*¼ÆËãÏÔʾ»º³åÇøÈÝÁ¿*/screensize=vinfo.xres*vinfo.yres*vinfo.bits_per_pixel/8;

À¼ÖÝÀí¹¤Ë¶Ê¿ÂÛÎÄ33/*½«ÏÔʾ»º³åÇøÓ³Éäµ½Óû§µØÖ·¿Õ¼ä*/fbp=(char*)mmap(0,screensize,PROT_READ|PROT_WRITE,MAP_SHARED,fbfd,0);4.2.2Ö¡»º³åÇý¶¯µÄ±àд֡»º³åÉ豸ÊÇ×Ö·ûÉ豸µÄÒ»ÖÖ£¬²ÉÓá°Îļþ²ã-Çý¶¯²ã¡±µÄ¹ØÁª·½Ê½¡£Îļþ²ãÖУ¬Linux¶ÔËüµÄ¶¨ÒåΪ£ºstatic struct file_operations fb_fops={owner:THIS_MODULE,read:fb_read,write:fb_write,ioctl:fb_ioctl,mmap:fb_mmap,open:fb_open,release:fb_release,};ÕâЩº¯ÊýÔÚLinuxµÄĿ¼£¨linux/driver/video/fbmem.c£©ÖÐÓжÔÓ¦µÄ¶¨Òå¡£ÏÔʾÉ豸²»½ö½ÓÊÕÀ´×ÔÓÚÓû§²ãµÄÊý¾ÝºÍͼÐΣ¬¶øÇÒ»¹Òª¶ÔÄÚºË̬µÄ¿ØÖÆÃüÁî×÷³öÏàÓ¦£¬Õâ¾ÍʹµÃÏÔʾÉ豸µÄÇý¶¯Éè¼ÆºÜÌØ±ð£¬Æä²»½öҪͨ¹ýµ×²ãµÄº¯ÊýÀ´ÊµÏÖÆÁÄ»µÄÏÔʾºÍͼÐεĻæÖÆ£¬»¹ÒªºÍÄÚºË̬½»»»ÖîÈçÉ豸¼Ç¼ÐÅÏ¢µÄͨÐÅ¡£Õâ¸öÐÅÏ¢½»»»º¯Êý£¬Ö÷ÒªÊÇÖ¸

struct fb_info½á¹¹Ìå¡£ÔÚ±¾Æ½Ì¨µÄϵͳÖУ¬¶ÔÓÚÏÔʾµÄÒªÇó²»ÊǺܸ´ÔÓ£¬Ö»Óõ½Á˸ÃÊý¾Ý½á¹¹ÖеÄÉÙÊý¼¸¸ö³ÉÔ±£¬ÒÔÏÂÊǶÔǶÈëʽϵͳÖг£ÓõijÉÔ±×ö¸ö¼ò½é£¬ÕâÓÐÀûÓÚÎÒÃDzÉÈ¡ÓÐÕë¶ÔÐԵĿª·¢¡£fb_infoÕâ¸ö½á¹¹Ìå¼Í¼Á˰üÀ¨Ö¡»º³åÉ豸µÄ²ÎÊý¡¢×´Ì¬ºÍÏà¹Ø²Ù×÷µÄÈ«²¿ÐÅÏ¢¡£²»Í¬µÄÖ¡»º³åÉ豸¶ÔÓ¦²»Í¬µÄfb_info½á¹¹£¬ÕâÊÇǶÈëʽϵͳÖйØÓÚÏÔʾ²¿·ÖÐèÒª¿ª·¢µÄµØ·½¡£Fb_infoµÄÖ÷Òª±äÁ¿ÓÐModename¡¢fontname¡¢fbopsÕâÈý¸ö£¬Ç°Õß´ú±íÉ豸Ãû³Æ£¬ÖмäÊÇÏÔʾ×ÖÌ壬ºóÕßÊÇÒ»¸öÖ¸Ïò¾ßÌåµÄµ×²ã²Ù×÷µÄÖ¸Õë¡£³ýÁËÉÏÊöµÄ½á¹¹ÌåÐèÒªÇý¶¯¿ª·¢ÈËÔ±¸ù¾ÝÏàÓ¦µÄÓ²¼þÌØµãÓÐÕë¶ÔÐԵĽøÐбàд֮Í⣬»¹°üÀ¨ÒÔÏÂÁ½¸ö½á¹¹Ì壺fb_var_screeninfoºÍfb_fix_screeninfo¡£ÆäÖÐfb_var_screeninfo¼Ç¼Óû§¿É¸ü¸ÄµÄÏÔʾ¿ØÖÆÆ÷²ÎÊý£¬°üÀ¨ÏñËØÊýÁ¿ºÍÿ¸öÏñËØµãµÄ´óС£»fb_var_screeninfoÖеÄxresÓÃÓÚ±íʾһÐÐÖеÄÏñËØµãÊýÁ¿£¬¶øyres¶¨ÒåÆÁĻһÁеÄÏñËØµã¸öÊý£¬bits_per_pixelÔò±íʾһ¸öÏñËØµãËùÕ¼ÓõÄ×Ö½ÚÊý[46]¡£¶øfb_fix_screeninfoÓëÇ°ÃæµÄ½á¹¹Ìåfb_var_screeninfoÏà·´£¬Ö»¼Ç¼Óû§²»¿É¸ü¸ÄµÄ²ÎÊý£¬ÈçÏÔʾ»º³åÇøµÄÎïÀíµØÖ·¡£Ò»µ©Óû§³ÌÐòÒª½øÐÐÓ³Éä²Ù×÷ʱ£¬¾Í¿ÉÒÔ´Ófb_fix_screeninfoÖжÁÈ¡µ½¶ÔÓ¦µÄÎïÀíµØÖ·¡£ÔÚÕÆÎÕÁËÉÏÊöµÄÔ­ÀíÖ®ºó£¬±àд֡»º³åÇý¶¯µÄ¹¤×÷ÊDZȽϼòµ¥µÄ£¬¾ßÌåÒª×ö

»ùÓÚARM9µÄǶÈëʽLinuxϵͳÑо¿¼°É豸Çý¶¯³ÌÐòµÄ¿ª·¢34µÄ¾ÍÊÇ£º1.±àд³õʼ»¯º¯Êý£ºÊ×Ïȳõʼ»¯LCD¿ØÖÆÆ÷£¬ÕâÆäÖÐÖ÷ÒªÊÇÕë¶ÔÏÔʾģʽºÍÑÕÉ«½øÐÐÉèÖã¬È»ºóÔÚSDRAMÖÐΪLCD·ÖÅ仺³åÇø¡£ÕâÖ÷Ҫͨ¹ýkmallocº¯ÊýÀ´ÊµÏÖ¶ÔһƬÁ¬ÐøµÄ¿Õ¼äµÄ·ÖÅä¡£±¾ÎIJÉÓõÄLCDÏñËØ´óСΪ240x320£¬ÓÐ24λɫ²Ê£¬ÐèÒª·ÖÅäµÄ»º³åÇø´óСΪ240x320x3=230KB£¬»º³åÇøµÄÆðʼµØÖ·±£´æÔÚLCD¿ØÖƼĴæÆ÷ÖС£×îºó¶Ôfb_info½á¹¹½øÐÐÉèÖ㬰üÀ¨Ìîд³ÉÔ±±äÁ¿£¬µ÷ÓÃ×¢²áº¯Êýregister_framebuffer(&fb_info)½«fb_info×¢²á½øÈëÄںˡ£2.±àдfb_infoÖÐÖ¸Ïò»º³åÇø²Ù×÷µÄÖ¸Õëfb_ops£º¶ÔÓÚ±¾Æ½Ì¨µÄÒªÇó£¬Ö»ÐèҪдºÃÒÔϼ¸¸öº¯Êý¾ÍÐУºstruct fb_ops{¡­¡­..int(*fb_get_fix)(struct fb_fix_screeninfo*fix,int con,struct fb_info*info);int(*fb_get_var)(struct fb_var_screeninfo*var,int con,struct fb_info*info);int(*fb_set_var)(struct fb_var_screeninfo*var,int con,struct fb_info*info);¡­¡­.};struct fb_opsÓÃÀ´ÉèÖÃ/»ñÈ¡fb_info½á¹¹ÖеijÉÔ±±äÁ¿µÄ¡£µ±Ó¦ÓóÌÐò¶ÔÉ豸Îļþ½øÐÐI/O²Ù×÷ʱºò»áµ÷ÓÃËüÃÇ¡£ÀýÈç¶ÔÓÚfb_get_fix£¨£©£¬Ó¦ÓóÌÐò´«ÈëµÄÊÇfb_fix_screeninfo½á¹¹£¬ÔÚº¯ÊýÖÐ¶ÔÆä³ÉÔ±±äÁ¿¸³Öµ£¬Ö÷ÒªÊÇsmem_start£¨»º³åÇøÆðʼµØÖ·£©ºÍsmem_len£¨»º³åÇø³¤¶È£©£¬×îÖÕ·µ»Ø¸øÓ¦ÓóÌÐò¡£¶øfb_set_var£¨£©º¯ÊýµÄ´«Èë²ÎÊýÊÇfb_var_screeninfo£¬º¯ÊýÖÐÐèÒª¶Ôxres£¬yres,ºÍbits_per_pixel¸³Öµ¡£4.3 USBÉ豸Çý¶¯Éè¼Æ4.3.1 USBµÄ¾ßÌå¹¹³ÉUSBÇý¶¯³ÌÐò´æÔÚÓÚ²»Í¬µÄÄÚºË×ÓϵͳºÍUSBÓ²¼þ¿ØÖÆÆ÷Ö®¼ä£¬USBºËÐÄΪUSBÇý¶¯³ÌÐòÌṩÁËÒ»¸öÓÃÓÚ·ÃÎʺͿØÖÆUSBÓ²¼þµÄ½Ó¿Ú£¬¶ø²»±Ø¿¼ÂÇϵͳµ±Ç°´æÔڵĸ÷ÖÖ²»Í¬ÀàÐ͵ÄUSBÓ²¼þ¿ØÖÆÆ÷¡£USBÊÇÒ»¸ö·Ç³£¸´ÔÓµÄÉ豸£¬ÄÚºËΪÎÒÃÇÌṩÁËÒ»¸ö³ÆÎªUSBµÄºËÐĵÄ×ÓϵͳÀ´´¦Àí´ó²¿·ÖµÄ¸´ÔÓÐÔ¡£USBÉ豸ÓÐÒÔÏÂÈý¸ö²¿·Ö×é³É£ºÅäÖᢽӿںͶ˵㡣ÈçÏÂͼËùʾ£º

À¼ÖÝÀí¹¤Ë¶Ê¿ÂÛÎÄ35USB HostUSB Device DriverUSB CoreUSBHCD(EHCI/OHCI/UHCI)HOST ControllerUSB Device DriverUSB CoreUSBHCD(EHCI/OHCI/UHCI)Device ControllerHardwareUSB Deviceͼ4.2 USB½á¹¹Í¼ÀûÓö˵ãͨÐÅÊÇUSBͨÐŵÄÌØµã£¬¶ËµãÓÖ·ÖΪËÄÖÖ·½Ê½£ºÖжϡ¢ÅúÁ¿¡¢µÈʱ¡¢¿ØÖÆ¡£¶øUSB¶ËµãµÄÊý¾Ý´«Êä²ÉÓðëË«¹¤µÄ·½Ê½£¬¼´ÔÚÒ»¸öÈ·¶¨µÄʱ¼äµãÉÏ£¬Êý¾ÝҪôÊÇ´ÓÖ÷»úµ½É豸£¬ÒªÃ´¾ÍÊÇÉ豸µ½Ö÷»ú£¬ÕâÖÖ¹¤×÷·½Ê½ÀàËÆÓÚµ¥Ïò¹ÜµÀ¡£¸ù¾ÝÉÏÃæËù˵µÄ¿ÉÒԵóöÕâÑùµÄ½áÂÛ£ºUSBÉ豸µÄÉèÖ÷dz£Áé»î£¬ÇÒÓв»Ö¹Ò»ÖÖÅäÖ÷½Ê½£¬¶øUSBµÄ½Ó¿ÚÒ²¾ßÓÐÒÔÉÏÀàËÆµÄ¶àÑùÐÔ¹¦ÄÜ¡£¶øÇý¶¯³ÌÐòµÄ¹¤×÷·½Ê½ÊÇÊ×ÏȽ«USB¶ÔÏó×¢²áµ½USB×ÓϵͳÖУ¬Ö®ºóÀûÓÃÖÆÔìÉÌ

ºÍÉ豸±êʶÀ´ÅжÏÓ²¼þÊÇ·ñÒѾ­³É¹¦°²×°£¬Ö®ºó¾ÍÊÇÀûÓÃUSBµÄ´®ÐÐͨµÀºÍ¿ØÖÆÆ÷À´ÊµÏÖÊý¾ÝµÄ´«Êä¡£ÉÏÃæÎÒÃǼòҪ˵Ã÷ÁËÇý¶¯³ÌÐòµÄ»ù±¾ÀíÂÛ£¬ÔÚдһ¸öÉ豸Çý¶¯³ÌÐò֮ǰ£¬ÎÒÃÇ»¹ÒªÁ˽âÒÔÏÂÁ½¸ö¸ÅÄģ¿éºÍÉ豸Îļþ[47]¡£Ä£¿é£ºÎÒÃÇÖªµÀÒ»¸ö³ÌÐò´Ó´úÂëд×÷µ½×îºóµÄÔËÐУ¬Ê×ÏÈÊÇÔÚ´úÂëд×÷Íê³ÉºóÓñàÒëÆ÷½øÐбàÒëÒÔÉú³ÉÄ¿±ê¶ÔÏó£¬Ö®ºóͨ¹ýÁ´½ÓÆ÷½«Ä¿±ê¶ÔÏóÁ´½ÓÆðÀ´£¬×îºóÊÇÉú³É¿ÉÖ´ÐеijÌÐò¡£¶øÄ£¿éÆäʵ¾ÍÊÇÄ¿±ê¶ÔÏóÎļþ£¬ÒòΪûÓÐÁ´½ÓËùÒÔ²»ÄܶÀÁ¢ÔËÐУ¬µ«ÊÇÄ£¿é¿ÉÒÔ±»×°ÔؽøÄں˶øÔËÐУ¬´Ó¶ø¿ÉÒÔÔöÇ¿Äں˵ŦÄÜ¡£Linux϶ÔÓÚÓ²¼þµÄÇý¶¯ÓÐÁ½ÖÖ·½Ê½£ºÒ»ÊÇÖ±½Ó¼ÓÔØµ½Äں˴úÂëÖУ¬ËæÄÚºËµÄÆô¶¯¶øÔËÐÐÏàÓ¦µÄÉ豸£»¶þÊÇÒÔÄ£¿é·½Ê½£¬±àÒëÉú³ÉÒ»¸öÄ¿±ê¶ÔÏóÎļþ£¬ÔÚÓ¦ÓóÌÐòÐèÒªµÄʱºòÔÙ¼ÓÔØµ½Äں˿ռäÔËÐУ¬ËùÒÔͨ³£¶ÔÓÚÇý¶¯¾ÍÊÇÖ¸Çý¶¯Ä£¿é¡£É豸Îļþ£ºÔÚÎļþϵͳÖÐÉ豸ÊÇÎļþϵͳ´´½¨µÄÒ»¸ö½Úµã£¬Õâ¸ö½ÚµãÔÚÂß¼­ÉÏÒÔÎļþµÄÐÎʽ´æÔÚ¡£µ«ÕâÓÖ²»Í¬ÓÚ³£¼ûµÄÎļþ£¬É豸ÎļþµÄÌØµãÊÇÆäÓëÓ²¼þϢϢÏà¹Ø£¬ÄÚºËΪӲ¼þÖ¸¶¨ÁËÖ÷´ÓÉ豸ºÅºÍÆäËûÓ²¼þÐÅÏ¢£¬ÕâЩÐÅÏ¢¶¼ÊÇÒÔ½ÚµãµÄÐÎʽ´æÔÚÓÚÎļþϵͳÖС£ÆäÖÐÖ÷É豸ºÅÓÃÓÚÇø±ð²»Í¬µÄÓ²¼þÉ豸£¬ÇÒ¶ÔÓ¦×ÅÈ·¶¨µÄÇý¶¯³ÌÐò£¬¶ø´ÓÉ豸ºÅÖ÷ÒªÓÃÓÚÇø·ÖͬһÀàÉ豸µÄ²»Í¬ÊôÐÔ»òÕßʹÓ÷½Ê½¡£Ö÷É豸ºÅÒ»°ã´æÔÚÓÚ/proc/devicesÎļþÖУ¬¶øÉ豸½Úµã´æÔÚÓÚÏàÓ¦µÄÎļþϵͳÖС£Ò»

»ùÓÚARM9µÄǶÈëʽLinuxϵͳÑо¿¼°É豸Çý¶¯³ÌÐòµÄ¿ª·¢36µ©ÎÒÃÇҪʹÓÃij¸ö¾ßÌåµÄÍⲿÉ豸£¬Ê×ÏÈÊǵ÷ÓÃÇý¶¯µÄ¶ÔÏóÄ¿±êÄ£¿é£¬Õâ¸öÄ£¿é¿ÉÒÔÊÇÒѾ­ÔËÐÐÓÚÄÚºË̬£¬Ò²¿ÉÒÔÊǵ÷ÓõÄʱºò¶¯Ì¬¼ÓÔØ½øÈëÄں˵ġ£µÈÇý¶¯Ä£¿é¼ÓÔØ³É¹¦ºó£¬Æä»áÓÉÄں˷ÖÅäµ½Ò»¸öÖ÷É豸ºÅºÍ´ÓÉ豸ºÅ¡£Ö÷É豸ºÅÈçÉÏÎÄËù˵¾ö¶¨ÁËÇý¶¯µÄÀàÐÍ£¬¿ÉÒÔʹ×Ö·ûÉ豸¡¢Ò²¿ÉÒÔÊÇ¿éÉ豸¡¢»¹¿ÉÒÔÊÇÍøÂçÉ豸¡£Ö®ºóͨ¹ýÉ豸ºÅ½«É豸ºÍÇý¶¯¹ØÁªÆðÀ´£¬´Ëʱϵͳ¾ÍÖªµÀÁËÕâ¸öÉ豸Ëù¶ÔÓ¦µÄÇý¶¯³ÌÐò¡£µÈÕâЩÍê³ÉºóÎļþϵͳ»á¸ù¾ÝÉ豸ºÅ£¬´´½¨Ò»¸öÉ豸Îļþ½Úµã¡£ÕâÑù¾Í¿ÉÒÔͨ¹ý¶ÔÎļþµÄ²Ù×÷À´ÊµÏÖ¶ÔÉ豸µÄÖîÈ磺´ò¿ª¡¢¶Áд¡¢¹Ø±ÕµÈ²Ù×÷¡£4.3.2 USBÇý¶¯³ÌÐò½á¹¹·ÖÎöдһ¸öUSBµÄÇý¶¯³ÌÐò×î»ù±¾µÄÒª×öËļþÊ£ºÇý¶¯³ÌÐòÒªÖ§³ÖµÄÉ豸¡¢×¢²áUSBÇý¶¯³ÌÐò¡¢Ì½²âºÍ¶Ï¿ª¡¢Ìá½»ºÍ¿ØÖÆurb¡£Çý¶¯³ÌÐòÖ§³ÖµÄÉ豸£ºÒ»°ãʹÓÃstruct usb_device_idÕâ¸ö½á¹¹ÌåÀ´¿ØÖƵ¥Ò»µÄUSBÇý¶¯³ÌÐò¡£ÔÚ±¾Æ½Ì¨ÖУ¬ÎÒÃǸù¾ÝUSBµÄÌØÕ÷£¬¶Ô³ÌÐòÖе͍Òå½øÐÐÒ»¶¨µÄÐ޸ġ£×¢²áUSBÇý¶¯³ÌÐò£ºstructusb_driverÊÇUSBÇý¶¯Éè¼ÆÖеÄÖØÒªÊý¾Ý½á¹¹£¬°üº¬Á˺ܶຯÊýºÍ±äÁ¿¡£struct usb_driver½á¹¹ÌåÒª³õʼÉèÖõÄÓÐ5¸ö×ֶΣ¬Æä¿ò¼ÜÈçÏÂËùʾ£ºstatic struct usb_driver skel_driver={.owner=THIS_MODULE,.name=\sconnect,.id_table=skel_table,};Õⲿ·ÖµÄÁ÷³ÌͼÈçÏÂËùʾ£º

À¼ÖÝÀí¹¤Ë¶Ê¿ÂÛÎÄ37¿ªÊ¼³õʼ»¯É豸£¬Èç²úÆ·IDÏòϵͳע²áUSBÉ豸ע²á³É¹¦£¿ÏòϵͳÌṩÉ豸Çý¶¯½á¹¹ÌåÐÅÏ¢³É¹¦Ìṩ£¿½áÊøYNY Nͼ4.3Çý¶¯Á÷³Ìͼstruct module*owner£ºÕâÊÇÒ»¸öÖ¸Ïò¸ÃÇý¶¯Ä£¿éµÄÖ¸Õë¡£USBͨ¹ý¶ÔËüÀ´¶ÔÇý¶¯¼ÆÊý£¬±£Ö¤ËüÄÜÕý³£µÄÔËÐлòÕßÐ¶ÔØ¡£const char*name£ºÕâÊÇÒ»¸öÖ¸Ïò³£Á¿×Ö·ûµÄÖ¸Õ룬ÆäÖ¸ÏòÇý¶¯µÄÃû³Æ¡£Õâ¸öÖ¸ÕëËùÖ¸ÏòµÄ³£Á¿×Ö·ûÔÚÕû¸öÇý¶¯ÖÐÊǶÀÒ»ÎÞ¶þµÄ¡£Ò»°ã½«ËüÓëÇý¶¯Ä£¿éÉèΪͬһÃû³Æ¡£int(*probe)(struct usb_interface*intf,const structusb_device_id*id)£ºÕâÊÇÖ¸ÏòÇý¶¯Ì½²âº¯ÊýµÄÖ¸Õë¡£Ö»Òªµ±USB½Ó¿ÚÓпÕÏУ¬²¢ÇÒÇý¶¯½Ó¿ÚÓÐÇëÇóµÄʱºò£¬Õâ¸öº¯Êý¾ÍÒª±»µ÷Óá£void(disconnect)(struct usb_interface*intf)£ºÖ¸ÏòÇý¶¯¶Ï¿ªº¯ÊýµÄÖ¸Õë¡£Èç¹ûÏµÍ³ÒªÐ¶ÔØÄ³¸öUSB½Ó¿Ú»òÕßÇý¶¯Ê±£¬¾Íµ÷ÓÃÕâ¸öº¯Êý¡£const struct usb_device_id*id_table£ºÖ¸ÏòÉ豸ID±íµÄÖ¸Õë¡£Õâ¸ö±íÖдæ·ÅÁË¿ÉÒÔ±»Çý¶¯Ê¶±ðºÍÖ§³ÖµÄUSBÉ豸¡£Ö»ÓÐÉèÖúÃÕâ¸ö±äÁ¿£¬USBµÄËùÓк¯Êý²ÅÄܱ»Ê¶±ðºÍÏàÓ¦¡£usb_register_driverº¯ÊýÊÇÄܰÑstructusb_driver×¢²áµ½USBºËÐĵÄ×¢²áº¯Êý¡£µ±USBÇý¶¯Ä£¿é³õʼ»¯Ö®ºó£¬ÉÏÊöµÄ¹¤×÷¾ÍÒѾ­Íê³ÉÁË¡£static int__init usb_skel_init(void){int result;/*Çý¶¯×¢²áµ½USB×ÓϵͳÖÐ*/result=usb_register(&skel_driver);


»ùÓÚARM9µÄǶÈëʽLinuxϵͳÑо¿¼°É豸Çý¶¯³ÌÐòµÄ¿ª·¢£¨À¼ÖÝÀí¹¤(4).doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ ÏÂÔØÊ§°Ü»òÕßÎĵµ²»ÍêÕû£¬ÇëÁªÏµ¿Í·þÈËÔ±½â¾ö£¡

ÏÂһƪ£º³õÖÐÓ¢ÓïÆðʼ½×¶Î½ÌѧµÄ˼¿¼Óë²ßÂÔ

Ïà¹ØÔĶÁ
±¾ÀàÅÅÐÐ
¡Á ×¢²á»áÔ±Ãâ·ÑÏÂÔØ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩

ÂíÉÏ×¢²á»áÔ±

×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£º QQ£º