26、(5)Linux内核启动引导阶段之 __arm920_steup函数分析

此函数的功能主要是:禁止ICache、DCache、数据Cache、指令Cache

 

在 arch/arm/kernel/head.S 中:

363     .type  __arm920_setup, #function     //函数

364  __arm920_setup:                          声明//

365    mov r0, #0                       //r0清零

366    mcr p15, 0, r0, c7, c7       //使无整个数据cache和指令cache

367    mcr p15, 0, r0, c7, c10, 4   //清空写缓冲     366、367两行,查看C7,<ARM体系结构与编程> P205   

368  #ifdef CONFIG_MMU

369    mcr p15, 0, r0, c8, c7   //如果有配置了MMU,则需要清除(invalidate)Instruction TLB 和Data TLB

370  #endif

 

371    adr r5, arm920_crval      //取arm920_crval的地址到r5中,arm920_crval 在第386行,宏crval在“arch/arm/mm/proc-                                   macro.S”中定义,如下所示:

              .macro crval, clear, mmuset, ucset

#ifdef CONFIG_MMU

              .word   \clear

              .word   \mmuset

#else

              .word   \clear

              .word   \ucset

#endif

              .endm 

  由上可知,首先在arm926_crval的地址处存放了clear的值,然后接下来的地址存放了mmuset的值(对于配置了MMU的情况)   

 

372    ldmia  r5, {r5, r6}      //将clear、mmuset的值作别存入r5、r6

373    mrc p15, 0, r0, c1, c0   //将寄存器C1中的值读到ARM寄存器R0中

                                C1寄存器,请看<ARM体系结构与编程> P174

374    bic r0, r0, r5      //由第387行知,r5=0x00003f3f (清除位)   

375    orr r0, r0, r6         r6=0x00003135(置位) ,r0就是c1寄存器

376    mov pc, lr

377    .size   __arm920_setup, . - __arm920_setup

 

   

385    .type  arm920_crval, #object

386   arm920_crval:

387      crval clear=0x00003f3f, mmuset=0x00003135, ucset=0x00001130

 

389 __INITDATA

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值