©®linuxÉçÇø©® °®ÐÄÔ®Öú ©® LinuxÈÏÖ¤©®ÏµÁÐ½Ì³Ì ©® Òµ½ç¶¯Ì¬©® Õ¾ÎñÐÂÎÅ ©® ¹«Ë¾ÕÐÆ¸©® ½¨ÒéÁôÑÔ ©® ÍøÖ·´óÈ« ©®LPIרÌâ©® CISCOרÌâ
ÉèΪÊ×Ò³
¼ÓÈëÊÕ²Ø
¹ÜÀíÍŶÓ
JSP  
JAVA  
PERL  
 ÄúµÄλÖãºÊ×Ò³ > article > Linux¿ª·¢Çø > ÄÚºËÑо¿ >
À¸Ä¿µ¼À¸
×ÊÁÏËÑË÷
ÈÈÃÅÎÄÕÂ
¡¤linux-2.6ÄÚºËÉý¼¶Îĵµ
¡¤LinuxÔ´´úÂëµÄ×¢ÊÍ
¡¤linux2.6Äں˱àÒë·½·¨ÏêÊö
¡¤Linux²Ù×÷ϵͳÄں˱àÒëÏê½â
¡¤LinuxÄں˽ṹÏê½â
¡¤LinuxÅäÖÃÓë±àÒëÄÚºË
¡¤¶¨Ê±Æ÷
¡¤LinuxÄÚºËÉý¼¶È«¹¥ÂÔ
¡¤FC5(Fedora Core5)ϱàÒëÄÚºË×Ü
¡¤Ubuntu 6.06 dapper Äں˱àÒë³õ
¡¤Linux Äں˱àÒëÏê½â
¡¤LinuxÄں˹ÜÀí»ù´¡ÖªÊ¶¸ÅÊö
¡¤Linux2.4Éý¼¶µ½2.6ÄÚºËÉý¼¶Ö¸ÄÏ
¡¤µÚ°ËÕ É豸Çý¶¯
¡¤ÈçºÎ±àÒëlinuxÄÚºË
×îÐÂÎÄÕÂ
¡¤LinuxÄÚºËbootsplash¹¦ÄܵÄʵÏÖ
¡¤LinuxÄÚºË2.6.25ȫз¢²¼¼ÓÈëÖÚ
¡¤Debian Linuxϵͳ±àÒëÄں˱ê×¼
¡¤Linux2.4Äں˺Í2.6Äں˶ÔInitr
¡¤2.6.24Äں˱àÒë initrd-2.6.24
¡¤QtopiaÓ¦ÓóÌÐòÓëLinuxÄÚºËÊý¾Ý
¡¤Linux 2.6ÄÚºËÖÐsysfsÎļþϵͳ
¡¤Linux2.6ÄÚºËÇý¶¯ÒÆÖ²²Î¿¼
¡¤Andrew Morton:LinuxÄں˵ÄÖ´·¨
¡¤Fedora 8 LinuxϵͳµÄÄÚºËÅäÖÃ
¡¤KernelÖеÄirq.cº¯Êý
¡¤LinuxºËÐijöÏÖȨÏÞÀ©Õż°¼ÇÒäÌå
¡¤Linux 2.6±¾µØÈ¨ÏÞÌáÉý©¶´
¡¤½áºÏLinuxϵͳÄÚºËÔ´ÂëÀí½âSYN
¡¤¹ØÓÚLinux ÄÚºËÖÐÎå¸öÖ÷Òª×Óϵ
Google
 
¶¨Ê±Æ÷
[ ×÷Õß:  ¼ÓÈëʱ¼ä:2005-12-01 12:54:54  À´×Ô: ]
 ºËÖ÷ÒªÐèÒªÁ½ÖÖÀàÐ͵Äʱ¼ä£º
1. ÔÚÄÚºËÔËÐÐÆÚ¼ä³ÖÐø¼Ç¼µ±Ç°µÄʱ¼äÓëÈÕÆÚ£¬ÒÔ±ãÄں˶ÔijЩ¶ÔÏóºÍʼþ×÷ʱ¼ä±ê¼Ç£¨timestamp£¬Ò²³ÆÎª¡°Ê±¼ä´Á¡±£©£¬»ò¹©ÓÃ
»§Í¨¹ýʱ¼äsyscall½øÐмìË÷¡£
2. ά³ÖÒ»¸ö¹Ì¶¨ÖÜÆÚµÄ¶¨Ê±Æ÷£¬ÒÔÌáÐÑÄں˻òÓû§Ò»¶Îʱ¼äÒѾ­¹ýÈ¥ÁË¡£
PC»úÖеÄʱ¼äÊÇÓÐÈýÖÖʱÖÓÓ²¼þÌṩµÄ£¬¶øÕâЩʱÖÓÓ²¼þÓÖ¶¼»ùÓڹ̶¨ÆµÂʵľ§ÌåÕñµ´Æ÷À´ÌṩʱÖÓ·½²¨ÐźÅÊäÈë¡£ÕâÈýÖÖʱÖÓÓ²¼þ
ÊÇ£º£¨1£©ÊµÊ±Ê±ÖÓ£¨Real Time Clock£¬RTC£©£»£¨2£©¿É±à³Ì¼ä¸ô¶¨Ê±Æ÷£¨Programmable Interval Timer£¬PIT£©£»£¨3£©
ʱ¼ä´Á¼ÆÊýÆ÷£¨Time Stamp Counter£¬TSC£©¡£

7£®1 ʱÖÓÓ²¼þ
7£®1£®1 ʵʱʱÖÓRTC
×Ô´ÓIBM PC ATÆð£¬ËùÓеÄPC»ú¾Í¶¼°üº¬ÁËÒ»¸ö½Ð×öʵʱʱÖÓ£¨RTC£©µÄʱÖÓоƬ£¬ÒÔ±ãÔÚPC»ú¶ÏµçºóÈÔÈ»Äܹ»¼ÌÐø±£³Öʱ¼ä¡£ÏÔ
È»£¬RTCÊÇͨ¹ýÖ÷°åÉÏµÄµç³ØÀ´¹©µçµÄ£¬¶ø²»ÊÇͨ¹ýPC»úµçÔ´À´¹©µçµÄ£¬Òò´Ëµ±PC»ú¹ØµôµçÔ´ºó£¬RTCÈÔÈ»»á¼ÌÐø¹¤×÷¡£Í¨
³££¬CMOS RAMºÍRTC±»¼¯³Éµ½Ò»¿éоƬÉÏ£¬Òò´ËRTCÒ²³Æ×÷¡°CMOS Timer¡±¡£×î³£¼ûµÄRTCоƬÊÇMC146818£¨Motorola£©ºÍ
DS12887£¨maxim£©£¬DS12887ÍêÈ«¼æÈÝÓÚMC146818£¬²¢ÓÐÒ»¶¨µÄÀ©Õ¹¡£±¾½ÚÄÚÈÝÖ÷Òª»ùÓÚMC146818ÕâÒ»±ê×¼µÄRTCоƬ¡£¾ßÌåÄÚ
ÈÝ¿ÉÒԲο¼MC146818µÄDatasheet¡£

7£®1£®1£®1 RTC¼Ä´æÆ÷
MC146818 RTCоƬһ¹²ÓÐ64¸ö¼Ä´æÆ÷¡£ËüÃǵÄоƬÄÚ²¿µØÖ·±àºÅΪ0x00¡«0x3F£¨²»ÊÇI/O¶Ë¿ÚµØÖ·£©£¬ÕâЩ¼Ä´æÆ÷Ò»¹²¿ÉÒÔ·ÖΪ
Èý×飺
£¨1£©Ê±ÖÓÓëÈÕÀú¼Ä´æÆ÷×飺¹²ÓÐ10¸ö£¨0x00~0x09£©£¬±íʾʱ¼ä¡¢ÈÕÀúµÄ¾ßÌåÐÅÏ¢¡£ÔÚPC»úÖУ¬ÕâЩ¼Ä´æÆ÷ÖеÄÖµ¶¼ÊÇÒÔBCD¸ñʽ
À´´æ´¢µÄ£¨±ÈÈç23dec£½0x23BCD£©¡£
£¨2£©×´Ì¬ºÍ¿ØÖƼĴæÆ÷×飺¹²ÓÐ4¸ö£¨0x0A~0x0D£©£¬¿ØÖÆRTCоƬµÄ¹¤×÷·½Ê½£¬²¢±íʾµ±Ç°µÄ״̬¡£
£¨3£©CMOSÅäÖÃÊý¾Ý£ºÍ¨ÓõÄCMOS RAM£¬ËüÃÇÓëʱ¼äÎ޹أ¬Òò´ËÎÒÃDz»¹ØÐÄËü¡£
ʱÖÓÓëÈÕÀú¼Ä´æÆ÷×éµÄÏêϸ½âÊÍÈçÏ£º
Address Function
00 Current second for RTC
01 Alarm second
02 Current minute
03 Alarm minute
04 Current hour
05 Alarm hour
06 Current day of week£¨01£½Sunday£©
07 Current date of month
08 Current month
09 Current year£¨final two digits£¬eg£º93£©

״̬¼Ä´æÆ÷A£¨µØÖ·0x0A£©µÄ¸ñʽÈçÏ£º
ÆäÖУº
£¨1£©bit£Û7£Ý¡ª¡ªUIP±êÖ¾£¨Update in Progress£©£¬Îª1±íʾRTCÕýÔÚ¸üÐÂÈÕÀú¼Ä´æÆ÷×éÖеÄÖµ£¬´ËʱÈÕÀú¼Ä´æÆ÷×éÊDz»¿É·ÃÎÊ
µÄ£¨´Ëʱ·ÃÎÊËüÃǽ«µÃµ½Ò»¸öÎÞÒâÒåµÄ½¥±äÖµ£©¡£
£¨2£©bit£Û6£º4£Ý¡ª¡ªÕâÈýλÊÇ¡°³ý·¨Æ÷¿ØÖÆÎ»¡±£¨divider-control bits£©£¬ÓÃÀ´¶¨ÒåRTCµÄ²Ù×÷ƵÂÊ¡£¸÷ÖÖ¿ÉÄܵÄÖµÈçÏ£º
Divider bits Time-base frequency Divider Reset Operation Mode
DV2 DV1 DV0
0 0 0 4.194304 MHZ NO YES
0 0 1 1.048576 MHZ NO YES
0 1 0 32.769 KHZ NO YES
1 1 0/1 ÈκΠYES NO
PC»úͨ³£½«Divider bitsÉèÖóɡ°010¡±¡£
£¨3£©bit£Û3£º0£Ý¡ª¡ªËÙÂÊÑ¡Ôñ루Rate Selection bits£©£¬ÓÃÓÚÖÜÆÚÐÔ»ò·½²¨ÐźÅÊä³ö¡£
RS bits 4.194304»ò1.048578 MHZ 32.768 KHZ
RS3 RS2 RS1 RS0 ÖÜÆÚÐÔÖÐ¶Ï ·½²¨ ÖÜÆÚÐÔÖÐ¶Ï ·½²¨
0 0 0 0 None None None None
0 0 0 1 30.517¦Ìs 32.768 KHZ 3.90625ms 256 HZ
0 0 1 0 61.035¦Ìs 16.384 KHZ
0 0 1 1 122.070¦Ìs 8.192KHZ
0 1 0 0 244.141¦Ìs 4.096KHZ
0 1 0 1 488.281¦Ìs 2.048KHZ
0 1 1 0 976.562¦Ìs 1.024KHZ
0 1 1 1 1.953125ms 512HZ
1 0 0 0 3.90625ms 256HZ
1 0 0 1 7.8125ms 128HZ
1 0 1 0 15.625ms 64HZ
1 0 1 1 31.25ms 32HZ
1 1 0 0 62.5ms 16HZ
1 1 0 1 125ms 8HZ
1 1 1 0 250ms 4HZ
1 1 1 1 500ms 2HZ
PC»úBIOS¶ÔÆäĬÈϵÄÉèÖÃÖµÊÇ¡°0110¡±¡£

״̬¼Ä´æÆ÷BµÄ¸ñʽÈçÏÂËùʾ£º
¸÷λµÄº¬ÒåÈçÏ£º
£¨1£©bit£Û7£Ý¡ª¡ªSET±êÖ¾¡£Îª1±íʾRTCµÄËùÓиüйý³Ì¶¼½«ÖÕÖ¹£¬Óû§³ÌÐòËæºóÂíÉ϶ÔÈÕÀú¼Ä´æÆ÷×éÖеÄÖµ½øÐгõʼ»¯ÉèÖá£Îª0
±íʾ½«ÔÊÐí¸üйý³Ì¼ÌÐø¡£
£¨2£©bit£Û6£Ý¡ª¡ªPIE±êÖ¾£¬ÖÜÆÚÐÔÖжÏʹÄܱêÖ¾¡£
£¨3£©bit£Û5£Ý¡ª¡ªAIE±êÖ¾£¬¸æ¾¯ÖжÏʹÄܱêÖ¾¡£
£¨4£©bit£Û4£Ý¡ª¡ªUIE±êÖ¾£¬¸üнáÊøÖжÏʹÄܱêÖ¾¡£
£¨5£©bit£Û3£Ý¡ª¡ªSQWE±êÖ¾£¬·½²¨ÐźÅʹÄܱêÖ¾¡£
£¨6£©bit£Û2£Ý¡ª¡ªDM±êÖ¾£¬ÓÃÀ´¿ØÖÆÈÕÀú¼Ä´æÆ÷×éµÄÊý¾Ýģʽ£¬0£½BCD£¬1£½BINARY¡£BIOS×ÜÊǽ«ËüÉèÖÃΪ0¡£
£¨7£©bit£Û1£Ý¡ª¡ª24£¯12±êÖ¾£¬ÓÃÀ´¿ØÖÆhour¼Ä´æÆ÷£¬0±íʾ12Ð¡Ê±ÖÆ£¬1±íʾ24Ð¡Ê±ÖÆ¡£PC»úBIOS×ÜÊǽ«ËüÉèÖÃΪ1¡£
£¨8£©bit£Û0£Ý¡ª¡ªDSE±êÖ¾¡£BIOS×ÜÊǽ«ËüÉèÖÃΪ0¡£

״̬¼Ä´æÆ÷CµÄ¸ñʽÈçÏ£º
£¨1£©bit£Û7£Ý¡ª¡ªIRQF±êÖ¾£¬ÖжÏÇëÇó±êÖ¾£¬µ±¸ÃλΪ1ʱ£¬ËµÃ÷¼Ä´æÆ÷BÖжÏÇëÇó·¢Éú¡£
£¨2£©bit£Û6£Ý¡ª¡ªPF±êÖ¾£¬ÖÜÆÚÐÔÖжϱêÖ¾£¬Îª1±íʾ·¢ÉúÖÜÆÚÐÔÖжÏÇëÇó¡£
£¨3£©bit£Û5£Ý¡ª¡ªAF±êÖ¾£¬¸æ¾¯ÖжϱêÖ¾£¬Îª1±íʾ·¢Éú¸æ¾¯ÖжÏÇëÇó¡£
£¨4£©bit£Û4£Ý¡ª¡ªUF±êÖ¾£¬¸üнáÊøÖжϱêÖ¾£¬Îª1±íʾ·¢Éú¸üнáÊøÖжÏÇëÇó¡£

״̬¼Ä´æÆ÷DµÄ¸ñʽÈçÏ£º
£¨1£©bit£Û7£Ý¡ª¡ªVRT±êÖ¾£¨Valid RAM and Time£©£¬Îª1±íʾOK£¬Îª0±íʾRTCÒѾ­µôµç¡£
£¨2£©bit£Û6£º0£Ý¡ª¡ª×ÜÊÇΪ0£¬Î´¶¨Òå¡£

7£®1£®1£®2 ͨ¹ýI/O¶Ë¿Ú·ÃÎÊRTC
ÔÚPC»úÖпÉÒÔͨ¹ýI/O¶Ë¿Ú0x70ºÍ0x71À´¶ÁдRTCоƬÖеļĴæÆ÷¡£ÆäÖУ¬¶Ë¿Ú0x70ÊÇRTCµÄ¼Ä´æÆ÷µØÖ·Ë÷Òý¶Ë¿Ú£¬0x71ÊÇÊý¾Ý¶Ë
¿Ú¡£
¶ÁRTCоƬ¼Ä´æÆ÷µÄ²½ÖèÊÇ£º
mov al, addr
out 70h, al ; Select reg_addr in RTC chip
jmp $+2 ; a slight delay to settle thing
in al, 71h ;
дRTC¼Ä´æÆ÷µÄ²½ÖèÈçÏ£º
mov al, addr
out 70h, al ; Select reg_addr in RTC chip
jmp $+2 ; a slight delay to settle thing
mov al, value
out 71h, al

7£®1£®2 ¿É±à³Ì¼ä¸ô¶¨Ê±Æ÷PIT
ÿ¸öPC»úÖж¼ÓÐÒ»¸öPIT£¬ÒÔͨ¹ýIRQ0²úÉúÖÜÆÚÐÔµÄʱÖÓÖжÏÐźš£µ±Ç°Ê¹ÓÃ×îÆÕ±éµÄÊÇIntel 8254 PITоƬ£¬ËüµÄI/O¶Ë¿ÚµØÖ·
ÊÇ0x40~0x43¡£
Intel 8254 PITÓÐ3¸ö¼ÆÊ±Í¨µÀ£¬Ã¿¸öͨµÀ¶¼ÓÐÆä²»Í¬µÄÓÃ;£º
£¨1£© ͨµÀ0ÓÃÀ´¸ºÔð¸üÐÂϵͳʱÖÓ¡£Ã¿µ±Ò»¸öʱÖӵδð¹ýȥʱ£¬Ëü¾Í»áͨ¹ýIRQ0Ïòϵͳ²úÉúÒ»´ÎʱÖÓÖжϡ£
£¨2£© ͨµÀ1ͨ³£ÓÃÓÚ¿ØÖÆDMAC¶ÔRAMµÄˢС£
£¨3£© ͨµÀ2±»Á¬½Óµ½PC»úµÄÑïÉùÆ÷£¬ÒÔ²úÉú·½²¨Ðźš£
ÿ¸öͨµÀ¶¼ÓÐÒ»¸öÏòϼõСµÄ¼ÆÊýÆ÷£¬8254 PITµÄÊäÈëʱÖÓÐÅºÅµÄÆµÂÊÊÇ1193181HZ£¬Ò²¼´Ò»ÃëÖÓÊäÈë1193181¸öclock-
cycle¡£Ã¿ÊäÈëÒ»¸öclock-cycleÆäʱ¼äͨµÀµÄ¼ÆÊýÆ÷¾ÍÏòϼõ1£¬Ò»Ö±¼õµ½0Öµ¡£Òò´Ë¶ÔÓÚͨµÀ0¶øÑÔ£¬µ±ËûµÄ¼ÆÊýÆ÷¼õµ½0
ʱ£¬PIT¾ÍÏòϵͳ²úÉúÒ»´ÎʱÖÓÖжϣ¬±íʾһ¸öʱÖӵδðÒѾ­¹ýÈ¥ÁË¡£µ±¸÷ͨµÀµÄ¼ÆÊýÆ÷¼õµ½0ʱ£¬ÎÒÃǾÍ˵¸ÃͨµÀ´¦ÓÚ¡°Terminal
count¡±×´Ì¬¡£
ͨµÀ¼ÆÊýÆ÷µÄ×î´óÖµÊÇ10000h£¬Ëù¶ÔÓ¦µÄʱÖÓÖÐ¶ÏÆµÂÊÊÇ1193181£¯£¨65536£©£½18.2HZ£¬Ò²¾ÍÊÇ˵£¬´ËʱһÃëÖÓÖ®ÄÚ½«²úÉú
18.2´ÎʱÖÓÖжϡ£

7£®1£®2£®1 PITµÄI/O¶Ë¿Ú
ÔÚi386ƽ̨ÉÏ£¬8254оƬµÄ¸÷¼Ä´æÆ÷µÄI/O¶Ë¿ÚµØÖ·ÈçÏ£º
Port Description
40h Channel 0 counter£¨read/write£©
41h Channel 1 counter£¨read/write£©
42h Channel 2 counter£¨read/write£©
43h PIT control word£¨write only£©
ÆäÖУ¬ÓÉÓÚͨµÀ0¡¢1¡¢2µÄ¼ÆÊýÆ÷ÊÇÒ»¸ö16λ¼Ä´æÆ÷£¬¶øÏàÓ¦µÄ¶Ë¿ÚÈ´¶¼ÊÇ8λµÄ£¬Òò´Ë¶ÁдͨµÀ¼ÆÊýÆ÷±ØÐë½øÐнøÐÐÁ½´ÎI/O¶Ë¿Ú¶Á
д²Ù×÷£¬·Ö±ð¶ÔÓ¦ÓÚ¼ÆÊýÆ÷µÄ¸ß×ֽں͵Í×Ö½Ú£¬ÖÁÓÚÊÇÏȶÁд¸ß×Ö½ÚÔÙ¶ÁдµÍ×Ö½Ú£¬»¹ÊÇÏȶÁдµÍ×Ö½ÚÔÙ¶Áд¸ß×Ö½Ú£¬ÔòÓÉPITµÄ¿Ø
ÖÆ¼Ä´æÆ÷À´¾ö¶¨¡£8254 PITµÄ¿ØÖƼĴæÆ÷µÄ¸ñʽÈçÏ£º
£¨1£©bit£Û7£º6£Ý¡ª¡ªSelect Counter£¬Ñ¡Ôñ¶ÔÄǸö¼ÆÊýÆ÷½øÐвÙ×÷¡£¡°00¡±±íʾѡÔñCounter 0£¬¡°01¡±±íʾѡÔñCounter
1£¬¡°10¡±±íʾѡÔñCounter 2£¬¡°11¡±±íʾRead-Back Command£¨½ö¶ÔÓÚ8254£¬¶ÔÓÚ8253ÎÞЧ£©¡£
£¨2£©bit£Û5£º4£Ý¡ª¡ªRead/Write/Latch¸ñʽλ¡£¡°00¡±±íÊ¾Ëø´æ£¨Latch£©µ±Ç°¼ÆÊýÆ÷µÄÖµ£»¡°01¡±Ö»¶Áд¼ÆÊýÆ÷µÄ¸ß×Ö½Ú
£¨MSB£©£»¡°10¡±Ö»¶Áд¼ÆÊýÆ÷µÄµÍ×Ö½Ú£¨LSB£©£»¡°11¡±±íʾÏȶÁд¼ÆÊýÆ÷µÄLSB£¬ÔÙ¶ÁдMSB¡£
£¨3£©bit£Û3£º1£Ý¡ª¡ªMode bits£¬¿ØÖƸ÷ͨµÀµÄ¹¤×÷ģʽ¡£¡°000¡±¶ÔÓ¦Mode 0£»¡°001¡±¶ÔÓ¦Mode 1£»¡°010¡±¶ÔÓ¦Mode 2£»¡°011¡±
¶ÔÓ¦Mode 3£»¡°100¡±¶ÔÓ¦Mode 4£»¡°101¡±¶ÔÓ¦Mode 5¡£
£¨4£©bit£Û0£Ý¡ª¡ª¿ØÖƼÆÊýÆ÷µÄ´æ´¢Ä£Ê½¡£0±íʾÒÔ¶þ½øÖƸñʽ´æ´¢£¬1±íʾ¼ÆÊýÆ÷ÖеÄÖµÒÔBCD¸ñʽ´æ´¢¡£

7£®1£®2£®2 PITͨµÀµÄ¹¤×÷ģʽ
PIT¸÷ͨµÀ¿ÉÒÔ¹¤×÷ÔÚÏÂÁÐ6ÖÖģʽÏ£º
1. Mode 0£ºµ±Í¨µÀ´¦ÓÚ¡°Terminal count¡±×´Ì¬Ê±²úÉúÖжÏÐźš£
2. Mode 1£ºHardware retriggerable one-shot¡£
3. Mode 2£ºRate Generator¡£ÕâÖÖģʽµäÐ͵ر»ÓÃÀ´²úÉúʵʱʱÖÓÖжϡ£´ËʱͨµÀµÄÐźÅÊä³ö¹Ü½ÅOUT³õʼʱ±»ÉèÖÃΪ¸ßµçƽ£¬
²¢ÒԴ˳ÖÐøµ½¼ÆÊýÆ÷µÄÖµ¼õµ½1¡£È»ºóÔÚ½ÓÏÂÀ´µÄÕâ¸öclock-cycleÆÚ¼ä£¬OUT¹Ü½Å½«±äΪµÍµçƽ£¬Ö±µ½¼ÆÊýÆ÷µÄÖµ¼õµ½0¡£µ±¼ÆÊý
Æ÷µÄÖµ±»×Ô¶¯µØÖØÐ¼ÓÔØºó£¬OUT¹Ü½ÅÓÖ±ä³É¸ßµçƽ£¬È»ºóÖØ¸´ÉÏÊö¹ý³Ì¡£Í¨µÀ0ͨ³£¹¤×÷ÔÚÕâ¸öģʽÏ¡£
4. Mode 3£º·½²¨Ðźŷ¢ÉúÆ÷¡£
5. Mode 4£ºSoftware triggered strobe¡£
6. Mode 5£ºHardware triggered strobe¡£

7£®1£®2£®3 Ëø´æ¼ÆÊýÆ÷£¨Latch Counter£©
µ±¿ØÖƼĴæÆ÷ÖеÄbit£Û5£º4£ÝÉèÖóÉ0ʱ£¬½«°Ñµ±Ç°Í¨µÀµÄ¼ÆÊýÆ÷ÖµËø´æ¡£´Ëʱͨ¹ýI/O¶Ë¿Ú¿ÉÒÔ¶Áµ½Ò»¸öÎȶ¨µÄ¼ÆÊýÆ÷Öµ£¬ÒòΪ¼Æ
ÊýÆ÷±íÃæÉÏÒѾ­Í£Ö¹ÏòϼÆÊý£¨PITоƬÄÚ²¿²¢Ã»ÓÐÍ£Ö¹ÏòϼÆÊý£©¡£NOTE£¡Ò»µ©·¢³öÁËËø´æÃüÁ¾ÍÒªÂíÉ϶Á¼ÆÊýÆ÷µÄÖµ¡£

7£®1£®3 ʱ¼ä´Á¼ÇÊýÆ÷TSC
´ÓPentium¿ªÊ¼£¬ËùÓеÄIntel 80x86 CPU¾Í¶¼ÓÖ°üº¬Ò»¸ö64λµÄʱ¼ä´Á¼ÇÊýÆ÷£¨TSC£©µÄ¼Ä´æÆ÷¡£¸Ã¼Ä´æÆ÷ʵ¼ÊÉÏÊÇÒ»¸ö²»¶ÏÔö
¼ÓµÄ¼ÆÊýÆ÷£¬ËüÔÚCPUµÄÿ¸öʱÖÓÐźŵ½À´Ê±¼Ó1£¨Ò²¼´Ã¿Ò»¸öclock-cycleÊäÈëCPUʱ£¬¸Ã¼ÆÊýÆ÷µÄÖµ¾Í¼Ó1£©¡£
»ã±àÖ¸Áîrdtsc¿ÉÒÔÓÃÓÚ¶ÁÈ¡TSCµÄÖµ¡£ÀûÓÃCPUµÄTSC£¬²Ù×÷ϵͳͨ³£¿ÉÒԵõ½¸üΪ¾«×¼µÄʱ¼ä¶ÈÁ¿¡£¼ÙÈçclock-cycleµÄƵÂÊÊÇ
400MHZ£¬ÄÇôTSC¾Í½«Ã¿2.5ÄÉÃëÔö¼ÓÒ»´Î¡£

7£®2 LinuxÄں˶ÔRTCµÄ±à³Ì
MC146818 RTCоƬ£¨»òÆäËû¼æÈÝоƬ£¬ÈçDS12887£©¿ÉÒÔÔÚIRQ8ÉϲúÉúÖÜÆÚÐÔµÄÖжϣ¬ÖÐ¶ÏµÄÆµÂÊÔÚ2HZ¡«8192HZÖ®¼ä¡£Óë
MC146818 RTC¶ÔÓ¦µÄÉ豸Çý¶¯³ÌÐòʵÏÖÔÚinclude/linux/rtc.hºÍdrivers£¯char/rtc.cÎļþÖУ¬¶ÔÓ¦µÄÉ豸ÎļþÊÇ£¯dev/
rtc£¨major=10,minor=135£¬Ö»¶Á×Ö·ûÉ豸£©¡£Òò´ËÓû§½ø³Ì¿ÉÒÔͨ¹ý¶ÔËý½øÐбà³ÌÒÔʹµÃµ±RTCµ½´ïij¸öÌØ¶¨µÄʱ¼äֵʱ¼¤»î
IRQ8Ïߣ¬´Ó¶ø½«RTCµ±×÷Ò»¸öÄÖÖÓÀ´Óá£
¶øLinuxÄں˶ÔRTCµÄΨһÓÃ;¾ÍÊǰÑRTCÓÃ×÷¡°ÀëÏß¡±»ò¡°ºǫ́¡±µÄʱ¼äÓëÈÕÆÚά»¤Æ÷¡£µ±LinuxÄÚºËÆô¶¯Ê±£¬Ëü´ÓRTCÖжÁȡʱ¼äÓë
ÈÕÆÚµÄ»ù×¼Öµ¡£È»ºóÔÙÔËÐÐÆÚ¼äÄں˾ÍÍêÈ«Å׿ªRTC£¬´Ó¶øÒÔÈí¼þµÄÐÎʽά»¤ÏµÍ³µÄµ±Ç°Ê±¼äÓëÈÕÆÚ£¬²¢ÔÚÐèҪʱ½«Ê±¼ä»ØÐ´µ½RTC
оƬÖС£
LinuxÔÚinclude/linux/mc146818rtc.hºÍinclude/asm-i386/mc146818rtc.hÍ·ÎļþÖзֱð¶¨ÒåÁËmc146818 RTCоƬ¸÷¼Ä
´æÆ÷µÄº¬ÒåÒÔ¼°RTCоƬÔÚi386ƽ̨ÉϵÄI/O¶Ë¿Ú²Ù×÷¡£¶øÍ¨ÓõÄRTC½Ó¿ÚÔòÉùÃ÷ÔÚinclude/linux/rtc.hÍ·ÎļþÖС£

7£®2£®1 RTCоƬµÄI/O¶Ë¿Ú²Ù×÷
LinuxÔÚinclude/asm-i386/mc146818rtc.hÍ·ÎļþÖж¨ÒåÁËRTCоƬµÄI/O¶Ë¿Ú²Ù×÷¡£¶Ë¿Ú0x70±»³ÆÎª¡°RTC¶Ë¿Ú0¡±£¬¶Ë¿Ú0x71
±»³ÆÎª¡°RTC¶Ë¿Ú1¡±£¬ÈçÏÂËùʾ£º
#ifndef RTC_PORT
#define RTC_PORT(x) (0x70 + (x))
#define RTC_ALWAYS_BCD 1 /* RTC operates in binary mode */
#endif
ÏÔÈ»£¬RTC_PORT(0)¾ÍÊÇÖ¸¶Ë¿Ú0x70£¬RTC_PORT(1)¾ÍÊÇÖ¸I/O¶Ë¿Ú0x71¡£
¶Ë¿Ú0x70±»ÓÃ×÷RTCоƬÄÚ²¿¼Ä´æÆ÷µÄµØÖ·Ë÷Òý¶Ë¿Ú£¬¶ø¶Ë¿Ú0x71Ôò±»ÓÃ×÷RTCоƬÄÚ²¿¼Ä´æÆ÷µÄÊý¾Ý¶Ë¿Ú¡£ÔÙ¶Áдһ¸öRTC¼Ä´æÆ÷
֮ǰ£¬±ØÐëÏȰѸüĴæÆ÷ÔÚRTCоƬÄÚ²¿µÄµØÖ·Ë÷Òýֵдµ½¶Ë¿Ú0x70ÖС£¸ù¾ÝÕâÒ»µã£¬¶Áдһ¸öRTC¼Ä´æÆ÷µÄºê¶¨ÒåCMOS_READ()ºÍ
CMOS_WRITE()ÈçÏ£º
#define CMOS_READ(addr) ({
outb_p((addr),RTC_PORT(0));
inb_p(RTC_PORT(1));
})
#define CMOS_WRITE(val, addr) ({
outb_p((addr),RTC_PORT(0));
outb_p((val),RTC_PORT(1));
})
#define RTC_IRQ 8
ÔÚÉÏÊöºê¶¨ÒåÖУ¬²ÎÊýaddrÊÇRTC¼Ä´æÆ÷ÔÚоƬÄÚ²¿µÄµØÖ·Öµ£¬È¡Öµ·¶Î§ÊÇ0x00~0x3F£¬²ÎÊývalÊÇ´ýдÈë¼Ä´æÆ÷µÄÖµ¡ LinuxÁªÃËÊÕ¼¯ÕûÀí ,תÌùÇë±êÃ÷ԭʼÁ´½Ó,ÈçÓÐÈκÎÒÉÎÊ»¶Ó­À´±¾Õ¾LinuxÂÛ̳ÌÖÂÛ
·ÖÒ³£º[1] 2 3 4 5 6 7
¡¾ÆÀÂÛ¡¿¡¾¼ÓÈëÊղؼС¿¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿¡¾¹Ø±Õ¡¿
¡ù Ïà¹ØÁ´½Ó
ÎÞÏà¹ØÐÅÏ¢