ÎÒÃÇ´óÖÂÁ˽âÁËMMUÔÚÎÒÃǵĻúÆ÷ÖаçÑÝÁËʲô½ÇÉ«ÒÔ¼°Ëü»ù±¾µÄ¹¤×÷ÄÚÈÝÊÇʲô£¬ÏÂÃæÎÒÃǽ«¾ÙÀý×Ó˵Ã÷Ëü¾¿¾¹ÊÇÈçºÎ¹¤×÷µÄ£¨×¢Ò⣬±¾ÀýÖеÄMMU²¢ÎÞÕë¶ÔijÖÖÌض¨µÄ»úÐÍ£¬ËüÊÇËùÓÐMMU¹¤×÷µÄÒ»¸ö³éÏ󣩡£
Ê×ÏÈÃ÷È·Ò»µã£¬MMUµÄÖ÷Òª¹¤×÷Ö»ÓÐÒ»¸ö£¬¾ÍÊÇ°ÑÐéÄâµØÖ·Ó³Éäµ½ÎïÀíµØÖ·¡£
ÎÒÃÇÒѾ֪µÀ£¬´ó¶àÊýʹÓÃÐéÄâ´æ´¢Æ÷µÄϵͳ¶¼Ê¹ÓÃÒ»ÖÖ³ÆΪ·ÖÒ³£¨paging£©µÄ¼¼Êõ£¬¾ÍÏóÎÒÃǸղÅËù¾ÙµÄÀý×Ó£¬ÐéÄâµØÖ·¿Õ¼ä±»·Ö³É´óСÏàͬµÄÒ»×éÒ³£¬Ã¿¸öÒ³ÓÐÒ»¸öÓÃÀ´±êʾËüµÄÒ³ºÅ£¨Õâ¸öÒ³ºÅÒ»°ãÊÇËüÔÚ¸Ã×éÖеÄË÷Òý£¬ÕâµãºÍC/C++ÖеÄÊý×éÏàËÆ£©¡£ÔÚÉÏÃæµÄÀý×ÓÖÐ0~4KµÄÒ³ºÅΪ0£¬4~8KµÄÒ³ºÅΪ1£¬8~12KµÄÒ³ºÅΪ2£¬ÒÔ´ËÀàÍÆ¡£¶øÐéÄâµØÖ·£¨×¢Ò⣺ÊÇÒ»¸öÈ·¶¨µÄµØÖ·£¬²»ÊÇÒ»¸ö¿Õ¼ä£©±»MMU·ÖΪ2¸ö²¿·Ö£¬µÚÒ»²¿·ÖÊÇÒ³ºÅË÷Òý£¨page Index£©£¬µÚ¶þ²¿·ÖÔòÊÇÏà¶Ô¸ÃÒ³Ê×µØÖ·µÄÆ«ÒÆÁ¿£¨offset£©. ¡£ÎÒÃÇ»¹ÊÇÒÔ¸Õ²ÅÄǸö16λ»úÆ÷½áºÏÏÂͼ½øÐÐÒ»¸öʵÀý˵Ã÷£¬¸ÃʵÀýÖУ¬ÐéÄâµØÖ·8196±»ËͽøMMU,MMU°ÑËüÓ³Éä³ÉÎïÀíµØÖ·¡£16λµÄCPU×ܹ²ÄܲúÉúµÄµØÖ··¶Î§ÊÇ0~64K,°´Ã¿Ò³4KµÄ´óС¼ÆË㣬¸Ã¿Õ¼ä±ØÐë±»·Ö³É16¸öÒ³¡£¶øÎÒÃǵÄÐéÄâµØÖ·µÚÒ»²¿·ÖËùÄܹ»±í´ïµÄ·¶Î§Ò²±ØÐëµÈÓÚ16£¨ÕâÑù²ÅÄÜË÷Òýµ½¸ÃÒ³×éÖеÄÿһ¸öÒ³£©,Ò²¾ÍÊÇ˵Õâ¸ö²¿·ÖÖÁÉÙÐèÒª4¸öbit¡£Ò»¸öÒ³µÄ´óСÊÇ4K(4096),Ò²¾ÍÊÇ˵ƫÒƲ¿·Ö±ØÐëʹÓÃ12¸öbitÀ´±íʾ(2^12=4096£¬ÕâÑù²ÅÄÜ·ÃÎʵ½Ò»¸öÒ³ÖеÄËùÓеØÖ·),8196µÄ¶þ½øÖÆÂëÈçÏÂͼËùʾ£º
¸ÃµØÖ·µÄÒ³ºÅË÷ÒýΪ0010£¨¶þ½øÖÆÂ룩£¬¼ÈË÷ÒýµÄҳΪҳ2£¬µÚ¶þ²¿·ÖΪ000000000100£¨¶þ½øÖÆ£©£¬Æ«ÒÆÁ¿Îª4¡£Ò³2ÖеÄÒ³¿òºÅΪ6£¨Ò³2Ó³ÉäÔÚÒ³¿ò6£¬¼ûÉÏͼ£©£¬ÎÒÃÇ¿´µ½Ò³¿ò6µÄÎïÀíµØÖ·ÊÇ24~28K¡£ÓÚÊÇMMU¼ÆËã³öÐéÄâµØÖ·8196Ó¦¸Ã±»Ó³Éä³ÉÎïÀíµØÖ·24580£¨Ò³¿òÊ×µØÖ·+Æ«ÒÆÁ¿=24576+4=24580£©¡£Í¬ÑùµÄ£¬ÈôÎÒÃǶÔÐéÄâµØÖ·1026½øÐжÁÈ¡£¬1026µÄ¶þ½øÖÆÂëΪ0000010000000010£¬page index="0000"=0,offset=010000000010=1026¡£Ò³ºÅΪ0£¬¸ÃÒ³Ó³ÉäµÄÒ³¿òºÅΪ2£¬Ò³¿ò2µÄÎïÀíµØÖ··¶Î§ÊÇ8192~12287£¬¹ÊMMU½«ÐéÄâµØÖ·1026Ó³ÉäΪÎïÀíµØÖ·9218£¨Ò³¿òÊ×µØÖ·+Æ«ÒÆÁ¿=8192+1026=9218£©¡£ÒÔÉϾÍÊÇMMUµÄ¹¤×÷¹ý³Ì¡£
Èý¡¢S3C24XXµÄMMU¹¤×÷¹ý³Ì
ÏÂÃæÎÒÃÇÕë¶Ôs3c2410µÄMMU(×¢1)½øÐн²½â¡£
S3c2410×ܹ²ÓÐ4ÖÖÄÚ´æÓ³É䷽ʽ£¬·Ö±ðÊÇ£º
1£®Fault (ÎÞÓ³Éä)
2£®Coarse Page (´Ö±í)
3£®Section (¶Î)
4£®Fine Page (ϸ±í)
ÎÒÃÇÒÔSection(¶Î)½øÐÐ˵Ã÷¡£
ARM920TÊÇÒ»¸ö32bitµÄCPU,ËüµÄÐéÄâµØÖ·¿Õ¼äΪ2^32=4G¡£¶øÔÚSectionģʽ£¬Õâ4GµÄÐéÄâ¿Õ¼ä±»·Ö³ÉÒ»¸öÒ»¸ö³ÆΪ¶Î£¨Section£©µÄµ¥Î»(ÓëÎÒÃÇÉÏÃæ½²µÄÒ³ÔÚ±¾ÖÊÉÏÆäʵÊÇÒ»ÖµÄ),ÿ¸ö¶ÎµÄ³¤¶ÈÊÇ1M (¶øÎÒÃÇ֮ǰËùʹÓõÄÒ³µÄ³¤¶ÈÊÇ4K)¡£4GµÄÐéÄâÄÚ´æ×ܹ²¿ÉÒÔ±»·Ö³É4096¸ö¶Î£¨1M*4096=4G£©,Òò´ËÎÒÃDZØÐëÓÃ4096¸öÃèÊö·ûÀ´¶ÔÕâ×é¶Î½øÐÐÃèÊö£¬Ã¿¸öÃèÊö·ûÕ¼ÓÃ4¸öByte,¹ÊÕâ×éÃèÊö·ûµÄ´óСΪ16KB (4byte*4096),Õâ4096¸öÃèÊö·û¹¹ÎªÒ»¸ö±í¸ñ£¬ÎÒÃdzÆÆäΪTralaton Table.
ÉÏͼÊÇÃèÊö·ûµÄ½á¹¹
Section base address:¶Î»ùµØÖ·£¨Ï൱ÓÚÒ³¿òºÅÊ×µØÖ·£©
AP: ·ÃÎÊ¿ØÖÆλAccess Permission
Domain: ·ÃÎÊ¿ØÖƼĴæÆ÷µÄË÷Òý¡£DomainÓëAPÅäºÏʹÓ㬶ԷÃÎÊȨÏÞ½øÐмì²é
C:µ±C±»ÖÃ1ʱΪwrite-through (WT)ģʽ
B: µ±B±»ÖÃ1ʱΪwrite-back (WB)ģʽ£¨C,BÁ½¸öλÔÚͬһʱ¿ÌÖ»ÄÜÓÐÒ»¸ö±»ÖÃ1£©
ÏÂÃæÊÇs3c2410ÄÚ´æÓ³ÉäºóµÄÒ»¸öʾÒâͼ£º
ÎÒµÄs3c2410ÉÏÅäÖõÄSDRSAM´óСΪ64M,¸ÃSDRAMµÄÎïÀíµØÖ··¶Î§ÊÇ0x3000 0000~0x33FF FFFF(ÊôÓÚBank 6)£¬ÓÉÓÚ1¸öSectionµÄ´óСÊÇ1M,ËùÒÔ¸ÃÎïÀí¿Õ¼ä¿ÉÒÔ±»·Ö³É64¸öÎïÀí¶Î(Ò³¿ò).
ÔÚSectionģʽÏ£¬ËͽøMMUµÄÐéÄâµØÖ·(×¢1)±»·ÖΪÁ½²¿·Ö£¨ÕâµãºÍÎÒÃÇÉÏÃæ¾ÙµÄÀý×ÓÊÇÒ»ÑùµÄ£©£¬ÕâÁ½²¿·ÖΪ Descriptor Index(Ï൱ÓÚÉÏÃæÀý×ÓµÄPage Index)ºÍ Offset,descript index³¤¶ÈΪ12bit(2^12=4096,´ÓÕâ¸ö¹ØϵʽÄãÄÜ¿´³öʲô£¿£º) )£¬Offset³¤¶ÈΪ20bit£¨2^20=1M£¬ÄãÓÖÄÜ¿´³öʲô£¿£º)£©.¹Û²ìÒ»ÏÂÒ»¸öÃèÊö·û£¨Descriptor£©ÖеÄSection Base Address²¿·Ö£¬Ëü³¤¶ÈΪ12 bit£¬ÀïÃæµÄÖµÊǸÃÐéÄâ¶Î£¨Ò³£©Ó³Éä³ÉµÄÎïÀí¶Î£¨Ò³¿ò£©µÄÎïÀíµØÖ·Ç°12bit£¬ÓÉÓÚÿһ¸öÎïÀí¶ÎµÄ³¤¶È¶¼ÊÇ1M£¬ËùÒÔÎïÀí¶ÎÊ×µØÖ·µÄºó20bit×ÜÊÇΪ0x00000(ÿ¸öSection¶¼ÊÇÒÔ1M¶ÔÆë)£¬È·¶¨Ò»¸öÎïÀíµØÖ·µÄ·½·¨ÊÇ ÎïÀíÒ³¿ò»ùµØÖ·+ÐéÄâµØÖ·ÖеÄÆ«ÒƲ¿·Ö=Section Base Address<<20+Offset ,ºÇºÇ£¬¿ÉÄÜÄãÓеãºýÍ¿ÁË£¬»¹ÊǾÙÒ»¸öʵ¼ÊÀý×Ó˵Ã÷°É¡£
¼ÙÉèÏÖÔÚÖ´ÐÐÖ¸ÁîMOV REG, 0x30000012£¬ÐéÄâµØÖ·µÄ¶þ½øÖÆÂëΪ00110000 00000000 00000000 00010010£¬Ç°12λÊÇDescriptor Index= 00110000 0000=768,¹ÊÔÚTranslation TableÀïÃæÕÒµ½µÚ768ºÅÃèÊö·û£¬¸ÃÃèÊöµÄSection Base Address="0x0300",Ò²¾ÍÊÇ˵ÃèÊö·ûËùÃèÊöµÄÐéÄâ¶Î£¨Ò³£©ËùÓ³ÉäµÄÎïÀí¶Î£¨Ò³¿ò£©µÄÊ×µØַΪ0x3000 0000£¨ÎïÀí¶Î£¨Ò³¿ò£©µÄ»ùµØÖ·=Section Base Address×óÒÆ20bit=0x0300<<20=0x3000 0000£©£¬¶øOffset=000000 00000000 00010010=0x12,¹ÊÐéÄâµØÖ·0x30000012Ó³Éä³ÉµÄÎïÀíµØÖ·=0x3000 0000+0x12=0x3000 0012£¨ÎïÀíÒ³¿ò»ùµØÖ·+ÐéÄâµØÖ·ÖеÄÆ«ÒÆ£©¡£Äã¿ÉÄÜ»áÎÊÔõôÕâ¸öÐéÄâµØÖ·ºÍÓ³ÉäºóµÄÎïÀíµØÖ·Ò»Ñù£¿ÕâÊÇÓÉÎÒÃǶ¨ÒåµÄÓ³Éä¹æÔòËù¾ö¶¨µÄ¡£ÔÚÕâ¸öÀý×ÓÖÐÎÒÃǶ¨ÒåµÄÓ³Éä¹æÔòÊÇ°ÑÐéÄâµØÖ·Ó³Éä³ÉºÍËûÏàµÈµÄÎïÀíµØÖ·¡£ÎÒÃÇÕâÑùÊéдӳÉä¹ØϵµÄ´úÂ룺
void mem_mapping_linear(void)
{
unsigned long descriptor_index, section_base, sdram_base, sdram_size;
sdram_base=0x30000000;
sdram_size=0x 4000000;
for (section _base= sdram_base,descriptor_index = section _base>>20;
section _base < sdram_base+ sdram_size;
descriptor_index+=1;section _base +=0x100000)
{
*(mmu_tlb_base + (descriptor_index)) = (section _base>>20) | MMU_OTHER_SECDESC;
}
}
ÉÏÃæµÄÕâ¶Î¶Î´úÂë°ÑÐéÄâ¿Õ¼ä0x3000 0000~0x33FF FFFFÓ³Éäµ½ÎïÀí¿Õ¼ä0x3000 0000~0x33FF FFFF£¬ÓÉÓÚÐéÄâ¿Õ¼äÓëÎïÀí¿Õ¼ä¿Õ¼äÏàÎǺϣ¬ËùÒÔÐéÄâµØÖ·ÓëËûÃǸ÷×Ô¶ÔÓ¦µÄÎïÀíµØÖ·ÔÚÖµÉÏÊÇÒ»Öµġ£µ±³õʼÍêTranslation TableÖ®ºó£¬¼ÇµÃÒª°ÑTranslation TableµÄÊ×µØÖ·(µÚ0ºÅÃèÊö·ûµÄµØÖ·)¼ÓÔؽøд¦ÀíÆ÷CP15µÄControl Register2(2ºÅ¿ØÖƼĴæÆ÷)ÖÐ,¸Ã¿ØÖƼĴæÆ÷µÄÃû³Æ½Ð×öTranslation table base (TTB) register¡£
ÒÔÉÏÌÖÂÛµÄÊÇdescriptorÖеÄSection Base AddressÒÔ¼°ÐéÄâµØÖ·ºÍÎïÀíµØÖ·µÄÓ³Éä¹Øϵ,È»¶øMMU»¹ÓÐÒ»¸öÖØÒªµÄ¹¦ÄÜ£¬ÄǾÍÊÇ·ÃÎÊ¿ØÖÆ»úÖÆ(Access Permission )¡£¼òµ¥Ëµ·ÃÎÊ¿ØÖÆ»úÖƾÍÊÇCPUͨ¹ýijÖÖ·½·¨Åжϵ±Ç°³ÌÐò¶ÔÄÚ´æµÄ·ÃÎÊÊÇ·ñºÏ·¨£¨ÊÇ·ñÓÐȨÏÞ¶Ô¸ÃÄÚ´æ½øÐзÃÎÊ£©£¬Èç¹ûµ±Ç°µÄ³ÌÐò²¢Ã»ÓÐȨÏÞ¶Ô¼´½«·ÃÎʵÄÄÚ´æÇøÓò½øÐвÙ×÷£¬ÔòCPU½«Òý·¢Ò»¸öÒì³££¬s3c2410³Æ¸ÃÒ쳣ΪPermission fault£¬x86¼Ü¹¹Ôò°ÑÕâÖÖÒì³£³Æ֮ΪͨÓñ£»¤Òì³££¨General Protection£©£¬Ê²Ã´Çé¿ö»áÒýÆðPermission faultÄØ£¿±ÈÈç´¦ÓÚUser¼¶±ðµÄ³ÌÐòÒª¶ÔÒ»¸öSystem¼¶±ðµÄÄÚ´æÇøÓò½øÐÐд²Ù×÷£¬ÕâÖÖ²Ù×÷ÊÇԽȨµÄ£¬Ó¦¸ÃÒýÆðÒ»¸öPermission fault£¬¸ã¹ýx86¼Ü¹¹µÄÅóÓÑÓ¦¸ÃÌý¹ý±£»¤Ä£Ê½£¨Protection Mode£©,±£»¤Ä£Ê½¾ÍÊÇ»ùÓÚÕâÖÖ˼Ïë½øÐй¤×÷µÄ£¬ÓÚÊÇÎÒÃÇÒ²¿ÉÒÔÕâô˵£ºs3c2410µÄ·ÃÎÊ¿ØÖÆ»úÖÆÆäʵ¾ÍÊÇÒ»ÖÖ±£»¤»úÖÆ¡£ÄÇs3c2410µÄ·ÃÎÊ¿ØÖÆ»úÖƵ½µ×ÊÇÓÉʲôԪËØÈ¥²ÎÓëÍê³ÉµÄÄØ£¿ËüÃǼäÊÇÔõôе÷¹¤×÷µÄÄØ£¿ÕâЩԪËØ×ܹ²ÓУº
1£®Ð´¦ÀíÆ÷CP15ÖÐControl Register3£ºDOMAIN ACCESS CONTROL REGISTER
2£®¶ÎÃèÊö·ûÖеÄAPλºÍDomainλ
3£®Ð´¦ÀíÆ÷CP15ÖÐControl Register1(¿ØÖƼĴæÆ÷1)ÖеÄS bitºÍR bit
4£®Ð´¦ÀíÆ÷CP15ÖÐControl Register5(¿ØÖƼĴæÆ÷5)
5£®Ð´¦ÀíÆ÷CP15ÖÐControl Register6(¿ØÖƼĴæÆ÷6)
DOMAIN ACCESS CONTROL REGISTER ÊÇ·ÃÎÊ¿ØÖƼĴæÆ÷£¬¸Ã¼Ä´æÆ÷ÓÐЧλΪ32£¬±»·Ö³É16¸öÇøÓò£¬Ã¿¸öÇøÓòÓÉÁ½¸öλ×é³É£¬ËûÃÇ˵Ã÷Á˵±Ç°ÄÚ´æµÄ·ÃÎÊȨÏÞ¼ì²éµÄ¼¶±ð£¬ÈçÏÂͼËùʾ£º
ÿÇøÓò¿ÉÒÔÌîдµÄÖµÓÐ4¸ö£¬·Ö±ðΪ00,01,10,11(¶þ½øÖÆ)£¬ËûÃǵÄÒâÒåÈçÏÂËùʾ£º
00£ºµ±Ç°¼¶±ðÏ£¬¸ÃÄÚ´æÇøÓò²»ÔÊÐí±»·ÃÎÊ£¬ÈκεķÃÎʶ¼»áÒýÆðÒ»¸ödomain fault
01£ºµ±Ç°¼¶±ðÏ£¬¸ÃÄÚ´æÇøÓòµÄ·ÃÎʱØÐëÅäºÏ¸ÃÄÚ´æÇøÓòµÄ¶ÎÃèÊö·ûÖÐAPλ½øÐÐȨ¼ì²é
10£º±£Áô״̬£¨ÎÒÃÇ×îºÃ²»ÒªÌîд¸ÃÖµ£¬ÒÔÃâÒýÆð²»ÄÜÈ·¶¨µÄÎÊÌ⣩
11£ºµ±Ç°¼¶±ðÏ£¬¶Ô¸ÃÄÚ´æÇøÓòµÄ·ÃÎʶ¼²»½øÐÐȨÏÞ¼ì²é¡£
ÎÒÃÇÔÙÀ´¿´¿´discriptorÖеÄDomainÇøÓò£¬¸ÃÇøÓò×ܹ²ÓÐ4¸öbit,ÀïÃæµÄÖµÊǶÔDOMAIN ACCESS CONTROL REGISTERÖÐ16¸öÇøÓòµÄË÷Òý.¶øAPλÅäºÏS bitºÍA bit¶Ôµ±Ç°ÃèÊö·ûÃèÊöµÄÄÚ´æÇøÓò±»·ÃÎÊȨÏÞµÄ˵Ã÷,ËûÃǵÄÅäºÏ¹ØϵÈçÏÂͼËùʾ:
APλҲÊÇÓÐËĸöÖµ,ÎÒ½áºÏʵÀý¶ÔÆä½øÐÐ˵Ã÷.
ÔÚÏÂÃæµÄÀý×ÓÖУ¬ÎÒÃǵÄDOMAIN ACCESS CONTROL REGISTER¶¼±»³õʼ»¯³É0xFFFF BDCF,ÈçÏÂͼËùʾ£º
Àý1£º
Discriptor ÖеÄdomain=4,AP=10(ÕâÖÖÇé¿öÏÂS bit ,A bit ±»ºöÂÔ)
¼ÙÉèÏÖÔÚÎÒÒª¶Ô¸ÃÃèÊö·ûÃèÊöµÄÄÚ´æÇøÓò½øÐзÃÎÊ£º
ÓÉÓÚdomain=4,¶øDOMAIN ACCESS CONTROL REGISTERÖÐfield 4µÄÖµÊÇ01£¬ÏµÍ³»á¶Ô¸Ã·ÃÎʽøÐзÃÎÊȨÏ޵ļì²é¡£
¼ÙÉ赱ǰCPU´¦ÓÚSupervisorģʽÏ£¬Ôò³ÌÐò¿ÉÒÔ¶Ô¸ÃÃèÊö·ûÃèÊöµÄÄÚ´æÇøÓò½øÐжÁд²Ù×÷¡£
¼ÙÉ赱ǰCPU´¦ÓÚUserģʽÏ£¬Ôò³ÌÐò¿ÉÒÔ¶Ô¸ÃÃèÊö·ûÃèÊöµÄÄÚ´æ½øÐжÁ·ÃÎÊ£¬Èô¶ÔÆä½øÐÐд²Ù×÷ÔòÒýÆðÒ»¸öpermission fault.
Àý2£º
Discriptor ÖеÄdomain=0,AP=10(ÕâÖÖÇé¿öÏÂS bit ,A bit ±»ºöÂÔ)
domain=0,¶øDOMAIN ACCESS CONTROL REGISTERÖÐfield 0µÄÖµÊÇ11£¬ÏµÍ³¶ÔÈκÎÄÚ´æÇøÓòµÄ·ÃÎʶ¼²»½øÐзÃÎÊȨÏ޵ļì²é¡£
ÓÉÓÚͳ¶ÔÈκÎÄÚ´æÇøÓòµÄ·ÃÎʶ¼²»½øÐзÃÎÊȨÏ޵ļì²é£¬ËùÒÔÎÞÂÛCPU´¦ÓÚºÏÖÖģʽÏ£¨Supervisorģʽ»òÊÇUserģʽ£©£¬³ÌÐò¶Ô¸ÃÃèÊö·ûÃèÊöµÄÄڴ涼¿ÉÒÔ˳ÀûµØ½øÐжÁд²Ù×÷
Àý3£ºDiscriptor ÖеÄdomain=4,AP=11(ÕâÖÖÇé¿öÏÂS bit ,A bit ±»ºöÂÔ)
ÓÉÓÚdomain=4,¶øDOMAIN ACCESS CONTROL REGISTERÖÐfield 4µÄÖµÊÇ01£¬ÏµÍ³»á¶Ô¸Ã·ÃÎʽøÐзÃÎÊȨÏ޵ļì²é¡£
ÓÉÓÚAP=11£¬ËùÒÔÎÞÂÛCPU´¦ÓÚºÏÖÖģʽÏ£¨Supervisorģʽ»òÊÇUserģʽ£©£¬³ÌÐò¶Ô¸ÃÃèÊö·ûÃèÊöµÄÄڴ涼¿ÉÒÔ˳ÀûµØ½øÐжÁд²Ù×÷
Àý4£º
Discriptor ÖеÄdomain=4,AP=00, S bit="0",A bit="0"
ÓÉÓÚdomain=4,¶øDOMAIN ACCESS CONTROL REGISTERÖÐfield 4µÄÖµÊÇ01£¬ÏµÍ³»á¶Ô¸Ã·ÃÎʽøÐзÃÎÊȨÏ޵ļì²é¡£
ÓÉÓÚAP=00£¬S bit="0",A bit="0",ËùÒÔÎÞÂÛCPU´¦ÓÚºÏÖÖģʽÏ£¨Supervisorģʽ»òÊÇUserģʽ£©£¬³ÌÐò¶Ô¸ÃÃèÊö·ûÃèÊöµÄÄڴ涼ֻÄܽøÐжÁ²Ù×÷£¬·ñÔòÒýÆðpermission fault.
ͨ¹ýÒÔÉÏ4¸öÀý×ÓÎÒÃǵóöÁ½¸ö½áÂÛ£º
1£®¶Ôij¸öÄÚ´æÇøÓòµÄ·ÃÎÊÊÇ·ñÐèÒª½øÐÐȨÏÞ¼ì²éÊÇÓɸÃÄÚ´æÇøÓòµÄÃèÊö·ûÖеÄDomainÓò¾ö¶¨µÄ¡£
2£®Ä³¸öÄÚ´æÇøÓòµÄ·ÃÎÊȨÏÞÊÇÓɸÃÄÚ´æÇøÓòµÄÃèÊö·ûÖеÄAPλºÍд¦ÀíÆ÷CP15ÖÐControl Register1(¿ØÖƼĴæÆ÷1)ÖеÄS bitºÍR bitËù¾ö¶¨µÄ¡£
תÔØ×Ô£ºhttps://blog.csdn.net/yuhaoo/article/details/44200131