Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
vxworksÆô¶¯Ïê½â
 
  5679  次浏览      27
 2018-6-29 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn£¬½éÉÜÁËÈýÖÖ²»Í¬µÄVxWorksÓ³Ïó±È½Ï£¬¼¸ÖÖ²»Í¬µÄBOOTROM µÄ±È½Ï£¬VxWorksµÄÆô¶¯¹ý³ÌµÈ¡£

1 ÈýÖÖ²»Í¬µÄVxWorksÓ³Ïó±È½Ï

VxWorksÊÇÒ»ÖÖÁé»îµÄ¡¢¿É²Ã¼ôµÄǶÈëʽʵʱ²Ù×÷ϵͳ¡£Óû§¿ÉÒÔ¸ù¾ÝÐèÒª´´½¨×Ô¼ºµÄVxWorksÓ³Ïó£¬ÓÉËüÀ´Òýµ¼Ä¿±êϵͳ£¬¶øºóÏÂÔØ²¢ÔËÐÐÓ¦ÓóÌÐò¡£

¸ù¾ÝÓ¦Óó¡ºÏµÄ²»Í¬£¬VxWorksÓ³Ïó¿É·ÖΪÈýÀࣺ¿É¼ÓÔØµÄVxWorksÓ³Ïó¡¢»ùÓÚROMµÄVxWorksÓ³ÏóºÍפÁôROMµÄVxWorksÓ³Ïó¡£

1.1 ¿É¼ÓÔØµÄVxWorksÓ³Ïó

ÕâÊÇÒ»ÖÖÔËÐÐÓÚRAMµÄVxWorksÓ³Ïó¡£Ëü²»°üº¬°áÒÆ³ÌÐò£¬ÐèÒª½èÖúÓÚһЩÍⲿµÄ³ÌÐòÈçbootRom²ÅÄܼÓÔØµ½RAMµÄµÍ¶ËRAM_LOW_ADRSµØÖ·´¦¡£ÕâÊÇȱʡµÄ¿ª·¢Ó³Ïó¡£

ÔÚ¿ª·¢µÄ³õÆÚ½×¶Î£¬Óû§¿ÉÒÔ¸ù¾ÝÐèÒªÌí¼Ó»òɾ³ýһЩVxWorks×é¼þ£¬Éú³É×Ô¼ºµÄ¿É¼ÓÔØµÄVxWorksÓ³Ï󣬴æ·ÅÔÚ¿ª·¢Ö÷»úµÄij¸öĿ¼Ï¡£Ä¿±ê°åÉϵçºó£¬ÓÉÉÕ½áÔÚBOOTÖÐµÄÆðʼÒýµ¼³ÌÐò(BootStrap Programs)½«BOOTÖеÄROMÒýµ¼³ÌÐò£¨ROM Boot Programs£©¿½±´µ½RAMµÄ¸ß¶ËµØÖ·RAM_HIGH_ADRS´¦£¬²¢Ìø×ªÖÁ¸ÃµØÖ·Ö´ÐÐROMÒýµ¼³ÌÐò£¬ÅäÖúÃËùÑ¡µÄ¼ÓÔØ·½Ê½£¨È±Ê¡ÎªÍøÂ緽ʽ£©£¬½«Ö¸¶¨µÄÖ÷»úĿ¼ÏµĿɼÓÔØµÄVxWorksÓ³ÏóÏÂÔØµ½Ä¿±ê°åµÄRAMµØÖ·RAM_LOW_ADRS´¦£¬²¢Ìø×ªµ½´Ë´¦Ö´ÐС£Èçͼ1Ëùʾ¡£

ÕâÖÖÓ³ÏóµÄÓŵãÊÇÉú³ÉµÄVxWorksÓ³Ïó¿ÉÒÔ´æ·ÅÔÚ¿ª·¢Ö÷»úPC»úÉÏ£¬²»ÓÃÉÕµ½BOOTÖУ¬½ÚÊ¡ÁËBOOTÈÝÁ¿£¬Ò²±ãÓÚËæÊ±Ð޸IJ»Í¬µÄVxWorksÓ³Ïó£¬ÊÊÓÃÓÚµ÷ÊԵijõÆÚ½×¶Î¡£²»×ãÖ®´¦ÊÇÐèÒªÔÚÖ÷»úÉÏά»¤Ò»¸öÕýÈ·µÄVxWorksÓ³Ï󣬶ÔÓÚµ÷ÊÔÓ²¼þÎ޹صÄÉϲãÓ¦ÓóÌÐòÏԵò»ÊǺܷ½±ã¡£

ÔÚTornado¹¤×÷̨µÄBuild´°¿ÚÖУ¬Ñ¡ÔñRulesÊôÐÔÒ³ÖеÄVxWorks¼´¿ÉÉú³É¿É¼ÓÔØµÄVxWorksÓ³Ïó¡£

1.2 »ùÓÚROMµÄVxWorksÓ³Ïó

ÕâÊÇÒ»ÖÖÔËÐÐÓÚRAMÖУ¬µ«Æð³õ´æ·ÅÓÚROMÖеÄVxWorksÓ³Ïó¡£¼´¸ÃÓ³ÏóÐèÒªºÍ°áÒÆ³ÌÐòÒ»Æð¹Ì»¯ÔÚBOOTÖС£Ä¿±ê°åÉϵçºó£¬Ê×ÏÈÔËÐÐBOOTÖеÄÒýµ¼°áÒÆ³ÌÐò£¬½«Õû¸öVxWorksÓ³Ïó¿½±´µ½RAMµØÖ·RAM_LOW_ADRS´¦£¬²¢Ìø×ªµ½´Ë´¦Ö´ÐС£Èçͼ2Ëùʾ¡£

¸ÃÓ³Ïó¸ù¾ÝÊÇ·ñ±»Ñ¹ËõÓÖ¿É·ÖΪ£º

»ùÓÚROMµÄδѹËõµÄVxWorksÓ³Ï󣬿ÉÖ±½Ó´ÓROM¿½±´µ½RAMÖÐ

»ùÓÚROMµÄѹËõµÄVxWorksÓ³Ïó£¬ÕâÖÖÓ³ÏóÖ÷ÒªÊÇΪÁ˽ÚÔ¼BOOT¿Õ¼ä£¬ÔÚ´ÓROM¿½±´µ½RAMµÄ¹ý³ÌÖÐÐèÒª½âѹËõ£¬Òò´ËÓëÉÏÊöδѹËõµÄÓ³ÏóÏà±È£¬ËüµÄÒýµ¼¹ý³ÌÏà¶Ô½ÏÂý£¬µ«Á½ÕßÔÚRAMÖеÄÔËÐÐËÙ¶ÈÊÇÒ»ÑùµÄ¡£

1.3 פÁôROMµÄVxWorksÓ³Ïó

ÕâÖÖÓ³ÏóÆð³õÒ²ºÍ°áÒÆ³ÌÐòÒ»Æð¹Ì»¯ÔÚBOOTÖС£Ä¿±ê°åÉϵçºó£¬Ê×ÏÈÔËÐÐBOOTÖеÄÒýµ¼°áÒÆ³ÌÐò£¬µ«½ö½«VxWorksÓ³ÏóµÄÊý¾Ý¶ÎºÍBSS¶Î¿½±´µ½RAMµØÖ·RAM_LOW_ADRS´¦£¬Ó³ÏóµÄ´úÂë¶ÎÈÔ¾ÉÁôÔÚROMÖУ¬´ÓROMÖпªÊ¼Ö´ÐС£

ÕâÖÖÓ³ÏóµÄÓŵãÊǾßÓÐ×î¿ìµÄÒýµ¼ËÙ¶È£¬Õ¼ÓÃ×îÉÙµÄRAM¿Õ¼ä£¬ÊÊÓÃÓÚRAM¿Õ¼äÓÐÏÞµÄÄ¿±ê°å¡£µ«ÊÇÓÉÓÚ¸ÃÓ³ÏóÔÚROMÖÐÔËÐУ¬ÔËÐÐËÙ¶ÈÔÚÈýÖÖÓ³ÏóÖÐÊÇ×îÂýµÄ¡£

2 ¼¸ÖÖ²»Í¬µÄBOOTROMµÄ±È½Ï

Õë¶ÔÉÏÊöÈýÖÖ²»Í¬µÄVxWorksÓ³Ï󣬿ÉÒÔÉú³ÉÒÔϼ¸ÖÖ²»Í¬µÄBOOTROM£¬Ö÷ÒªÌåÏÖÔÚÖ´ÐаáÒÆ³ÌÐòromStart( )( λÓÚbootInit.cÎļþÖÐ)ʱ²»Í¬£º

2.1 ÓÃÓڿɼÓÔØVxWorksÓ³ÏóµÄBOOTROM

ÓÉ1Ëùʾ¿ÉÖª£¬ÓÃÓڿɼÓÔØVxWorksÓ³ÏóµÄBOOTROM°üº¬Á½²¿·Ö£ºÆðʼÒýµ¼³ÌÐò£¨BootStrap Programs)ºÍROMÒýµ¼³ÌÐò£¨ROM Boot Programs£©¡£

ÆðʼÒýµ¼³ÌÐòפÁôÔÚROMÖУ¬Ö÷Òª°üº¬£º

1.»ã±à¼¶µÄÓ²¼þ³õʼ»¯³ÌÐòromInit.s£¬ÓÃÓÚϵͳµÄ»ù±¾³õʼ»¯£¬ÉèÖÃÒ»Ð©ÖØÒª¼Ä´æÆ÷µÄ³õʼֵ£¬½øÐд洢Æ÷µÄÓ³Éä

2.°áÒÆ³ÌÐòbootInit.c£¬½«ROMÒýµ¼³ÌÐò¿½±´ÖÁRAMµÄ¸ß¶ËµØÖ·RAM_HIGH_ADRS£¬È»ºóÌø×ªµ½´Ë´¦Ö´ÐÐROMÒýµ¼³ÌÐò¡£

ROMÒýµ¼³ÌÐòÆð³õ´æ·ÅÔÚROMÖУ¬³õʼ»¯Ê±±»¿½±´µ½RAMÖУ¬Ö÷ÒªÓÃÓÚϵͳµÄ½øÒ»²½³õʼ»¯£¬²¢ÅäÖüÓÔØ·½Ê½£¬½«VxWorksÓ³Ïó¼ÓÔØÖÁRAM¡£¿É·ÖΪÈýÖÖ²»Í¬µÄÀàÐÍ£º

1.ѹËõµÄROMÒýµ¼³ÌÐò£¬ÔÚ¿½±´µÄ¹ý³ÌÖÐÐèÒª½âѹËõ£¬ÔÚRAMÖÐÖ´ÐÐ

2.δѹËõµÄROMÒýµ¼³ÌÐò£¬¿ÉÖ±½Ó¿½±´£¬ÔÚRAMÖÐÖ´ÐÐ

3.פÁôROMµÄROMÒýµ¼³ÌÐò£¬½ö¿½±´ROMÒýµ¼³ÌÐòµÄÊý¾Ý¶Î£¬´úÂë¶ÎÈÔ¾ÉÔÚROMÖÐÖ´ÐÐ

ÔÚTornado¿ª·¢»·¾³ÖУ¬Í¨¹ýÔÚÖ÷´°¿Úµã»÷Build|Build Boot ROM¡­¿ÉÒÔÑ¡ÔñÉú³ÉÒÔÉÏÈýÖÖBOOTROM£¬·Ö±ðΪ£ºbootrom_uncmp.hex(δѹËõµÄBOOTROM)£¬bootrom.hex(ѹËõµÄBOOTROM)£¬bootrom_res.hex£¨×¤ÁôµÄBOOTROM£©¡£

¾²Ì¬Á¬½Óµ½¿É¼ÓÔØµÄVxWorksÓ³ÏóµÄϵͳ³õʼ»¯´úÂëÖ´Ðв¢Íê³ÉÕû¸ö³õʼ»¯¹ý³Ì¡£

Òýµ¼¹ý³Ì³É¹¦ÒÔºó£¬RAMÖÐROMÒýµ¼³ÌÐòÕ¼ÓõĿռ䣨´ÓRAM_HIGH_ADRS¿ªÊ¼£©¿ÉÒÔÖØÐ±»ÏµÍ³ÀûÓá£

ËùʾµÄ¸÷µØÖ·º¬ÒåΪ£º

LOCAL_MEM_LOCAL_ADRSÊÇRAMµÄÆðʼµØÖ·

RAM_LOW_ADRSÊÇVxWorksµÄ¼ÓÔØµã£¬Ò²ÊÇVxWorks´úÂë¶ÎµÄÆðʼλÖÃ

FREE_RAM_ADRSÊÇVxWorksÓ³ÏóµÄ½áÊøµã¡£Í¨³£Ò²ÊÇϵͳÄÚ´æ³ØºÍÄ¿±ê·þÎñÆ÷ÄÚ´æ³ØµÄÆðʼµØÖ·

RAM_HIGH_ADRSÊÇROMÒýµ¼³ÌÐòµÄ¼ÓÔØµã¡£ËüÒ²ÊÇROMÒýµ¼³ÌÐò£¨³ýפÁôROMÒýµ¼³ÌÐòÖ®Í⣩µÄ´úÂë¶ÎµÄÆðʼλÖ㬻òפÁôROMÒýµ¼³ÌÐòÊý¾Ý¶ÎµÄÆðʼλÖá£

2.2 ÓÃÓÚ»ùÓÚROMµÄVxWorksÓ³ÏóµÄBOOTROM

ÓÉ2Ëùʾ¿ÉÖª£¬ÓÃÓÚ¸ÃÓ³ÏóµÄBOOTROM°üº¬Á½²¿·Ö£ºÆðʼÒýµ¼³ÌÐò£¨BootStrap Programs)ºÍ»ùÓÚROMµÄVxWorksÓ³Ïó¡£°áÒÆ³ÌÐòbootInit.c¸ºÔð½«VxWorksÓ³ÏóµÄÎı¾¶ÎºÍÊý¾Ý¶Î°áÒÆµ½Óû§¶¨ÒåµÄµÍ¶ËÄÚ´æµØÖ·RAM_LOW_ADRS£¬Èç¹ûÐèÒª½øÐбØÒªµÄ½âѹËõ£¬È»ºóÖ±½ÓÆô¶¯VxWorksÓ³Ïñ¡£

Òò´ËBOOTROMµÄÈÝÁ¿Ïà¶ÔÓÚ2.1ÖÐÃèÊöµÄBOOTROMÒª´óһЩ£¬µ«ÎÞÐèÔÚÖ÷»úĿ¼ÏÂά»¤Ò»¸ö¿ÉÓõÄVxWorksÓ³Ïó¡£

»ùÓÚROMµÄVxWorks BOOTROMÓÐѹËõºÍδѹËõÖ®·Ö¡£ÔÚTornado¹¤×÷̨µÄBuild´°¿ÚÖУ¬Ñ¡ÔñVxWorksÓ³ÏóRulesÊôÐÔÒ³ÖеÄVxWorks_rom¼´¿ÉÉú³É»ùÓÚROMµÄδѹËõµÄVxWorks BOOTROM£¬Ñ¡ÖÐVxWorks_romCompress¼´¿ÉÉú³É»ùÓÚROMµÄѹËõµÄVxWorks BOOTROM¡£

2.3 ÓÃÓÚפÁôROMµÄVxWorksÓ³ÏóµÄBOOTROM

ÓÉ3Ëùʾ¿ÉÖª£¬ÓÃÓÚ¸ÃÓ³ÏóµÄBOOTROM°üº¬Á½²¿·Ö£ºÆðʼÒýµ¼³ÌÐò£¨BootStrap Programs)ºÍפÁôROMµÄVxWorksÓ³Ïó£¬VxWorksϵͳÎı¾¶ÎפÁôÔÚROM£¬°áÒÆ³ÌÐòbootInit.c¸ºÔð½«Êý¾Ý¶ÎºÍbss¶Î°áÒÆµ½Óû§¶¨ÒåµÄµÍ¶ËÄÚ´æµØÖ·RAM_LOW_ADRS£¬Ö±½ÓÆô¶¯VxWorksÓ³Ïñ£¨º¬·ûºÅ±í£©¡£´Ëʱ£¬RAM_LOW_ADRSÊÇVxWorksÓ³ÏóµÄ¼ÓÔØµã£¬ËüÒ²ÊÇVxWorksÊý¾Ý¶ÎµÄÆðʼµã¡£

ÔÚTornado¹¤×÷̨µÄBuild´°¿ÚÖУ¬Ñ¡ÔñVxWorksÓ³ÏóRulesÊôÐÔÒ³ÖеÄVxWorks_romResident¼´¿ÉÉú³ÉפÁôROMµÄVxWorks BOOTROM¡£

3 VxWorksµÄÆô¶¯¹ý³Ì

¸ù¾ÝÉÏÊöËù²ÉÓõÄBOOTROMµÄ²»Í¬£¬VxWorksµÄÆô¶¯¹ý³Ì»áÓÐËù²»Í¬¡£

3.1 ʹÓÿɼÓÔØVxWorksÓ³ÏóµÄÆô¶¯¹ý³Ì

´Ëʱ£¬´ÓÄ¿±ê°åÉϵ縴λµ½Æô¶¯Óû§¶¨ÒåµÄÈÎÎñµÄÕû¸öÁ÷³ÌÈçÏ£º

sysALib.s : sysInit( )
Ëø×¡Öжϣ¬¹Ø±Õcache£¨Èç¹ûʹÓÃÁË»°£©£¬³õʼ»¯´¦ÀíÆ÷µÄ¼Ä´æÆ÷£¨°üÀ¨C¶ÑÕ»Ö¸Õ룩ÖÁȱʡֵ

¿ªÊ¼ÔÚRAMÖÐÔËÐÐVxWorks

usrConfig.c : usrInit( )
ÉèÖÃcacheµÄ¹¤×÷ģʽ£¬°å¼¶Ó²¼þ³õʼ»¯£¬³õʼ»¯WinÄںˣ¬Æô¶¯usrRoot( )

usrConfig.c : usrRoot( )
³õʼ»¯Äڴ棬ϵͳʱÖÓ£¬I/Oϵͳ£¬±ê×¼ÊäÈëÊä³ö´í£¬Òì³£´¦Àí£¬Ìí¼ÓÓû§Ó¦ÓóÌÐò

romInit.s : romInit
ÉèÖûúÆ÷״̬×Ö¼°ÆäËüÓ²¼þÏà¹Ø¼Ä´æÆ÷£¬¹Ø±ÕÖжϣ¬½ûÖ¹³ÌÐòºÍÊý¾ÝCACHE£¬³õʼ»¯Äڴ棬²¢ÉèÖöÑÕ»Ö¸Õë

bootInit.c : romStart( )
½«ROMÖеijÌÐò°áÒÆÖÁRAMÖÐ

bootConfig.c : usrInit( )
ÉèÖÃcache µÄ¹¤×÷ģʽ£¬°å¼¶Ó²¼þ³õʼ»¯£¬µ÷ÓÃsysHwInit( ),usrKernelInit ( ) ,KernelInit ( ),³õʼ»¯WinÄںˣ¬²úÉú¸ùÈÎÎñ usrRoot( )

bootConfig.c : usrRoot( )
³õʼ»¯Äڴ棬ϵͳʱÖÓ£¬I/Oϵͳ£¬±ê×¼ÊäÈëÊä³ö´í£¬Òì³£´¦Àí£¬²úÉúÈÎÎñbootCmdLoop

bootConfig.c : bootCmdLoop( )
µ÷ÓÃ×Ô¶¯Òýµ¼³ÌÐòautoboot( )£¬´Ëº¯ÊýÈô³É¹¦Ôò²»·µ»Ø

bootConfig.c: autoboot( )
ÑÓʱ7s£¬ÒÔĬÈϲÎÊýÆô¶¯

Óû§°´¼üÖжÏ

bootConfig.c :bootCmdLoop( )
Æô¶¯ÃüÁîÐÐÓÃÓÚÅäÖÃVxWorksÆô¶¯²ÎÊý

bootConfig.c: bootLoad( )
¼ÓÔØVxWorksÓ³Ï󣬲¢×ªÏòËü½øÐÐÖØÆô

µÈ´ý³¬Ê±

Óû§ÊäÈë¡®@ ¡¯

BootStrap³ÌÐò
ÔÚROMÖÐÖ´ÐÐ

ROM Boot³ÌÐò
±»°áÒÆµ½RAMÖÐÖ´ÐÐ

3.1.1 BOOTROMµÄÆô¶¯¹ý³Ì

1¡¢ Ä¿±ê°å¼ÓµçÖ®ºó£¬³ÌÐòÖ¸ÕëÖ¸ÏòRESETÖжϳÌÐòÈë¿Ú´¦£¬¿ªÊ¼Ö´Ðгõʼ»¯³ÌÐòromInit.s£¬ÉèÖûúÆ÷״̬×Ö¼°ÆäËüÓ²¼þÏà¹Ø¼Ä´æÆ÷£¬¹Ø±ÕÖжϣ¬½ûÖ¹³ÌÐòºÍÊý¾ÝCACHE£¬³õʼ»¯Äڴ棬²¢ÉèÖöÑÕ»Ö¸Õ룬±£´æÆô¶¯ÀàÐÍ£¬µ÷ÓÃromStart( )¡£

2¡¢ ³ÌÐòÌøµ½µÚÒ»¸öC³ÌÐòbootInit.cµÄº¯ÊýromStart( )Èë¿ÚµØÖ·£¬¸ù¾Ý¶ÑÕ»ÖеIJÎÊý¾ö¶¨ÊÇ·ñÇåÁãÄÚ´æRAM£¨ÈçÊÇÀäÆô¶¯£¨cold start£©ÔòÇåÁ㣩£¬¸ù¾Ý²»Í¬µÄbootromÎļþ£¬°ÑROMÖÐÊý¾Ý¶ÎºÍÎı¾¶Î¿½±´µ½RAM£¨Èç¹ûROM´úÂëÊÇѹËõµÄ£¬»¹Òª½âѹ£©£»

3¡¢ ³ÌÐòÌøµ½RAMÈë¿ÚµØÖ·£¨ÎļþbootConfig.cÖк¯ÊýusrInit( ) £©£¬¸ù¾ÝÓû§ÅäÖÃÀ´ÉèÖÃcacheµÄ¹¤×÷ģʽ£¬ÇåÁãbss¶Î£¬³õʼ»¯Òì³£´¦Àí³ÌÐò£¬½øÐа弶Ӳ¼þ³õʼ»¯sysHwInit( )¡£

4¡¢ Æô¶¯¶àÈÎÎñÄÚºËKernelInit( )£¬Ö´ÐÐusrRootÈÎÎñ¡£ÔÚ¸ÃÈÎÎñÖгõʼ»¯´®¿Ú£¬´´½¨consoleÖÕ¶ËÉ豸¡£´´½¨bootCmdLoopÈÎÎñ£¬¸ù¾Ýµ¥°åÉè¼ÆÑ¡Ôñ²»Í¬·½Ê½¼ÓÔØVxWorksÓ³ÏñÎļþ£¬Èçͨ¹ý´®¿Ú¡¢Íø¿Ú¡¢Ó²Å̵ȷ½Ê½¡£

3.1.2 VxWorksÓ³ÏóµÄÆô¶¯¹ý³Ì

VxWorks½øÈëµãsysInit()

Æô¶¯VxWorksϵͳµÄµÚÒ»²½¾ÍÊǽ«ÏµÍ³Ó³Ïó¼ÓÔØµ½Ö÷ÄÚ´æ¡£Õâͨ³£ÊÇÔÚVxWorks boot Rom µÄ¿ØÖÆÏ£¬´Ó¿ª·¢Ö÷»úÉÏÏÂÔØ¡£½Ó×Å£¬boot Rom½«¿ØÖÆÈ¨½»¸øVxWorksµÄÆðʼ½øÈëµã£ºsysInit()¡£ÔÚmakefileºÍ config.hÎļþÀÒѽ«Õâ¸ö½øÈëµãÉèÖóÉλÓÚµØÖ·RAM_LOW_ADRS¡£

º¯ÊýsysInit()λÓÚÏµÍ³ÌØ¶¨µÄ»ã±àÓïÑÔÄ£¿ésysALib.sÖС£Ëü¿ÉÒÔËø×¡Öжϣ¬¹Ø±Õcache£¨Èç¹ûʹÓÃÁË»°£©£¬³õʼ»¯´¦ÀíÆ÷µÄ¼Ä´æÆ÷£¨°üÀ¨C¶ÑÕ»Ö¸Õ룩ÖÁȱʡֵ¡£Ëü»¹»á¹Ø±Õ¸ú×Ù£¬Çå³ýËùÓÐδ¾öµÄÖжϣ¬²¢µ÷ÓÃÒ»¸öλÓÚusrConfig.c Ä£¿éµÄCÓïÑÔ×Ó³ÌÐò£ºusrInit() ¡£¶ÔÓÚijЩĿ±ê°å£¬sysInit()»¹Ö´ÐÐһЩ±ØÒªµÄÓëϵͳÓйصÄÓ²¼þ³õʼ»¯£¬ÒÔ±ãÔÚusrInit()ÖÐÖ´ÐÐÍêÊ£ÓàµÄ³õʼ»¯ÄÚÈÝ¡£½ö¹©usrInit()ʹÓõijõʼ¶ÑÕ»Ö¸Õ룬±»ÉèÖóÉλÓÚϵͳӳÏó(RAM_LOW_ADRS)ÒÔÏÂ,ÏòÁ¿±íÒÔÉϵÄλÖá£

³õʼ»¯´úÂëusrInit()

º¯ÊýusrInit()£¨Î»ÓÚusrConfig.cÖУ©£¬´¢´æÓйØÒýµ¼ÀàÐ͵ÄÐÅÏ¢£¬´¦ÀíÔÚÄÚºËÆô¶¯Ö®Ç°±ØÐëÖ´Ðеijõʼ»¯£¬¶øºóÆô¶¯ÄÚºËÖ´ÐС£ËüÊÇÔËÐÐÓÚVxWorksÄڵĵÚÒ»¸öCº¯Êý¡£´Ëʱ£¬ËùÓеÄÖж϶¼Òѱ»Ëø×¡¡£

Ðí¶àVxWorks¹¤¾ßÔÚusrInit( )Öж¼²»ÄÜʹÓá£ÕâÊÇÒòΪ´Ëʱ»¹Ã»ÓÐÈÎÎñµÄÉÏÏÂÎÄ£¨Ã»ÓÐTCBºÍÈÎÎñ¶ÑÕ»£©£¬ÄÇЩÐèÒªÈÎÎñÉÏÏÂÎĵŤ¾ßÎÞ·¨±»µ÷Ó᣺¯ÊýusrInit( )½ö×öһЩ´´½¨³õʼ»¯ÈÎÎñusrRoot( )Ëù±ØÐëµÄ¹¤×÷¡£È»ºóÓÉusrRoot( )Íê³ÉÆô¶¯¹ý³Ì¡£

usrInit( ) Öеijõʼ»¯¹ý³ÌÈçÏÂËùÊö£º

Cache³õʼ»¯

usrInit( ) µÄÆðʼ´úÂë³õʼ»¯cache£¬ÉèÖÃcache ģʽ£¬²¢½«cache·ÅÖÃÔÚÒ»¸ö°²È«µÄλÖá£ÔÚusrInit( )½áÊøÊ±£¬È±Ê¡Çé¿öÏ£¬Ö¸ÁîcacheºÍÊý¾Ýcache±»Ê¹ÄÜ¡£

¶ÔϵͳµÄBSS¶ÎÇåÁã

C ºÍC++ÓïÑԹ涨ËùÓÐδ³õʼ»¯µÄ±äÁ¿È±Ê¡µÄ³õʼֵΪÁã¡£ÕâЩδ³õʼ»¯µÄ±äÁ¿±»·ÅÖÃÔÚÒ»¸ö³ÆÎªbssµÄ¶ÎÄÚ¡£ÓÉÓÚusrInit( )ÊÇϵͳִÐеĵÚÒ»¸öC´úÂ룬ÔÚËüµÄÒ»¿ªÊ¼¶Ô°üº¬bss¶ÎµÄÄÚ´æÇåÁã¡£VxWorksµÄboot ROM Ò²»áÇåÄڴ棬µ«VxWorksÓ³Ïó¼ÙÉèûÓвÉÓÃboot ROM£¬ÈÔȻִÐÐÇåÄÚ´æµÄ²Ù×÷¡£

³õʼ»¯ÖжÏÏòÁ¿

Òì³£ÏòÁ¿±ØÐëÔÚʹÄÜÖÐ¶ÏºÍÆô¶¯ÄÚºË֮ǰ½¨Á¢¡£Ê×ÏÈ£¬µ÷ÓÃintVecBaseSet( ) ½¨Á¢ÏòÁ¿±í»ùµØÖ·¡£¶øºó£¬µ÷ÓÃexcVecInit( ) ³õʼ»¯ËùÓеÄÒì³£ÏòÁ¿ÖÁȱʡ¾ä±ú£¬ÒԱ㰲ȫµØ²¶»ñºÍ±¨¸æÓɳÌÐò´íÎó»òÒâÍâµÄÓ²¼þÖжϵ¼ÖµÄÒì³£¡£

³õʼ»¯Ó²¼þÖÁ¾²Ö¹×´Ì¬

ͨ¹ýµ÷ÓÃϵͳÏà¹Øº¯ÊýsysHwInit( )³õʼ»¯ÏµÍ³Ó²¼þ¡£¸Ãº¯Êý¸´Î»²¢¹Ø±ÕÄÇЩÔÚÖжÏʹÄÜ£¨ÄÚºËÆô¶¯Ê±£©ÒÔºó¿ÉÄܲúÉúÖжϵÄÓ²¼þÉ豸¡£ÕâÒ»µãºÜÖØÒª£¬ÒòΪVxWorks ISRs£¨ÓÃÓÚI/OÉ豸£¬ÏµÍ³Ê±Öӵȣ©Ö±µ½ÔÚÈÎÎñusrRoot( )ÖÐÍê³Éϵͳ³õʼ»¯ÒԺ󣬲ű»Á¬½Óµ½ËüÃǵÄÖжÏÏòÁ¿ÉÏ¡£²»ÒªÔÚsysHwInit( ) µ÷ÓÃÖÐÊÔͼΪһ¸öÖжÏÁ¬½ÓÒ»¸öÖжϾä±ú£¨Ò²¾ÍÊDz»ÄÜʹÓÃintConnect( )£©£¬ÒòΪ´ËʱÄÚ´æ³Ø»¹Ã»Óгõʼ»¯¡£

³õʼ»¯ÄÚºË

º¯ÊýusrInit( )½áÊøÊ±µ÷ÓÃÁËÁ½¸öÄں˳õʼ»¯º¯Êý£º

usrKernelInit( )(ÔÚusrKernel.cÖж¨Òå)Ϊÿ¸öÖ¸¶¨µÄ¿ÉÑ¡ÄÚºË×é¼þµ÷ÓúÏÊʵijõʼ»¯´úÂë¡£Ïê¼û±í1¡£

kernelInit( ) (kernelLib.cµÄÒ»²¿·Ö)³õʼ»¯¶àÈÎÎñ»·¾³£¬²»Ó÷µ»Ø¡£º¯Êý²ÎÊý°üÀ¨£º

ÓÃÒÔ²úÉú×÷Ϊ¸ùÈÎÎñµÄÓ¦ÓóÌÐò£¬µäÐ͵ÄΪusrRoot( )

ʹÓõĶÑÕ»´óС

¿ÉÓÃµÄÆðʼÄÚ´æµØÖ·£¬Ò»°ãλÓÚVxWorksÓ³ÏóµÄ´úÂë¶Î£¬Êý¾Ý¶ÎºÍbss ¶ÎÖ®ºó£¬Èç¹û°üº¬¿ÉÑ¡µÄÖ÷»úÄÚ´æ³Ø£¬Ôò»¹Òª¼ÓÉÏWDB_POOL_SIZE¡£

ÓÉsysMemTop( )¶¨ÒåµÄÄÚ´æ¶¥²¿

Öж϶ÑÕ»µÄ´óС

ÖжϷâËø¼¶±ð

kernelInit( ) µ÷ÓÃintLockLevelSet( )£¬¹Ø±ÕÑ­»·Ä£Ê½£¬´´½¨Ò»¸öÖж϶ÑÕ»£¨Èç¹û½á¹¹Ö§

³ÖµÄ»°)¡£È»ºó´ÓÄÚ´æ³ØµÄ¶¥²¿´´½¨Ò»¸ö¸ù¶ÑÕ»ºÍTCB£¬´´½¨Ò»¸ö¸ùÈÎÎñ£¬usrRoot£¬²¢ÖÕÖ¹usrInit( )Ï̵߳ÄÖ´ÐС£´ËʱʹÄÜÖжϣ¬ËùÓеÄÖжÏÔ´Òѱ»¹Ø±Õ£¬Î´¾öÖжÏÒѱ»Çå³ý¡£

³õʼ»¯ÄÚ´æ³Ø

ÄÚ´æ³ØµÄ³õʼ»¯ÊÇÓÉkernelInit( )À´Íê³ÉµÄ¡£kernelInit( ) µÄ²ÎÊýÖ¸¶¨Á˳õʼÄÚ´æ³ØµÄÆðʼºÍÖÕÖ¹µØÖ·¡£ÔÚȱʡµÄusrInit( )ÖУ¬½«ÄÚ´æ³ØÉèÖÃÔÚ½ô½ÓÓÚÒýµ¼µÄϵͳӳÏóÖ®ºó£¬²¢°üº¬ËùÓÐÊ£ÓàµÄ¿ÉÓÃÄÚ´æ¡£

¿ÉÓÃÄÚ´æµÄ´óСÓÉsysMemTop( )¾ö¶¨¡£Èç¹ûÄãµÄϵͳÓÐÆäËüµÄ²»Á¬ÐøµÄÄÚ´æÆ¬£¬Äã¿ÉÒÔÔÚusrRoot( )ÈÎÎñÖÐͨ¹ýµ÷ÓÃmemAddToPool( )½«ËüÃǰüº¬½øÍ¨ÓõÄÄÚ´æ³Ø¡£

VxWorks°üº¬ÁËÒ»¸öλÓÚmemPartLibÄ£¿éÖеÄÄÚ´æ·ÖÅ乤¾ß£¬Ëü¹ÜÀíÒ»¸ö¿ÉÓÃÄÚ´æ³Ø¡£Óû§¿ÉÒÔµ÷ÓÃmalloc( )º¯Êý´ÓÄÚ´æ³ØÖлñµÃ¿É±ä´óСµÄÄÚ´æ¿é¡£VxWorksÒ²ÀûÓÃmalloc( )º¯ÊýÀ´¶¯Ì¬·ÖÅäÄÚ´æ¡£Ðí¶àVxWorks¹¤¾ßÔÚ³õʼ»¯¹ý³ÌÖÐÐèÒª·ÖÅäÊý¾Ý½á¹¹¡£Òò´Ë£¬ÄÚ´æ³Ø±ØÐëÔÚÈÎºÎÆäËûµÄVxWorks¹¤¾ß³õʼ»¯Ö®Ç°³õʼ»¯¡£

TornadoÄ¿±ê·þÎñÆ÷Ò²¹ÜÀíÒ»²¿·ÖÄ¿±êÄÚ´æÒÔÖ§³ÖÄ¿±êÄ£¿éµÄÏÂÔØºÍÆäËû¿ª·¢¹¦ÄÜ¡£VxWorksʹÓÃmalloc( )º¯ÊýΪÒÑÏÂÔØµÄÄ£¿é·ÖÅä¿Õ¼ä£¬ÎªÒѲúÉúµÄÈÎÎñ·ÖÅä¶ÑÕ»£¬ÔÚ³õʼ»¯Ê±·ÖÅäÊý¾Ý½á¹¹¡£Óû§Ò²¿ÉÒÔʹÓÃmalloc( )º¯ÊýΪ×Ô¼ºµÄÓ¦ÓóÌÐò·ÖÅäËùÐèµÄÄÚ´æ¿Õ¼ä¡£Òò´Ë£¬ÍƼö½«ËùÓеÄδÓÃÄÚ´æ·ÖÅ䏸VxWorksÄÚ´æ³Ø£¬³ý·Ç±ØÐëΪһ¸öÌØÊâµÄÓ¦Óñ£ÁôһƬ¹Ì¶¨µÄ¾ø¶ÔÄÚ´æ¡£

³õʼÈÎÎñusrRoot( )

µ±¶àÈÎÎñÄÚºËÆô¶¯Ö´ÐÐÒÔºó£¬ËùÓеÄVxWorks¶àÈÎÎñ¹¤¾ß¾Í¿ÉÒÔÓÃÁË¡£¿ØÖÆÈ¨±»´«ËÍÖÁusrRoot( )ÈÎÎñ£¬²¢Íê³É³õʼ»¯ÏµÍ³¡£

usrRoot( ) Ö´ÐÐÒÔϲÙ×÷£º

³õʼ»¯ÏµÍ³Ê±ÖÓ

³õʼ»¯I/OϵͳºÍÇý¶¯

´´½¨¿ØÖÆÌ¨É豸

ÉèÖñê×¼ÊäÈëºÍ±ê×¼Êä³ö

°²×°Òì³£´¦ÀíºÍµÇ½

³õʼ»¯¹ÜµÀÇý¶¯Æ÷

³õʼ»¯±ê×¼I/O

´´½¨ÎļþϵͳÉ豸²¢°²×°´ÅÅÌÇý¶¯Æ÷

³õʼ»¯¸¡µãÖ§³Ö

³õʼ»¯ÐÔÄܼàÊÓ¹¤¾ß

³õʼ»¯ÍøÂç

³õʼ»¯¿ÉÑ¡µÄ¹¤¾ß

³õʼ»¯WindView

³õʼ»¯Ä¿±ê´úÀí

Ö´ÐÐÒ»¸öÓû§ÌṩµÄÆô¶¯½Å±¾

³õʼ»¯VxWorks Shell

ÏÂÃæ¶Ô¸÷¸ö²½Öè½øÐÐÏ꾡µÄÃèÊö£º

³õʼ»¯ÏµÍ³Ê±ÖÓ

usrRoot( ) ÈÎÎñÖ´ÐеĵÚÒ»¸ö²Ù×÷¾ÍÊdzõʼ»¯VxWorksʱÖÓ¡£Í¨¹ýµ÷ÓÃsysClkConnect( )

½«ÏµÍ³Ê±ÖÓµÄÖжÏÏòÁ¿Á¬½Óµ½usrClock( )º¯ÊýÉÏ¡£µ÷ÓÃsysClkRateSet( )½«ÏµÍ³Ê±ÖÓÂÊÉèÖÃΪ60Hz¡£

sysClkConnect( ) º¯Êýµ÷ÓÃsysHwInit2( )¡£·çºÓµÄBSP²ÉÓÃsysHwInit2( )Ö´ÐÐÔÚsysHwInit( )ÖÐδÍê³ÉµÄ½øÒ»²½µÄ°å¼¶³õʼ»¯¡£ÀýÈ磬¿ÉÒÔÀûÓÃintConnect( )Á¬½ÓISR£¬ÒòΪ´ËʱÒѾ­·ÖÅäÁËÄڴ棬ϵͳ´¦ÓÚ¶àÈÎÎñ»·¾³¡£

³õʼ»¯I/Oϵͳ

Èç¹ûÔÚconfigAll.hÖж¨ÒåÁËINCLUDE_IO_SYSTEM£¬¾Í¿ÉÒÔµ÷ÓÃiosInit( )º¯Êý³õʼ»¯VxWorksµÄI/Oϵͳ¡£¸Ãº¯ÊýµÄ²ÎÊýÖ¸¶¨Á˿ɱ»Ë³Ðò°²×°µÄ×î´óÇý¶¯Æ÷µÄÊýÄ¿£¬¿ÉÒÔÔÚϵͳÖÐͬʱ´ò¿ªµÄ×î´óÎļþÊýÄ¿£¬ºÍVxWorksµÄI/Oϵͳ°üº¬µÄ¡°¿Õ¡±É豸µÄÃû×Ö¡£

°üº¬»òÈ¥³ýINCLUDE_IO_SYSTEM»¹»áÓ°ÏìÊÇ·ñ´´½¨¿ØÖÆÌ¨É豸£¬ÊÇ·ñÉèÖñê×¼µÄÊäÈë¡¢Êä³öºÍ±ê×¼µÄ³ö´íÐÅÏ¢¡£

´´½¨¿ØÖÆÌ¨É豸

Èç¹û°üº¬Á˰åÉÏ´®¿ÚÇý¶¯Æ÷£¨¶¨ÒåÁËINCLUDE_TTY_DEV£©£¬¾Í¿ÉÒÔͨ¹ýµ÷ÓÃÇý¶¯Æ÷µÄ³õʼ»¯º¯Êý£¨µäÐ͵ÄÊÇttyDrv( )£©½«Ëü°²×°½øI/Oϵͳ¡£Êµ¼ÊµÄÉ豸ÊÇͨ¹ýµ÷ÓÃÇý¶¯Æ÷µÄÉ豸´´½¨º¯Êý£¨µäÐ͵ÄÊÇttyDevCreate()£©À´´´½¨ºÍÃüÃûµÄ¡£Õâ¸öº¯ÊýµÄ²ÎÊý°üÀ¨É豸Ãû³Æ£¬Ò»¸ö´®ÐÐI/OͨµÀÃèÊö×Ö£¨´ÓBSP»ñµÃ£©£¬ºÍÊäÈëÊä³ö»º´æ´óС¡£

ºêNUM_TTY¶¨ÒåÁËtty¿ÚµÄÊýÁ¿£¨È±Ê¡ÊÇ2£©¡£ºêCONSOLE_TTYÖ¸¶¨ÁËÄĸö¿Ú×÷Ϊ¿ØÖÆÌ¨¿Ú£¨È±Ê¡ÊÇ0£©£¬ºêCONSOLE_BAUD_RATEÖ¸¶¨ÁËÆä±ÈÌØÂÊ£¨È±Ê¡ÊÇ9600 bps£©¡£ÕâЩºê¶¼ÔÚconfigAll.hÖж¨Ò壬µ«¶ÔÓÚÄÇЩ¾ßÓзDZê¿ÚÊýµÄµ¥°å¿ÉÒÔÔÚconfig.hÖжÔËüÃǽøÐÐÖØÐ¶¨Òå¡£

ÉèÖñê×¼ÊäÈë¡¢±ê×¼Êä³öºÍ±ê×¼³ö´íÐÅÏ¢

ϵͳ¼¶µÄ±ê×¼ÊäÈë¡¢±ê×¼Êä³öºÍ±ê×¼´íÎóÐÅÏ¢µÄÅäÖÃÊÇͨ¹ý´ò¿ª¿ØÖÆÌ¨É豸²¢µ÷ÓÃioGlobalStdSet( )À´½¨Á¢µÄ¡£ÕâЩÅäÖÃ×÷ΪVxWorksµÄȱʡÉ豸ÓÃÓÚÓëÓ¦Óÿª·¢ÈËԱͨѶ¡£ÎªÁËʹ¿ØÖÆÌ¨É豸³ÉΪһ¸ö½»»¥Ê½µÄÖÕ¶Ë£¬µ÷ÓÃioctl( )½«É豸ѡÏîÉèΪOPT_TERMINAL¡£

°²×°Òì³£´¦ÀíºÍµÇ¼

³õʼ»¯VxWorksµÄÒì³£´¦Àí¹¤¾ß£¨ÓÉexcLibÄ£¿éÌṩ£©ºÍµÇ¼¹¤¾ß(ÓÉlogLib¿âÌṩ)¡£ÕâЩ¹¤¾ß¼ì²éÔÚ¸ùÈÎÎñÄÚ²¿»òÕß³õʼ»¯¸÷ÖÖ¹¤¾ßʱ²úÉúµÄ³ÌÐò´íÎó¡£

µ±¶¨ÒåÁ˺êINCLUDE_EXC_HANDLINGºÍINCLUDE_EXC_TASKºó£¬µ÷ÓÃexcInit( )³õʼ»¯Òì³£´¦Àí¹¤¾ß¡£excInit( ) º¯Êý²úÉúÒ»¸öÒì³£Ö§³ÖÈÎÎñexcTask( )¡£³õʼ»¯ÒԺ󣬿ÉÒÔ°²È«µØ²¶»ñºÍ±¨¸æµ¼ÖÂÓ²¼þÒì³£µÄ³ÌÐò´íÎ󣬱¨¸æ²¢½â³ýûÓгõʼ»¯ÏòÁ¿µÄÖжϡ£µ±¶¨ÒåÁËINCLUDE_SIGNALSºó£¬µ÷ÓÃsigInit( )³õʼ»¯VxWorksµÄÐźŹ¤¾ß£¬¸Ã¹¤¾ßÓÃÓÚÈÎÎñµÄÒì³£´¦Àí¡£

µ±¶¨ÒåÁËINCLUDE_LOGGINGºêÒԺ󣬵÷ÓÃlogInit( )³õʼ»¯µÇ¼¹¤¾ß¡£Æä²ÎÊý¶¨ÒåÁËÏÔʾµÇ¼ÐÅÏ¢µÄÉ豸µÄÎļþÃèÊö×Ö£¬ºÍ·ÖÅäµÄµÇ¼ÐÅÏ¢»º´æÊý¡£µÇ¼³õʼ»¯»¹´´½¨ÁËÒ»¸öµÇ¼ÈÎÎñlogTask( )¡£

³õʼ»¯¹ÜµÀÇý¶¯

Èç¹ûÐèÒªËùνµÄ¹ÜµÀ£¬ÔÚconfigAll.hÖж¨ÒåINCLUDE_PIPE£¬¾Í»á×Ô¶¯µØµ÷ÓÃpipeDrv( )³õʼ»¯¹ÜµÀ¡£¶øºóÈÎÎñ¾Í¿ÉÒÔÀûÓùܵÀͨ¹ý±ê×¼µÄI/O½Ó¿Ú»¥ÏàͨѶÁË¡£¹ÜµÀ±ØÐëÓÉpipeDevCreate( ) º¯Êý´´½¨¡£

³õʼ»¯±ê×¼I/O

µ±¶¨ÒåÁ˺êINCLUDE_STDIOÒÔºó£¬VxWorks ¾Í»á°üº¬Ò»¸ö¿ÉÑ¡µÄ±ê×¼I/O°ü¡£

´´½¨ÎļþϵͳÉ豸²¢³õʼ»¯É豸Çý¶¯

Ðí¶àVxWorksÅäÖÃÖÁÉÙ°üº¬Ò»¸ö´ÅÅÌÇý¶¯Æ÷£¬»ò´øÓÐdosFs/rt11Fs/rawFsÎļþϵͳµÄRAM´ÅÅÌ¡£Ê×ÏÈ£¬Í¨¹ýµ÷ÓÃÇý¶¯Æ÷µÄ³õʼ»¯´úÂë°²×°Ò»¸ö´ÅÅÌÇý¶¯Æ÷¡£¶øºó£¬Çý¶¯Æ÷µÄÉ豸´´½¨´úÂë»á¶¨ÒåÒ»¸öÉ豸¡£Õâ¸öµ÷Óû᷵»ØÒ»¸öÖ¸ÏòÃèÊöÉ豸µÄBLK_DEV½á¹¹µÄÖ¸Õë¡£

È»ºó¾Í¿ÉÒÔµ÷ÓÃÎļþϵͳµÄÉ豸³õʼ»¯´úÂ룭dosFsDevInit( ), rt11FsDevInit( ), or rawFsDevInit( )£¨Èç¹û¶¨ÒåÁ˺êINCLUDE_DOSFS, INCLUDE_RT11FSºÍINCLUDE_RAWFS£©³õʼ»¯ºÍÃüÃûÉ豸¡£ÔÚ³õʼ»¯Ò»¸öÉ豸֮ǰ£¬±ØÐëÓÃdosFsInit( ), rt11FsInit( )»ò rawFsInit( )³õʼ»¯Îļþϵͳģ¿é¡£ÎļþϵͳµÄÉ豸³õʼ»¯º¯ÊýµÄ²ÎÊýÈ¡¾öÓÚÌØ¶¨µÄÎļþϵͳ£¬µ«µäÐ͵İüÀ¨É豸Ãû³Æ£¬ÓÉÇý¶¯Æ÷µÄÉ豸´´½¨´úÂë²úÉúµÄÒ»¸öÖ¸ÏòBLK_DEV½á¹¹µÄÖ¸Õ룬¿ÉÄÜ»¹ÓÐһЩÎļþÏµÍ³ÌØ¶¨µÄÅäÖòÎÊý¡£

³õʼ»¯¸¡µãÖ§³Ö

Èç¹ûÔÚconfigAll.hÖаüº¬ÁËINCLUDE_FLOATING_POINTºê¶¨Ò壬Ôòµ÷ÓÃfloatInit( )º¯Êý³õʼ»¯¸¡µãI/OÖ§³Ö¡£µ±¶¨ÒåÁËINCLUDE_HW_FP£¬µ÷ÓÃmathHardInit( )³õʼ»¯¶Ô¸¡µãЭ´¦ÀíÆ÷µÄÖ§³Ö¡£µ±¶¨ÒåÁËINCLUDE_SW_FP£¬µ÷ÓÃmathSoftInit( )³õʼ»¯¶ÔÈí¼þ¸¡µã·ÂÕæµÄÖ§³Ö¡£

°üº¬ÐÔÄÜ·ÂÕæ

VxWorks¾ßÓÐÁ½¸öÄÚǶµÄÐÔÄܼàÊÓ¹¤¾ß¡£Ò»¸öÓÉspyLibÌṩµÄÈÎÎñ»î¶¯×ÛÊö£¬Ò»¸öÓÉtimexLibÌṩµÄ×Ó³ÌÐòÖ´Ðж¨Ê±Æ÷¡£Èç¹ûÔÚconfigAll.hÖж¨ÒåÁ˺êINCLUDE_SPY ºÍINCLUDE_TIMEX£¬¾Í»á°üº¬ÕâЩ¹¤¾ß¡£

³õʼ»¯ÍøÂç

Èç¹ûÅäÖÃÍ·ÎļþÖж¨ÒåÁËINCLUDE_NET_INIT£¬usrRoot( )¾Í»áµ÷ÓÃusrNetInit( )º¯Êý³õʼ»¯ÍøÂ磨usrNetInit( )µÄÔ´´úÂëλÓÚinstallDir/target/src/config/usrNetwork.c£©¡£usrNetInit( )º¯ÊýʹÓÃÁËÒ»¸öÅäÖÃ×Ö·û´®×÷ΪËüµÄ²ÎÊý¡£Õâ¸öÅäÖÃ×Ö·û´®Í¨³£ÊÇÒ»Ìõ¡°Òýµ¼ÐС±£¬ÓÃÓÚVxWorksµÄboot ROMÒýµ¼ÏµÍ³¡£¸ù¾ÝÕâ¸ö×Ö·û´®£¬usrNetInit( )º¯ÊýÖ´ÐÐÒÔϲÙ×÷£º

µ÷ÓÃnetLibInit( )³õʼ»¯ÍøÂç×Óϵͳ

Á¬½Ó²¢ÅäÖúÏÊʵÄÍøÂçÇý¶¯Æ÷

Ìí¼ÓÍø¹ØÂ·ÓÉ

³õʼ»¯Ô¶³ÌÎļþ´æÈ¡Çý¶¯Æ÷netDrv£¬²¢Ìí¼ÓÒ»¸öÔ¶³ÌÎļþ´æÈ¡É豸

³õʼ»¯Ô¶³ÌµÇ¼¹¤¾ß

¿ÉÑ¡µØ³õʼ»¯Ô¶¶Ë³ÌÐòµ÷Óã¨RPC£©

¿ÉÑ¡µØ³õʼ»¯ÍøÂçÎļþϵͳ£¨NFS£©¹¤¾ß

ÈçǰËùÊö£¬ÊÇ·ñ°üº¬ÕâÐ©ÍøÂ繤¾ßÓÉconfigAll.hÖеĺ궨Òå¾ö¶¨¡£

³õʼ»¯¿ÉÑ¡²úÆ·ºÍÆäËü×é¼þ

¿ÉÑ¡²úÆ·VxMP¿ÉÌṩ¹²ÏíÄÚ´æÄ¿±ê¡£Èç¹û¶¨ÒåÁ˺êINCLUDE_SM_OBJ£¬usrRoot( )

¾Í»áµ÷ÓÃusrSmObjInit( )º¯Êý£¨Ô´´úÂëλÓÚinstallDir/target/src/config/usrSmObj.c),³õʼ»¯¹²ÏíÄÚ´æÄ¿±ê¡£

¹²ÏíÄÚ´æÄ¿±ê¿âÐèÒªVxWorksÒýµ¼ÐÐÖеÄÓòÖµ¡£ÕâЩº¯Êý°üº¬ÔÚusrNetwork.cÎļþÖС£Èç¹û²»°üº¬ÍøÂç·þÎñ£¬usrNetwork.c¾Í²»»á±»°üº¬£¬¹²ÏíÄÚ´æ³õʼ»¯¾Í»áʧ°Ü¡£¹¤³Ì¹¤¾ß¼ÆËãËùÓеÄÒÀ´æ¹ØÏµ£¬µ«Èç¹ûʹÓÃÊÖ¹¤ÅäÖ㬿ÉÒÔ½«INCLUDE_NETWORKÌí¼Ó½øconfigAll.h£¬»òÊÇ´ÓusrNetwork.cÎļþÖн«Òýµ¼ÐдúÂëÌáÈ¡³öÀ´·ÅÖõ½ÆäËûµØ·½¡£

Èç¹û¶¨ÒåÁËINCLUDE_MMU_BASIC£¬¾Í¿ÉÒÔÌṩ»ù±¾µÄMMUÖ§³Ö¡£Èç¹û¶¨ÒåÁËINCLUDE_MMU_FULL£¬¿ÉÑ¡²úÆ·VxVMI¾Í¿ÉÒÔÌṩ´úÂë±£»¤£¬ÏòÁ¿±í±£»¤ºÍÒ»¸öÐéÄâÄÚ´æ½Ó¿Ú¡£MMUÓɺ¯ÊýusrMmuInit( )³õʼ»¯£¬¸Ãº¯ÊýλÓÚinstallDir/target/src/config/usrMmuInit.cÎļþÖС£Èç¹û»¹¶¨ÒåÁ˺êINCLUDE_PROTECT_TEXT ºÍINCLUDE_PROTECT_VEC_TABLE£¬¾Í»á³õʼ»¯´úÂë±£»¤ºÍÏòÁ¿±í±£»¤¡£

³õʼ»¯WindView

¿ÉÑ¡²úÆ·WindView¿ÉÌṩÄں˲âÊÔ¹¤¾ß¡£Èç¹ûÔÚconfigAll.hÖж¨ÒåÁ˺êINCLUDE_WINDVIEW£¬¾Í¿ÉÒÔÔÚusrRoot( )Öе÷ÓÃwindviewConfig ( )³õʼ»¯WindView¡£ÆäËüµÄWindView³£Á¿¿ØÖÆÌض¨µÄ³õʼ»¯²½Öè¡£

³õʼ»¯Ä¿±ê´úÀí

Èç¹û¶¨ÒåÁËINCLUDE_WDB£¬µ÷Óú¯ÊýwdbConfig( )£¨Î»ÓÚinstallDir/target/src/config/usrWdb.c£©¡£Õâ¸öº¯Êý³õʼ»¯Í¨Ñ¶½Ó¿Ú£¬È»ºóÆô¶¯´úÀí¡£

Ö´ÐÐÒ»¸öÆô¶¯½Å±¾

Èç¹ûVxWorksÅäÖÃÁËÄ¿±êפÁôµÄshell£¬¶¨ÒåÁËINCLUDE_STARTUP_SCRIPT£¬²¢ÇÒÔÚbootÒýµ¼¹ý³ÌÖÐÔÚÆô¶¯½Å±¾²ÎÊýÖÐÊäÈëÁ˽ű¾ÎļþµÄÃû³Æ£¬usrRoot( )º¯Êý¾Í¿ÉÒÔÖ´ÐÐÒ»¸öÓû§ÌṩµÄÆô¶¯½Å±¾¡£Èç¹ûÔÚÒýµ¼¹ý³ÌÖкöÂÔÁËÆô¶¯½Å±¾²ÎÊý£¬¾Í²»»áÖ´ÐÐÆô¶¯½Å±¾¡£

±í1¡¢¿É¼ÓÔØVxWorksÓ³ÏóµÄ³õʼ»¯¹ý³Ì

3.2 ʹÓûùÓÚROMµÄVxWorksÓ³ÏóµÄÆô¶¯¹ý³Ì

´ËʱBOOTROMÖаüº¬ÁËÒýµ¼³ÌÐòºÍVxWorksÓ³Ïó¡£VxWorksµÄÈë¿ÚµãÓÉÁ½¸öº¯Êý

romInit()ºÍromStart()À´Íê³É£¬¶ø·ÇsysInit()¡£¾ßÌå¹ý³ÌÈç±í2Ëùʾ¡£

±í2¡¢»ùÓÚROMµÄVxWorksÓ³ÏóµÄÆô¶¯¹ý³Ì

ʹÓÃפÁôROMµÄVxWorksÓ³ÏóµÄÆô¶¯¹ý³ÌÓë´ËÀàËÆ£¬Ö»ÊÇÔÚÖ´ÐаáÒÆ³ÌÐòromStart( )ÓÐËù²»Í¬¡£

4Ö÷ÒªÎļþ¼°ºê¿ª¹Ø½éÉÜ

ÒÔest8260ÆÀ¹À°åΪÀý£¬ËµÃ÷±àÖÆBSPÈí¼þËùÉæ¼°µÄÖ÷ÒªÎļþ¼°ºê¿ª¹Ø¡£

4.1 MakefileÎļþ

λÓÚBSPÎļþĿ¼ÏµıàÒëÎļþMakefile£¬¶¨ÒåÁËÆô¶¯ÎļþbootromÊ×µØÖ·¼°´óС£¬ÒÔ¼°±àÒëʱµ÷Óõĺ¯Êý¿â£¬VxWorksÓ³ÏñÎļþµÄ¼ÓÔØµØÖ·£¬Óû§ÐèÔö¼ÓµÄÄ¿±êÄ£¿é¡£

¸ÃÎļþÖеÄÖ÷Òªºê¶¨Ò壺

CPU = PPCEC603 Ä¿±ê°åµÄCPUÀàÐÍ£¬MPC750ΪPPC604£¬MPC8260ΪPPCEC603

TOOL = gnu Ö÷»ú¹¤¾ßΪ»ùÓÚGNUµÄ¹¤¾ß£¬Óû§²»±ØÐÞ¸Ä

TGT_DIR = $(WIND_BASE)/target

targetËùÔÚĿ¼(WIND_BASE£©ÒÑÔÚtorVars.batÖÐÖ¸¶¨,ΪTornadoµÄ°²×°Ä¿Â¼

include $(TGT_DIR)/h/make/defs.bsp ¶¨Òå±àÒëÑ¡Ïî

include $(TGT_DIR)/h/make/make.$(CPU)$(TOOL) ¼´Îļþmake.ppc860gnu

include $(TGT_DIR)/h/make/defs.$(WIND_HOST_TYPE)

¼´defs.x86-win32£¬¶¨ÒåºÍÖ÷»ú²Ù×÷ƽ̨Ïà¹ØµÄ¹¤¾ß

×¢Ò⣺ Ö»ÄÜÔÚÕâ¸öλÖÃÖ®ºóÖØÐ¶¨ÒåmakeµÄ¶¨Òå¡£

TARGET_DIR = est8260 Ä¿±ê°åBSPĿ¼Ãû£¬Óû§ÐèÖ¸¶¨ÎªÄ¿±ê°åBSPÎļþËùÔÚĿ¼

VENDOR = EST Ä¿±ê°åÖÆÔìÉÌ£¬ºÍBSP³ÌÐòÎ޹أ¬×÷×¢ÊÍÓÃ

BOARD = est8260 Evaluation SBC Ä¿±ê°åÃû£¬ºÍBSP³ÌÐòÎ޹أ¬×÷×¢ÊÍÓÃ

BOOTINIT = bootInit.c

USRCONFIG = usrConfig.c

ϵͳ±àÒëbootromʱ»á×Ô¶¯±àÒëÓû§BSPÎļþĿ¼ÏµÄusrConfig.cºÍbootInit.c£¬È±Ê¡ÎļþλÓÚAllĿ¼Ï¡£

ÒÔϵØÖ·Öµ¶¼ÎªÊ®Áù½øÖÆÖµ£¬ÎÞÐè¼ÓÈë0xǰ׺¡£ÔÚconfig.hºÍMakefileÖж¼¶¨ÒåÁËROM_TEXT_ADRS, ROM_SIZE, RAM_HIGH_ADRSµÈ³£Á¿£¬ÔÚ2¸öÎļþÖеĶԳ£Á¿µÄ¶¨ÒåÒªÇóÒ»Ö¡£

ROM_BASE_ADRS = fff00000 ROMµÄÎïÀíÆðʼµã

ROM_TEXT_ADRS = fff00100 ¸ùÆô¶¯É豸Boot ROMÊ×µØÖ·

ROM_SIZE = 00080000 BOOTROM´óС£¨512K£©

LOCAL_MEM_LOCAL_ADRS = 00000000 RAMµÄÎïÀíÆðʼµã

LOCAL_MEM_SIZE = 01000000 RAM´óС£¨ 16M£©

RAM_LOW_ADRS = 00100000 ¼ÓÔØVxWorksµÄÄ¿±êµØÖ·

RAM_HIGH_ADRS = 00a00000 ¿½±´boot ROMÎı¾¶ÎºÍÊý¾Ý¶ÎµÄÄ¿±êµØÖ·

HEX_FLAGS = -a $(ROM_TEXT_ADRS) HexÎļþת»¯ÎªbinÎļþµÄÖ´ÐгÌÐò²ÎÊý

MACH_EXTRA = m8260CpmEnd.obj Óû§¼ÓÈëµÄÄ¿±êÄ£¿éÃû£¬ºó׺Ϊobj

LDFLAGS = -X -N -Map est8260.map ÔÚÁ¬½Ó±êʶÖÐÔö¼Ó-M est8260.map¿ÉÒÔÔÚBSPĿ¼ÏÂÉú³É°üº¬±àÒëÐÅÏ¢µÄest8260.mapÎļþ¡£

×¢Ò⣺ֻÄÜÔÚÕâ¸öλÖÃÖ®Ç°ÖØÐ¶¨ÒåmakeµÄ¶¨Òå¡£

include $(TGT_DIR)/h/make/rules.bsp

include $(TGT_DIR)/h/make/rules.$(WIND_HOST_TYPE)

¶¨Òå±àÒë¸÷ÖÖBSPÎļþµÄÉú³É¹æÔò

4.2 all/ConfigAll.hÎļþ

´ËÎļþ°üº¬ÁËÊÊÓÃÓÚËùÓÐÄ¿±ê°åµÄȱʡ¶¨Òå¡£Ö÷Òª¶¨ÒåÁËÒÔÏÂÑ¡ÏîºÍ²ÎÊý£º

ÄÚºËÅäÖòÎÊý

I/Oϵͳ²ÎÊý

NFS ²ÎÊý

Ñ¡Ôñ¿ÉÑ¡µÄÈí¼þÄ£¿é

Ñ¡Ôñ¿ÉÑ¡µÄÉ豸¿ØÖÆÆ÷

cacheģʽ

×î´óÊýÁ¿µÄ²»Í¬¹²ÏíÄÚ´æÄ¿±ê

É豸¿ØÖÆÆ÷I/OµØÖ·£¬ÖжÏÏòÁ¿ºÍÖжϼ¶±ð

4.3 config.hÎļþ

´ËÎļþλÓÚBSPĿ¼Ï£¬°üº¬½öÊÊÓÃÓÚÌØ¶¨Ä¿±ê°åµÄ¶¨Ò壬»¹¿ÉÒÔ¶ÔconfigAll.hÖеÄȱʡ¶¨Òå½øÐÐÖØ¶¨Òå¡£ÆäÖ÷ÒªÄÚÈÝΪ£º

1¡¢BSP°æ±¾ºÅ

#define BSP_VER_1_1 1

#define BSP_VERSION "1.2"

#define BSP_REV "/4"

2¡¢configAll.h °üº¬Îļþ£¬Ó¦·ÅÔÚBSP_VERSIONºÍBSP_REV¶¨ÒåÖ®ºó

#include "configAll.h"

3¡¢¶¨ÒåȱʡµÄBOOTÒýµ¼É豸

#define DEFAULT_BOOT_DEVICE CPM_END

4¡¢¶¨ÒåÍøÂç¿ØÖÆÆ÷

#define INCLUDE_CPM £»Ê¹ÓÃSCCÒÔÌ«Íø¿ØÖÆÆ÷

5¡¢¶¨ÒåȱʡµÄBOOTÒýµ¼²ÎÊý

#define DEFAULT_BOOT_LINE \

"$dev(0,procnum)host:dir\\file h=# e=# b=# g=# u=usr pw=passwd f=# tn=targetname s=script o=other"

$dev -- boot device,Æô¶¯µÄÉ豸ÀàÐÍ£¬±ØÐëÊÇÒѰüº¬µÄÉ豸¡£

procnum -- ´¦ÀíÆ÷ÐòºÅ£¬Ò»°ã´ÓÁ㿪ʼ¡£

host -- Ö÷»úÃû

dir:\\file -- ±»¼ÓÔØµÄVxWorksÎļþËùÔÚµÄÍêÕû·¾¶

h -- Ö÷»úIP

e -- Ä¿±ê°åIP

b -- ±³°åIP£¬Óû§¿É²»¶¨Òå

g -- Íø¹Ø£¬Óû§¿É²»¶¨Òå

u -- Óû§Ãû

pw -- µÇ¼¿ÚÁî

f -- ¶¨ÒåÍøÂç¼ÓÔØ·½Ê½¡£ÎÞ´ËÏîʱȱʡֵΪÁ㣬ΪFTP

tn -- Ä¿±ê°åÃû

s -- Æô¶¯ÃèÊö×Ö·û´®£¬Óû§¿É²»¶¨Òå

o -- ´ÓSCSIÆô¶¯Ê±Ö¸Ã÷ÍøÂç½Ó¿Ú

ÒÀ¾Ý²»Í¬µÄÆô¶¯É豸ÀàÐÍ£¬ÆäÖÐijЩÏî¿ÉÎÞ¡£ÀýÈ磺

#define DEFAULT_BOOT_LINE \

"motec(0,0)diags:c:\\vxWorks h=172.96.36.88 e=172.96.78.23 g=172.16.0.1 u=anonymous pw=user f=0x00 tn=est8260"

6¡¢ »º³åºÍMMU¹¤×÷·½Ê½

#define INCLUDE_CACHE_SUPPORT

#define USER_I_CACHE_ENABLE

#define USER_D_CACHE_ENABLE

#define INCLUDE_MMU_BASIC

#define USER_I_MMU_ENABLE

#define USER_D_MMU_ENABLE

7¡¢°üº¬±ØÒªµÄÍøÂçÇý¶¯

#define INCLUDE_NETWORK

#define INCLUDE_END

8¡¢ ¶¨ÒåÄÚ´æµØÖ·ºÍ´óС

Ó¦ÓëMakefileÖе͍ÒåÒ»ÖÂ

#define USER_RESERVED_MEM 0x00000000 Ä¿±ê°åÓû§±£ÁôÄÚ´æ´óС

#define ROM_WARM_ADRS (ROM_TEXT_ADRS+8)

ÈÈÆô¶¯µØÖ·£¬ÎªROM_TEXT_ADRSµÄÒ»¸öÆ«ÒÆÁ¿£¬ÓÉÆô¶¯ÎļþromInit.sÖÐÌø×ªÓï¾ä bl startÏà¶ÔµÚÒ»ÌõÖ´ÐÐÓï¾äµÄÆ«ÒÆÁ¿ ¡£

4.4 target.hÎļþ

±¾Îļþ¶¨ÒåºÍÄ¿±ê°åÓ²¼þÏà¹ØµÄºê¡£Óû§Ó¦¸ù¾ÝÄ¿±ê°åÓ²¼þ¶ÔʱÖÓÆµÂÊ¡¢ÄÚ´æ¿Õ¼ä·ÖÅä¡¢´®¿ÚÊýÄ¿µÈ½øÐÐÉèÖá£

4.5 romInit.sÎļþ

´ËÎļþÊÇϵͳÉϵçÔËÐеĵÚÒ»¸ö³ÌÐò£¬Ò²ÊÇÖÆ×÷BOOTROMʱÐèÒªÖØµãÐ޸ĵijÌÐò£¬ÓëÓ²¼þÅäÖýôÃÜÏà¹Ø¡£

¿ÉÄÜÐèÒªÐ޸ģº

»úÆ÷״̬¼Ä´æÆ÷MSR

ÄÚ²¿´æ´¢Æ÷Ó³Ïñ¼Ä´æÆ÷IMMR

×ÜÏßÅäÖüĴæÆ÷BCR

60x×ÜÏß×ܲÃÅäÖüĴæÆ÷PPC_ACR

ϵͳ±£»¤¿ØÖƼĴæÆ÷SYPCR

SIUģʽÅäÖüĴæÆ÷SIUMCR

Ñ¡Ïî¼Ä´æÆ÷ORx£¬»ùÖ·¼Ä´æÆ÷BRx

60x×ÜÏß·ÖÅäSDRAM Ë¢ÐÂʱ¼äPSRT

60x×ÜÏßSDRAMģʽ¼Ä´æÆ÷PSDMR

4.6 all/bootConfig.cºÍSysALib.s

Ò»°ãÓû§²»ÐèÐ޸ģ¬Ò²¿É¸ù¾ÝÐèÒªÐ޸ġ£

4.7 sysSerial.c

Ìṩ´®¿Ú³õʼ»¯µÄϵͳ½Ó¿Úº¯Êý£¬¶¨Òå´®ÐÐͨµÀ²ÎÊýºÍÖжϺŵȡ£´®¿ÚÉ豸Çý¶¯³ÌÐòλÓÚĿ¼\tornado\target\src\drv\sio¡£¸ù¾ÝÓû§Ëù²ÉÓõĴ®¿Ú¼°Ó²¼þÁ¬½Ó×÷ÏàÓ¦Ð޸ġ£

4.8 sysNet.c

Ò»°ãÖ»ÐèÐÞ¸ÄÍøÂçÉ豸³õʼ»¯²¿·Ö,ÈçMPC8260ÖÐΪº¯ÊýsysFccEnetEnable()»òsysCpmEnetEnable( )¡£

Íø¿ÚºÍ´®¿ÚµÄÇý¶¯Éè¼Æ¿É²Î¼ûÏà¹ØµÄרÌâ¡£

5ʹÓÃTornado¹¤³Ì¹¤¾ß±àÒëVxWorksÓ³Ïó

ÒÔÉÏËùÊö¶¼ÊÇÔÚÐбàÒë»·¾³ÏÂÉú³ÉBOOTROM»òÊÇVxWorksµÄÇé¿ö£¬´ËʱÐèÒªÊÖ¹¤±àÒëMakefileÎļþ¡£Ê¹ÓÃTornado¿ª·¢»·¾³ÌṩµÄ¹¤³Ì¹¤¾ß±àÒëVxWorksÓ³Ïóʱ£¬¿ÉÒÔÓɹ¤³Ì¹¤¾ß¸ù¾ÝÓû§ÔÚ¹¤³ÌÖеIJÙ×÷×Ô¶¯Éú³ÉMakefileÎļþ¡£

ʹÓù¤³Ì¹¤¾ß±àÒëµÄVxWorksÓ³ÏóÓëʹÓÃÐÐÃüÁî±àÒëʱÓÐËù²»Í¬£º

1¡¢ µ±Ê¹ÓÃTornadoÉú³É¿ÉÒýµ¼µÄVxWorksÓ³Ïóʱ£¬Ëü»á×Ô¶¯·ÖÎöconfig.h£¬µÃµ½prjComps.h£¬Õâ¸öÎļþÔÚ¹¤³ÌÖиù¾ÝÓû§¶Ô×é¼þµÄɾ³ýºÍÌí¼Ó»á×Ô¶¯¸üС£Èç¹ûÔÚÐÐÃüÁîϱàÒëVxWorks£¬prjComps.hÊDz»Æð×÷Óõġ£

2¡¢ usrConfig.cÊÇÔÚÐÐÃüÁîϱàÒëVxWorksʹÓõÄÎļþ£¬ÓëconfigAll.hÒ»Ò»¶ÔÓ¦£¬prjConfig.cÊǽ¨Á¢¹¤³Ìʱ×Ô¶¯Éú³ÉµÄ£¬prjComps.h¶ÔÓ¦¡£

3¡¢ ʹÓÃÁËTornadoµÄ¹¤³Ì¹¤¾ßÒÔºó£¬Éú³ÉVxWorksÓ³ÏóֻʹÓÃprjConfig.c£¬¶ø²»ÓÃusrConfig.cÁË¡£

4¡¢ Tornado²úÉúÒ»¸ö¹¤³Ìʱ£¬ÊÇÒÔBSPΪÒÀ¾ÝµÄ£¬×î³õÊÇÍêȫһÖµģ¬Ö®ºó»á¸ù¾ÝÓû§µÄÅäÖöø¸Ä±ä

 

   
5679 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤