±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ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¶ÑÕ»Ö¸Õ룩ÖÁȱʡֵ |
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ΪÒÀ¾ÝµÄ£¬×î³õÊÇÍêȫһÖµģ¬Ö®ºó»á¸ù¾ÝÓû§µÄÅäÖöø¸Ä±ä
|