Ëü²»½öÌṩÁ˳־õÄÊý¾Ý´æ´¢ÄÜÁ¦£¬»¹Ö±½Ó²ÎÓ뵽ϵͳµÄÆô¶¯Á÷³ÌÖУ¬ÌرðÊǶÔÓÚLinux²Ù×÷ϵͳ¶øÑÔ
±¾ÎÄÖ¼ÔÚÉîÈë̽ÌÖLinuxϵͳÈçºÎÔÚNANDÉÁ´æÉÏÆô¶¯£¬·ÖÎöÕâÒ»¹ý³ÌÖеĹؼü¼¼Êõ»·½Ú£¬²¢ÌÖÂÛÈçºÎÓÅ»¯ÕâÒ»¹ý³ÌÒÔÌá¸ßϵͳЧÂʺͿɿ¿ÐÔ
Ò»¡¢NAND ÉÁ´æ»ù´¡ NAND£¨Not AND£©ÉÁ´æÊÇÒ»ÖÖ»ùÓÚMOSFET£¨½ðÊôÑõ»¯Îï°ëµ¼Ì峡ЧӦ¾§Ìå¹Ü£©µÄ´æ´¢É豸£¬ÒÔÆä¸ßÃܶȡ¢µÍ³É±¾ºÍ½ÏºÃµÄ¶ÁдÐÔÄÜÔÚǶÈëʽÁìÓòµÃµ½¹ã·ºÓ¦ÓÃ
ÓëNORÉÁ´æÏà±È£¬NANDÔÚ¶ÁÈ¡ºÍдÈëËÙ¶ÈÉϸü¿ì£¬ÇÒÈÝÁ¿¸ü´ó£¬µ«Ö±½ÓÖ´ÐдúÂ루XIP£¬Execute In Place£©µÄÄÜÁ¦½ÏÈõ£¬ÕâÒâζ×ÅËüͨ³£ÐèÒª½«´úÂë¼ÓÔØµ½RAMÖвÅÄÜÖ´ÐÐ
NANDÉÁ´æµÄ×éÖ¯½á¹¹°üÀ¨Ò³£¨Page£©ºÍ¿é£¨Block£©£¬Ã¿¸öÒ³°üº¬Êý¾ÝÇøºÍ±¸ÓÃÇø£¨OOB£¬Out-Of-Band£©£¬ºóÕßÓÃÓÚ´æ´¢ECC£¨Error Correction Code£©µÈÐÅÏ¢ÒÔÈ·±£Êý¾ÝÍêÕûÐÔ
ÕâÖֽṹʹµÃNANDÔÚ´¦Àí´óÊý¾ÝÁ¿Ê±±íÏÖ³öÉ«£¬µ«Í¬Ê±Ò²´øÀ´Á˸´ÔӵĴíÎó´¦ÀíºÍÄ¥Ëð¾ùºâÌôÕ½
¶þ¡¢Linux Æô¶¯Á÷³Ì¸ÅÀÀ LinuxϵͳµÄÆô¶¯¹ý³Ì£¬Í¨³£³ÆÎªÒýµ¼£¨Booting£©£¬ÊÇÒ»¸ö´ÓÓ²¼þ³õʼ»¯µ½²Ù×÷ϵͳÄں˼ÓÔØ²¢Ö´ÐеĶà½×¶Î¹ý³Ì
ÕâÒ»¹ý³Ì´óÖ¿ÉÒÔ·ÖΪÒÔϼ¸¸ö½×¶Î£º 1.Ó²¼þ³õʼ»¯£ºÏµÍ³Éϵçºó£¬Ê×ÏÈÓɹ̼þ£¨ÈçBIOS»òUEFI£©½øÐÐÓ²¼þµÄ»ù±¾³õʼ»¯£¬°üÀ¨ÄÚ´æ¡¢CPU¡¢ÍâÉèµÈ
2.Òýµ¼¼ÓÔØ³ÌÐò£¨Bootloader£©£ºËæºó£¬¿ØÖÆÈ¨½»¸øÎ»ÓÚ·ÇÒ×ʧÐÔ´æ´¢½éÖÊ£¨ÈçNANDÉÁ´æ£©ÉϵÄÒýµ¼¼ÓÔØ³ÌÐò
Bootloader¸ºÔð³õʼ»¯Ó²¼þ»·¾³£¬×¼±¸ÄÚ´æ¿Õ¼ä£¬²¢¼ÓÔØÄÚºËÓ³Ïñµ½ÄÚ´æÖÐ
¶ÔÓÚNANDÉ豸£¬BootloaderÐèÒª´¦ÀíNANDÌØÓеĶÁÈ¡²Ù×÷£¬ÒÔ¼°¿ÉÄܵÄECCУÑé
3.Äں˼ÓÔØÓë½âѹËõ£ºBootloader½«ÄÚºËÓ³Ïñ´ÓNAND¶ÁÈ¡µ½RAMÖУ¬Èç¹ûÄÚºËÊÇѹËõµÄ£¨ÈçʹÓÃzlib»òLZOËã·¨£©£¬Ôò»¹Ðè½øÐнâѹËõ
4.Äں˳õʼ»¯£ºÄں˿ªÊ¼Ö´ÐУ¬½øÐÐһϵÁгõʼ»¯²Ù×÷£¬°üÀ¨É豸Ê÷£¨Device Tree£©µÄ½âÎö£¨¶ÔÓÚǶÈëʽLinuxÓÈÆäÖØÒª£©£¬ÄÚ´æ¹ÜÀí¡¢Îļþϵͳ¹ÒÔØµÈ
5.Óû§¿Õ¼äÆô¶¯£º×îºó£¬ÄÚºËÆô¶¯init½ø³Ì£¨Í¨³£ÊÇsystemd»òSysVinit£©£¬½øÈëÓû§¿Õ¼ä£¬Íê³ÉϵͳÆô¶¯µÄ×îÖÕ½×¶Î
Èý¡¢NANDÉÁ´æÉϵÄLinuxÆô¶¯Ï¸½Ú ÔÚNANDÉÁ´æÉÏÆô¶¯Linux£¬Óм¸¸ö¹Ø¼üµãÐèÒªÌØ±ð×¢Ò⣺ 1.BootloaderµÄÑ¡ÔñÓëÅäÖ㺠- ³£ÓõÄBootloader°üÀ¨U-BootºÍBarebox
ËüÃÇÐèÒªÕë¶ÔNANDµÄÌØÐÔ½øÐÐÅäÖ㬱ÈÈçÉèÖÃNANDµÄECCÖ§³Ö¡¢Ò³´óСºÍ¿é´óСµÈ
- U-Bootͨ¹ýNANDÃüÁ£¨Èç`nand read`¡¢`nandwrite`µÈ£©ÊµÏÖ¶ÔNANDµÄ²Ù×÷£¬¶øBareboxÔò²ÉÓÃÁ˸ü¼ÓÄ£¿é»¯ºÍÁé»îµÄÉè¼Æ
2.ÄÚºËÓ³ÏñµÄ´æ´¢Óë²¼¾Ö£º - ÄÚºËÓ³Ïñ£¨zImage»òuImage£©Í¨³£´æ´¢ÔÚNANDµÄÌØ¶¨ÇøÓò£¬Õâ¸öÇøÓòÐèÒª±»Bootloaderʶ±ð²¢ÄÜÕýÈ·¶ÁÈ¡
- ¿¼Âǵ½NANDµÄÓÐÏÞÊÙÃüºÍÄ¥Ëð¾ùºâ£¬ºÏÀíµÄ²¼¾ÖÉè¼Æ£¨È罫Ƶ·±¶ÁдµÄÇøÓò·ÖÉ¢´æ´¢£©¶ÔÓÚÑÓ³¤É豸ÊÙÃüÖÁ¹ØÖØÒª
3.ECCÓ뻵¿é¹ÜÀí£º - NANDÉÁ´æ´æÔڽϸߵÄλ´íÎóÂÊ£¬Òò´ËECCÊÇÈ·±£Êý¾ÝÍêÕûÐԵĹؼü
BootloaderºÍÄں˱ØÐëÖ§³ÖECCУÑéºÍÐÞÕý
- »µ¿é¹ÜÀíÊÇÁíÒ»¸öÌôÕ½£¬ÏµÍ³ÐèÒªÔÚÆô¶¯Ê±¼ì²â²¢±ê¼Ç»µ¿é£¬±ÜÃâÊý¾ÝдÈëÕâÐ©ÇøÓò
4.Æô¶¯ÐÔÄÜÓÅ»¯£º - ÓÉÓÚNANDµÄ¶ÁдËÙ¶ÈÏà±ÈRAM½ÏÂý£¬ÓÅ»¯Æô¶¯¹ý³ÌµÄ¹Ø¼üÔÚÓÚ¼õÉÙNANDµÄ·ÃÎÊ´ÎÊýºÍÊý¾ÝÁ¿
- Õâ¿ÉÒÔͨ¹ýѹËõÄÚºËÓ³Ïñ¡¢Ê¹Óøü¿ìµÄ´æ´¢½éÖÊ£¨ÈçeMMC»òSSD×÷Ϊ¸¨Öú´æ´¢£©ÒÔ¼°ÓÅ»¯BootloaderµÄ¶ÁÈ¡²ßÂÔÀ´ÊµÏÖ
5.°²È«ÐÔ¿¼ÂÇ£º - ÔÚNANDÉÏ´æ´¢µÄÆô¶¯´úÂëºÍÊý¾ÝÐèÒªÊܵ½±£»¤£¬·ÀÖ¹±»¶ñÒâ´Û¸Ä
Õâ¿ÉÒÔͨ¹ýʵʩÊý×ÖÇ©ÃûÑéÖ¤¡¢¼ÓÃÜ´æ´¢µÈ¼¼ÊõÀ´ÊµÏÖ
ËÄ¡¢Êµ¼ùÖеÄÌôÕ½Óë½â¾ö·½°¸ ÔÚʵ¼ÊÓ¦ÓÃÖУ¬½«Linux²¿Êðµ½»ùÓÚNANDÉÁ´æµÄÉ豸ÉÏ»áÓöµ½Öî¶àÌôÕ½£¬ÈçÆô¶¯Ê§°Ü¡¢Êý¾ÝË𻵡¢ÐÔÄÜÆ¿¾±µÈ
ÒÔÏÂÊÇһЩ³£¼ûµÄÌôÕ½¼°Æä½â¾ö·½°¸£º - Æô¶¯Ê§°Ü£º¿ÉÄÜÊÇÓÉÓÚBootloaderÅäÖôíÎó¡¢ÄÚºËÓ³ÏñË𻵻òNANDÓ²¼þ¹ÊÕÏÒýÆð
½â¾ö·½·¨°üÀ¨¼ì²éBootloaderÈÕÖ¾¡¢ÖØÐÂÉÕ¼ÄÚºËÓ³Ïñ¡¢½øÐÐNANDÓ²¼þ²âÊÔ
- Êý¾ÝË𻵣ºECC´íÎó´¦Àí²»µ±»ò»µ¿éδ±»ÓÐЧ¹ÜÀí¿ÉÄܵ¼ÖÂÊý¾ÝËð»µ
²ÉÓøü½¡×³µÄECCËã·¨¡¢¶¨ÆÚɨÃ軵¿é²¢¸üлµ¿é±íÊÇÓÐЧµÄÔ¤·À´ëÊ©
- ÐÔÄÜÆ¿¾±£ºÆô¶¯¹ý³ÌÖÐÆµ·±µÄNAND·ÃÎÊ»áÍÏÂýÆô¶¯ËÙ¶È
ÓÅ»¯ÄÚºËÓ³Ïñ´óС¡¢Ê¹Óøü¿ìµÄÆô¶¯½éÖÊ¡¢¸Ä½øBootloaderµÄ¶ÁÈ¡Ëã·¨¿ÉÒÔÏÔÖøÌáÉýÆô¶¯ÐÔÄÜ
- °²È«ÐÔ£ºÈ·±£Æô¶¯Á´µÄÍêÕûÐÔÊDZ£ÕÏϵͳ°²È«µÄ»ù´¡
ʵʩǩÃûÑéÖ¤»úÖÆ¡¢Ê¹Óð²È«µÄ´æ´¢ÐÒ飨ÈçUFS Secure Storage£©¿ÉÒÔÓÐЧ·ÀÖ¹Æô¶¯´úÂë±»´Û¸Ä
Îå¡¢½áÂÛ ÔÚNANDÉÁ´æÉÏÆô¶¯LinuxÊÇÒ»¸ö¸´ÔÓ¶ø¾«Ï¸µÄ¹ý³Ì£¬ËüÒªÇ󿪷¢ÕßÉîÈëÀí½âNANDµÄ¼¼ÊõÌØÐÔ¡¢LinuxµÄÆô¶¯»úÖÆÒÔ¼°Á½ÕßÖ®¼äµÄ½»»¥Ï¸½Ú
ͨ¹ý¾«ÐÄÉè¼ÆºÍÓÅ»¯£¬²»½ö¿ÉÒÔÈ·±£ÏµÍ³µÄ¿É¿¿Æô¶¯£¬»¹ÄÜÌáÉýÕûÌåÐÔÄܺͰ²È«ÐÔ
Ëæ×ż¼ÊõµÄ²»¶Ï½ø²½£¬Î´À´µÄNANDÉÁ´æ½«¸ü¼Ó¸ßЧ¡¢¿É¿¿£¬ÎªLinuxÔÚǶÈëʽϵͳºÍÎïÁªÍøÁìÓòµÄ¹ã·ºÓ¦ÓÃÌṩ¸ü¼Ó¼áʵµÄ»ù´¡
ÔÚÕâ¸ö¹ý³ÌÖУ¬³ÖÐøµÄѧϰºÍʵ¼ùÊÇÕÆÎÕÕâÒ»¼¼ÊõÁìÓòµÄ¹Ø¼ü