Embedded 版 (精华区)

发信人: snows (花自飘零水自流), 信区: Embedded
标  题: 长篇连载--arm linux演艺---第七回 
发信站: 哈工大紫丁香 (2004年03月16日12:52:15 星期二), 站内信件

ZZ

上回书讲到已经设置好了内核的页表,然后要跳转到__arm920_setup,
这个函数在arch/arm/mm/proc-arm929.s

__arm920_setup:
mov r0, #0
mcr p15, 0, r0, c7, c7 @ invalidate I,D caches on v4
mcr p15, 0, r0, c7, c10, 4@ drain write buffer on v4
mcr p15, 0, r0, c8, c7 @ invalidate I,D TLBs on v4
mcr p15, 0, r4, c2, c0 @ load page table pointer
mov r0, #0x1f @ Domains 0, 1 = client
mcr p15, 0, r0, c3, c0 @ load domain access register
mrc p15, 0, r0, c1, c0 @ get control register v4
/*
* Clear out 'unwanted' bits (then put them in if we need them)
*/
@ VI ZFRS BLDP WCAM
bic r0, r0, #0x0e00
bic r0, r0, #0x0002
bic r0, r0, #0x000c
bic r0, r0, #0x1000 @ ...0 000. .... 000.
/*
* Turn on what we want
*/
orr r0, r0, #0x0031
orr r0, r0, #0x2100 @ ..1. ...1 ..11 ...1

#ifdef CONFIG_CPU_ARM920_D_CACHE_ON
orr r0, r0, #0x0004 @ .... .... .... .1..
#endif
#ifdef CONFIG_CPU_ARM920_I_CACHE_ON
orr r0, r0, #0x1000 @ ...1 .... .... ....
#endif
mov pc, lr

这一段首先关闭i,d cache,清除write buffer ,然后设置页目录地址,设置
domain的保护,在上节中,注意到页目录项的domain都是0,domain寄存器中
的domain 0 对应的是0b11,表示访问模式为manager,不受限制。

接下来设置控制寄存器,打开d,i cache和mmu
注意arm的d cache必须和mmu一起打开,而i cache可以单独打开

其实,cache和mmu的关系实在是紧密,每一个页表项都有标志标示是否是
cacheable的,可以说本来就是设计一起使用的

最后,自函数返回后,有一句
mcr p15, 0, r0, c1, c0
使设置生效。 
--
-
 ╭────────────────────────────╮
 │   风萧传瑟声,叶落根深处,青阶入野无归途,他乡不知顾   │
 │   泣下问和谁,叹者行已暮,寒眉傲骨今尚在,奈何入凡土   │
 ╰────────────────────────────╯
                                                                             

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.229.154]
※ 修改:·snows 於 03月16日12:55:47 修改本文·[FROM: 202.118.229.154]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.103毫秒