ʲôÊÇMTD
MTD(memory technology deviceÄÚ´æ¼¼ÊõÉ豸)ÊÇÓÃÓÚ·ÃÎÊmemoryÉ豸£¨ROM¡¢flash£©µÄLinuxµÄ×Óϵͳ¡£MTDµÄÖ÷ҪĿµÄÊÇΪÁËʹеÄmemoryÉ豸µÄÇý¶¯¸ü¼Ó¼òµ¥£¬Îª´ËËüÔÚÓ²¼þºÍÉϲãÖ®¼äÌṩÁËÒ»¸ö³éÏóµÄ½Ó¿Ú¡£MTDµÄËùÓÐÔ´´úÂëÔÚ/drivers/mtd×ÓĿ¼Ï¡£
MTDÉ豸
MTD É豸ÊÇÏóÉÁ´æÐ¾Æ¬¡¢Ð¡ÐÍÉÁ´æ¿¨¡¢¼ÇÒä°ôµÈÖ®ÀàµÄÉ豸£¬ËüÃÇÔÚǶÈëʽÉ豸ÖеÄʹÓÃÕýÔÚ²»¶ÏÔö³¤¡£ MTD Çý¶¯³ÌÐòÊÇÔÚ Linux ÏÂרÃÅΪǶÈëʽ»·¾³¿ª·¢µÄеÄÒ»ÀàÇý¶¯³ÌÐò¡£Ïà¶ÔÓÚ³£¹æ¿éÉ豸Çý¶¯³ÌÐò£¬Ê¹Óà MTD Çý¶¯³ÌÐòµÄÖ÷ÒªÓŵãÔÚÓÚ MTD Çý¶¯³ÌÐòÊÇרÃÅΪ»ùÓÚÉÁ´æµÄÉ豸ËùÉè¼ÆµÄ£¬ËùÒÔËüÃÇͨ³£ÓиüºÃµÄÖ§³Ö¡¢¸üºÃµÄ¹ÜÀíºÍ»ùÓÚÉÈÇøµÄ²Á³ýºÍ¶Áд²Ù×÷µÄ¸üºÃµÄ½Ó¿Ú¡£
MTDÓû§Ä£¿éºÍÓ²¼þÄ£¿é
Linux Ï嵀 MTD Çý¶¯³ÌÐò½Ó¿Ú±»»®·ÖΪÁ½ÀàÄ£¿é£ºÓû§Ä£¿éºÍÓ²¼þÄ£¿é¡£
ΪÁË·ÃÎÊÌØ¶¨µÄÉÁ´æÉ豸²¢½«ÎļþϵͳÖÃÓÚÆäÉÏ£¬ÐèÒª½« MTD ×Óϵͳ±àÒëµ½ÄÚºËÖС£Õâ°üÀ¨Ñ¡ÔñÊʵ±µÄ MTD Ó²¼þºÍÓû§Ä£¿é¡£µ±Ç°£¬MTD ×Óϵͳ֧³ÖΪÊýÖÚ¶àµÄÉÁ´æÉ豸 ¨D ²¢ÇÒÓÐÔ½À´Ô½¶àµÄÇý¶¯³ÌÐòÕý±»Ìí¼Ó½øÀ´ÒÔÓÃÓÚ²»Í¬µÄÉÁ´æÐ¾Æ¬¡£
ÓÐÁ½¸öÁ÷ÐеÄÓû§Ä£¿é¿ÉÆôÓöÔÉÁ´æµÄ·ÃÎÊ£º MTD_CHAR ºÍ MTD_BLOCK ¡£
MTD_CHAR Ìṩ¶ÔÉÁ´æµÄÔʼ×Ö·û·ÃÎÊ£¬¶ø MTD_BLOCK ½«ÉÁ´æÉè¼ÆÎª¿ÉÒÔÔÚÉÏÃæ´´½¨ÎļþϵͳµÄ³£¹æ¿éÉ豸£¨Ïó IDE ´ÅÅÌ£©¡£Óë MTD_CHAR ¹ØÁªµÄÉ豸ÊÇ /dev/mtd0¡¢mtd1¡¢mtd2£¨µÈµÈ£©£¬¶øÓë MTD_BLOCK ¹ØÁªµÄÉ豸ÊÇ /dev/mtdblock0¡¢mtdblock1£¨µÈµÈ£©¡£ÓÉÓÚ MTD_BLOCK É豸ÌṩÏó¿éÉ豸ÄÇÑùµÄÄ£Ä⣬ͨ³£¸ü¿ÉÈ¡µÄÊÇÔÚÕâ¸öÄ£Äâ»ù´¡ÉÏ´´½¨Ïó FTL ºÍ JFFS2 ÄÇÑùµÄÎļþϵͳ¡£
ΪÁ˽øÐÐÕâ¸ö²Ù×÷£¬¿ÉÄÜÐèÒª´´½¨·ÖÇø±í½«ÉÁ´æÉ豸·Ö²ðµ½Òýµ¼×°ÔسÌÐò½Ú¡¢Äں˽ںÍÎļþϵͳ½ÚÖС£ Linux ÖÐ MTD ×ÓϵͳµÄÖ÷ҪĿ±êÊÇÔÚϵͳµÄÓ²¼þÇý¶¯³ÌÐòºÍÉϲ㣬»òÓû§Ä£¿éÖ®¼äÌṩͨÓýӿڡ£Ó²¼þÇý¶¯³ÌÐò²»ÐèÒªÖªµÀÏó JFFS2 ºÍ FTL ÄÇÑùµÄÓû§Ä£¿éʹÓõķ½·¨¡£ËùÓÐËüÃÇÕæÕýÐèÒªÌṩµÄ¾ÍÊÇÒ»×é¶Ôµ×²ãÉÁ´æÏµÍ³½øÐÐ read ¡¢ write ºÍ erase ²Ù×÷µÄ¼òµ¥Àý³Ì¡£
CFI½Ó¿Ú MTDÉ豸²ã´Î
CFI½Ó¿Ú£¨Common Flash Interface£©µÄMTDÉ豸·ÖΪËIJ㣨´ÓÉ豸½ÚµãÖ±µ½µ×²ãÓ²¼þÇý¶¯£©£¬ÕâËIJã´ÓÉϵ½ÏÂÒÀ´ÎÊÇ£ºÉ豸½Úµã¡¢MTDÉ豸²ã¡¢MTDÔʼÉ豸²ãºÍÓ²¼þÇý¶¯²ã¡£
Ò»¡¢Flash Ó²¼þÇý¶¯²ã£ºÓ²¼þÇý¶¯²ã¸ºÔðÔÚinitʱÇý¶¯FlashÓ²¼þ£¬Linux MTDÉ豸µÄNOR¡¡FlashоƬÇý¶¯×ñÑCFI½Ó¿Ú±ê×¼£¬ÆäÇý¶¯³ÌÐòλÓÚdrivers/mtd/chips×ÓĿ¼Ï¡£NANDÐÍFlashµÄÇý¶¯³ÌÐòÔòλÓÚ/drivers/mtd/nand×ÓĿ¼ÏÂ
¶þ¡¢MTDÔʼÉ豸£ºÔʼÉ豸²ãÓÐÁ½²¿·Ö×é³É£¬Ò»²¿·ÖÊÇMTDÔʼÉ豸µÄͨÓôúÂ룬ÁíÒ»²¿·ÖÊǸ÷¸öÌØ¶¨µÄFlashµÄÊý¾Ý£¬ÀýÈç·ÖÇø¡£
ÓÃÓÚÃèÊöMTDÔʼÉ豸µÄÊý¾Ý½á¹¹ÊÇmtd_info£¬ÕâÆäÖж¨ÒåÁË´óÁ¿µÄ¹ØÓÚMTDµÄÊý¾ÝºÍ²Ù×÷º¯Êý¡£mtd_table£¨mtdcore.c£©ÔòÊÇËùÓÐMTDÔʼÉ豸µÄÁÐ±í£¬mtd_part£¨mtd_part.c£©ÊÇÓÃÓÚ±íʾMTDÔʼÉ豸·ÖÇøµÄ½á¹¹£¬ÆäÖаüº¬ÁËmtd_info£¬ÒòΪÿһ¸ö·ÖÇø¶¼ÊDZ»¿´³ÉÒ»¸öMTDÔʼÉ豸¼ÓÔÚmtd_tableÖеģ¬mtd_part.mtd_infoÖеĴ󲿷ÖÊý¾Ý¶¼´Ó¸Ã·ÖÇøµÄÖ÷·ÖÇømtd_part- >masterÖлñµÃ¡£
ÔÚdrivers/mtd/maps/×ÓĿ¼Ï´æ·ÅµÄÊÇÌØ¶¨µÄflashµÄÊý¾Ý£¬Ã¿Ò»¸öÎļþ¶¼ÃèÊöÁËÒ»¿é°å×ÓÉϵÄflash¡£ÆäÖе÷Óà add_mtd_device()¡¢del_mtd_device()½¨Á¢/ɾ³ýmtd_info½á¹¹²¢½«Æä¼ÓÈë/ɾ³ýmtd_table£¨»òÕßµ÷Óà add_mtd_partition()¡¢del_mtd_partition()£¨mtdpart.c£©½¨Á¢/ɾ³ýmtd_part½á¹¹²¢½« mtd_part.mtd_info¼ÓÈë/ɾ³ýmtd_table ÖУ©¡£
Èý¡¢MTDÉ豸²ã£º»ùÓÚMTDÔʼÉ豸£¬linuxϵͳ¿ÉÒÔ¶¨Òå³öMTDµÄ¿éÉ豸£¨Ö÷É豸ºÅ31£©ºÍ×Ö·ûÉ豸£¨É豸ºÅ90£©¡£MTD×Ö·ûÉ豸µÄ¶¨ÒåÔÚmtdchar.cÖÐʵÏÖ£¬Í¨¹ý×¢²áһϵÁÐfile operationº¯Êý£¨lseek¡¢open¡¢close¡¢read¡¢write£©¡£MTD¿éÉ豸ÔòÊǶ¨ÒåÁËÒ»¸öÃèÊöMTD¿éÉ豸µÄ½á¹¹ mtdblk_dev£¬²¢ÉùÃ÷ÁËÒ»¸öÃûΪmtdblksµÄÖ¸ÕëÊý×飬ÕâÊý×éÖеÄÿһ¸ömtdblk_devºÍmtd_tableÖеÄÿһ¸ö mtd_infoÒ»Ò»¶ÔÓ¦¡£
ËÄ¡¢É豸½Úµã£ºÍ¨¹ýmknodÔÚ/dev×ÓĿ¼Ï½¨Á¢MTD×Ö·ûÉ豸½Úµã£¨Ö÷É豸ºÅΪ90£©ºÍMTD¿éÉ豸½Úµã£¨Ö÷É豸ºÅΪ31£©£¬Í¨¹ý·ÃÎÊ´ËÉ豸½Úµã¼´¿É·ÃÎÊMTD×Ö·ûÉ豸ºÍ¿éÉ豸¡£
Îå¡¢¸ùÎļþϵͳ£ºÔÚBootloaderÖн«JFFS£¨»òJFFS2£©µÄÎļþϵͳӳÏñjffs.image£¨»òjffs2.img£©ÉÕµ½flashµÄijһ¸ö·ÖÇøÖУ¬ÔÚ/arch/arm/mach-your/arch.cÎļþµÄyour_fixupº¯ÊýÖн«¸Ã·ÖÇø×÷Ϊ¸ùÎļþϵͳ¹ÒÔØ¡£
Áù¡¢Îļþϵͳ£ºÄÚºËÆô¶¯ºó£¬Í¨¹ýmount ÃüÁî¿ÉÒÔ½«flashÖÐµÄÆäÓà·ÖÇø×÷ΪÎļþϵͳ¹ÒÔØµ½mountpointÉÏ¡£
MTD´úÂë·ÖÎö
MTDµķÖÎö -- ÍøÕª£¬Ïêϸ·ÖÎöÁËMTD´úÂë