|
Linux±©·çÓê°ãµØÕ¼ÁìÁËǶÈëʽϵͳÊг¡¡£¸ù¾Ý¹¤Òµ·ÖÎö¼Ò·ÖÎö£¬´óÔ¼1/3µ½1/2µÄеÄ32λºÍ64λǶÈëʽϵͳÉè¼Æ²ÉÓÃÁËLinux¡£Ç¶Èëʽ Linux ÒѾÔںܶàÓ¦ÓÃÁìÓòÏÔʾ³öÓÅÊÆ£¬±ÈÈçSOHO¼ÒÍ¥ÍøÂçºÍ³ÉÏñ/¶à¹¦ÄÜÍâÉè,²¢ÔÚÒÔϼ¸·½Ãæ¾ß±¸¾Þ´óµÄ¿çԽʽ·¢Õ¹Ç°¾°£º(NAS/SAN)´æ´¢£¬¼ÒÍ¥Êý×ÖÓéÀÖ(HDTV/PVR/DVR/STB)ºÍÊÖ³ÖÉ豸/ÎÞÏßÉ豸£¬ÌرðÊÇÊý×ÖÒÆ¶¯µç»°¡£
еÄǶÈëʽLinuxÓ¦Óò»»áÏóÕÆÎÕÔÚÖǻۺ͹¤ÒÕÖ®Éñ-ÂÞÉñÊÖÖÐÄÇÑù£¬»áͻȻ´Ó¿ª·¢ÕßµÄÍ·ÄÔÖб¬·¢³öÀ´¡£´óÁ¿µÄÏîÄ¿±ØÐë²ÉÓÃÊýǧÐеģ¬ÉõÖÁÊý°ÙÍòÐеĹýÈ¥µÄÏֳɴúÂë¡£³É°ÙÉÏǧµÄǶÈëʽÏîÄ¿ÒѾ³É¹¦µØ°ÑÆäËüƽ̨µÄÏֳɴúÂëÒÆÖ²µ½LinuxÖ®ÉÏ,±ÈÈçWind River VxWorks ºÍ pSOS, VRTX, Nucleus ºÍÆäËüRTOS £¬ÕâÐ©ÒÆÖ²¹¤×÷ÏÖÔÚÈÔÈ»ÓмÛÖµºÍÏÖʵÒâÒå¡£
µ½Ä¿Ç°ÎªÖ¹£¬´ó¶àÊýµÄ¹ØÓÚÒÆÖ²¾ÉµÄRTOSÓ¦Óõ½Ç¶ÈëʽLinuxµÄÎÄÏ×£¬ÒѾÔÚ¹Ø×¢RTOS ½Ó¿Ú£¨API£©£¬ÈÎÎñ£¬µ÷¶ÈģʽºÍÈçºÎ°ÑËûÃÇÓ³Éäµ½ÏàÓ¦µÄÓû§¿Õ¼äÈ¥¡£ ÔÚǶÈëʽ³ÌÐòµÄÃܼ¯I/O¿Õ¼äÖУ¬Í¬ÑùÖØÒªµÄÊÇ£¬°ÑRTOSµÄÓ¦ÓÃÓ²¼þ½Ó¿Ú´úÂëÏò¾ßÓиü¼Ó¹æ·¶»¯Ä£Ê½µÄLinuxÉ豸Æô¶¯³ÌÐòµÄÒÆÖ²¡£
±¾ÎİÑ×ÝÀÀ¼¸ÖÖ³£ÓõÄÄÚ´æÓ³ÉäI/O·½·¨,ËüÃǾ³£³öÏÖÓھɵÄǶÈëʽӦÓÃÖС£ËüÃǺ¸ÇµÄ·¶Î§£¬°üÀ¨´Ó¶ÔÖжϷþÎñÀý³ÌµÄÌØÊâʹÓúÍÓû§Ï̶߳ÔÓ²¼þ·ÃÎÊ£¬µ½³öÏÖÓÚÓÐЩROTSÖÐµÄ°ë¹æ·¶»¯Çý¶¯³ÌÐòÄ£ÐÍ¡£Ëü¶ÔÓÚÒÆÖ²RTOS ´úÂëµ½¹æ·¶»¯Ä£Ê½µÄLinuxÉ豸Æô¶¯³ÌÐò¾ßÓÐÆô·¢ÐÔ£¬²¢ÇÒ½éÉÜÁËһЩ·½·¨¡£ÌØ±ðµØ£¬±¾ÎÄ»áÖØµãÌÖÂۺͱȽÏRTOS´úÂëÖеÄÄÚ´æÓ³É䣬Linux»ùÓÚI/Oµ÷¶È¶ÓÁеÄÒÆÖ²£¬ºÍÖØÐ¶¨ÒåRTOS I/O£¬ÒÔ±ãÔÚ±¾µØLinux Çý¶¯³ÌÐòºÍÊØ»¤½ø³ÌÀïÓ¦Óá£
RTOS I/O ¸ÅÄî
“²»¹æ·¶”ÊÇÄܹ»ÃèÊö´ó¶àÊýÔÚ»ùÓÚRTOSϵͳÀïµÄI/OµÄ×î¼Ñ´ÊÓï¡£´ó¶àÊýRTOSÕë¶Ô½ÏÔçµÄÎÞMMUµÄCPU¶øÉè¼Æ£¬ºöÂÔÁËÄÚ´æ¹ÜÀí£¬¼´Ê¹µ±MMUÎÊÊÀÒ²ÊÇÕâÑù£¬²»Çø·ÖÎïÀíµØÖ·ºÍÂß¼µØÖ·¡£´ó¶àÊý RTOS»¹È«²¿ÔÚÌØÈ¨Ì¬£¨ÏµÍ³Ä£Ê½£©ÔËÐУ¬±íÃæÉÏ¿´ÔöÇ¿ÁËÐÔÄÜ¡£ÏñÕâÑù£¬È«²¿µÄRTOS Ó¦ÓúÍϵͳ´úÂë¶¼Äܹ»·ÃÎÊÕû¸ö»úÆ÷µØÖ·¿Õ¼ä£¬ÄÚ´æÓ³ÉäÉ豸ºÍI/OÖ¸Áʵ¼ÊÉÏ£¬°ÑRTOSÓ¦ÓóÌÐò´úÂëͬÇý¶¯³ÌÐò´úÂëÇø·Ö¿ª·Ç³£À§ÄÑ£¬¼´Ê¹ËüÃÇÊÇÓвî±ðµÄ¡£
Õâ¸ö²»¹æ·¶µÄ½á¹¹µ¼ÖÂÁËI/OµÄÌØÊâʵÏÖ¡£ÔںܶàÇé¿öÏ£¬Íêȫȱ·¦¶ÔÒ»ÖÖÉ豸Çý¶¯³ÌÐòÄ£Ð͵ÄÈÏͬ¡£¸ù¾ÝÕâÖÖ¹¤×÷µÄƽµÈºÍûÓзֲãµÄÌØÐÔ£¬»Ø¹ËÔÚ»ùÓÚRTOSÈí¼þÖÐʹÓõÄÒ»Ð©ÖØÒª¸ÅÄîºÍʵ¼ù·Ç³£ÓÐÖ¸µ¼ÒâÒå¡£
ÔÚÏßÄÚ´æÓ³Éä·ÃÎÊ
µ±ÔÚÉϸöÊÀ¼Í°ËÊ®Äê´úÖÐÆÚÉÌÒµ»¯µÄRTOS²úÆ·¿ÉÒÔÂòµ½µÄʱºò£¬´ó¶àÊýǶÈëʽÈí¼þ°üº¬¾Þ´óµÄÖ÷Ñ»·£¬Ö÷Ñ»·´øÓÐÕë¶ÔÑϸñʱ¼ä²Ù×÷µÄ×¢²áI/OºÍÖжϷþÎñÀý³Ì¡£¿ª·¢ÈËÔ±°ÑRTOSºÍÖ´ÐгÌÐòÉè¼Æ½øËûÃǵÄÏîÄ¿£¬Ö÷ҪΪÁ˼ÓǿͬʱÐԺͰïÖú¶àÈÎÎñͬ²½£¬µ«ÊDZܿªÆäËüÈκÎÓГ·Á°“µÄ¹¹Ô졣ͬÑùµØ£¬¼´Ê¹Ò»¸öRTOSÌṩÁËI/O µ÷ÓÃÐÎʽ·½·¨£¬Ç¶Èëʽ³ÌÐòÔ±¼ÌÐøÊ¹ÓÃÖ±½ÓµÄI/O²Ù×÷:
#define DATA_REGISTER 0xF00000F5
char getchar(void) {
return (*((char *) DATA_REGISTER)); /* read from port */
}
void putchar(char c) {
*((char *) DATA_REGISTER) = c; /* write to port */
}
|
¶àÊýÊܹýѵÁ·µÄ¿ª·¢Õß³£³£°ÑÕâÑùµÄÖ±½ÓI/O´úÂë´ÓÓ²¼þ´úÂë¶ÀÁ¢·ÖÀ뿪¡£µ«ÊÇÎÒ»¹ÔøÓö¼û´óÁ¿µÄÒâ´óÀûÃæÌõʽµÄI/O´¦Àí´úÂë¡£
µ±ÆÕ±éÉîÈëʹÓÃÖ±½ÓÄÚ´æÓ³ÉäI/OµÄʱºò£¬¶ÔLinux¿ªÊ¼½Ó´¥µÄǶÈëʽ¿ª·¢ÈËÔ±×ÜÊÇÃæÁÙ°ÑËùÓеÄÕâÀà´úÂëÒÆÖ²µ½Óû§¿Õ¼ä£¬°Ñ¶¨Òå¼Ä´æÆ÷µØÖ·µÄ#define Óï¾äת»»³Émmap()µ÷ÓᣠÕâÖÖ´¦Àí·½·¨¶ÔÓÚһЩÖÖÀàµÄÔÐͺܺ㬵«ÊDz»ÄÜÖ§³ÖÖжϴ¦Àí£¬ÏÞÖÆÁËʵʱÏìÓ¦£¬Ìر𲻰²È«£¬²»ÊʺÏ×÷ΪÉÌÒµ·¢²¼¡£
RTOS ÖжϷþÎñÀý³Ì
ÔÚ LinuxÖÐ, ÖжϷþÎñרÊôÓÚÄں˵ķ¶Î§¡£ ÔÚÒ»¸ö RTOSÖÐ, ÖжϷþÎñÀý³Ì´úÂëÊÇ×ÔÓÉÐÎ̬¶øÇÒÓëÓ¦ÓóÌÐò´úÂëûÓÐÇø±ð£¨²»Íâºõ·µ»ØÐòÁУ©¡£ºÜ¶à RTOSÌṩϵͳµ÷ÓûòÕߺ꣬À´ÈôúÂë×Ô¼º¼ì²âËü×Ô¼ºµÄÇл»µã£¨±ÈÈç Wind River VxWorksµÄ intContext()£©¡£ÖжϷþÎñÀý³Ìͨ³£Ò²Ê¹Óñê×¼µÄ¿âº¯Êý£¬°éËæ×Å¿ÉÖØÈëÐԺͿÉÒÆÖ²ÐÔÎÊÌâ¡£´ó¶àÊýRTOSÖ§³Ö×¢²áÖжϷþÎñÀý³Ì´úÂ룬ÖжÏÖٲþä±úºÍÖжϷþÎñÀý³Ìµ÷¶È¡£Ò»Ð©·Ç³£ÔʼµÄǶÈëʽִÐгÌÐò£¬½ö½öÖ§³ÖÔÚÓ²¼þʸÁ¿±íÀï²åÈëÖжϷþÎñÀý³ÌµÄ¿ªÊ¼µØÖ·¡£¼´Ê¹ÄãÊÔͼֱ½ÓÔÚÓû§³ÌÐò¿Õ¼äÖ´ÐжÁºÍдµÄ²Ù×÷£¬Äã²»µÃ²»°ÑÄãµÄLinuxÖжϷþÎñÀý³Ì·ÅÈëÄں˳ÌÐò¿Õ¼ä¡£
RTOS I/O ×Óϵͳ
´ó¶àÊýRTOS»áÌṩһ¸ö¶¨ÖƵıê×¼CÔËÐпâ (±ÈÈç pSOS µÄpREPC),»òÕß¿ÉÒÔ´Ó¶ÀÁ¢Èí¼þ¿ª·¢É̵ıàÒëÆ÷ÖÐÑ¡Ôñ´ò²¹¶¡µÄC¿â (libc) ͬÑù¿ÉÒԵõ½glibc¡£ÕâÑù,ÔÚ×îС»¯Çé¿öÏÂ,¶àÊýµÄ RTOSÖ§³Ö±ê×¼CÀàÐÍI/OµÄÒ»¸ö×Ó¼¯(open/close/read/write/ioctl)¡£ ´ó¶àÊýÇé¿öÏÂ,ÕâЩµ÷ÓúʹÓËûÃÇÑÜÉú³öÀ´µÄµ÷ÓÿÉÒÔת»¯ÎªÎ§ÈÆ»ù±¾I/OµÄ·Ç³£±¡µÄ·â×°³ÌÐò¡£ÓÐȤµÄÊÇ,ÒòΪ´ó¶àÊýµÄ?RTOS²»Ö§³ÖÎļþϵͳ,ÕâЩƽ̨²»ÌṩÕë¶ÔflashºÍÐýתýÖʵijéÏóÎļþ´æ´¢,³£³£Ê¹ÓÃÍêÈ«²»Í¬µÄ´úÂëºÍ/»òÕß²»Í¬µÄÓ¦ÓóÌÐò½Ó¿Ú(API) (±ÈÈç pSOS µÄpHILE)¡£
Wind River VxWorks ÔÚÕâ·½Ãæ±ÈÆäËü¶àÊýRTOSƽ̨×öµÄ½ÏºÃЩ,Ìṩ¹¦ÄܷḻµÄI/O×Ó¼¯,Ö÷Òª¿Ë·þÁËÍøÂç½Ó¿Ú/¶àýÌå½Ó¿ÚÀïµÄ¼¯³ÉºÍ¹ã·º»¯Õϰ¡£
ÑÓʱ´¦Àí
ºÜ¶àRTOSÒ²Ö§³ÖÒ»ÖֽДϰ벿 “("bottom half" )µÄ»úÖÆ,ËüÕë¶Ô¿ÉÖжϺÍ/»òÕß¿ÉÇÀÕ¼Çл»µÄI/OÑÓʱ´¦Àí·½·¨¡£ÆäËûRTOSûÓÐÕâÑùµÄ»úÖÆ,µ«ÊÇÌæ´úµØÌṩÀàËÆÖжÏǶÌ׵ĻúÖÆÀ´»ñµÃͬÑùµÄЧ¹û¡£
¹²3Ò³: ÉÏÒ»Ò³ 1 [2] [3] ÏÂÒ»Ò³
|