u-boot关闭MMU和I/D Cach

来源:互联网 发布:2.5平衡口耳机 知乎 编辑:程序博客网 时间:2024/06/05 12:45

ARM存储体系

u-boot关闭MMU和I/D <wbr>Cach

处理器内部处理器:速度快,数量少

紧耦合存储器:速度慢,容量大(例:210512MB的主存储器)

辅助存储器:速度更慢,容量大。

 

虚拟地址的作用:1、解决了地址冲突

             2、可以让进程使用更大的空间

 

虚拟地址到物理地址是通过MMU来转化的。

 

ARM11之前CachMMU之前。

ARM11(包括ARM11CachMMU之后

不管CachMMU之前还是之后,都不影响MMU的作用


Cach存储的是主存储器的数据拷贝。

 

Cach的类型有I-Cachinstructioncach)指令Cach

            D-CachData)数据Cach


2440 : 16KI/DCach

6410 : 16KI/DCach

210 : 32KI/DCach

 

 

 

问题:MMU这么好,为什么要关闭呢?

        因为在系统上电后,并没有配置MMU,所以关闭MMUCach.

问题:为什么可以不用关闭I-CAch,而必须关闭D-Cach

        因为在在copy内核的时候,假如D-Cach没有关闭,会发生数据copy的错误。

    I-Cach不是那么严格,所以不用一定要关闭

 

ARM11210CP15寄存器基本是一样的,操作也一样,所以代码可以互用。

和MMU。Cach有关系的寄存器 CAP15、Register 1, control register 和 Register 7,cache operations registe

.text

.global _start

_start:

        b rest

        ldr pc ,  _undefine_instruction

        ldr pc , _software_interrrupt

        ldr pc , _prefetch_aport

        ldr pc , _data_abort

        ldr pc , _not_use

        ldr pc , _irq

        ldr pc , _fiq

 

 

 

_undefine_instruction: .wordundefine_instruction

_software_interrrupt: .word software_interrrupt

_prefetch_aport: .word prefetch_aport

_data_abort:.word data_abort

_not_use: .word not_use

_irq: .word irq

_fiq: .word fiq

 

 

undefine_instruction:

        nop

software_interrrupt:

        nop

prefetch_aport:

        nop

data_abort:

        nop

not_use:

        nop

irq:

        nop

fiq:

        nop

rest:

        bl set_svc

        bl disable_watchdog

        bl disable_interrupt

        bl disable_mmu

set_svc:

        mrs r0 , cpsr

        bic r0 , r0 , #0x1f

        orr r0 , r0 , #0xd3

        msr cpsr ,r0   

        mov pc , lr

        

        

#define pWTCON 0xE2700000

disable_watchdog:

        ldr r0 , =pWTCON

        mov r1 , #0x0

        str r1 , [r0]    

        mov pc , lr

        

        

  

disable_interrupt:

        mvn r1 , #0

        ldr r0 , =0xf2000014

        str r1 , [r0]

        ldr r0,=0xf2100014

        str r1,[r0]

 

        ldr r0,=0xf2200014

        str r1,[r0]

 

        ldr r0,=0xf2300014

        str r1,[r0]

        mov pc, lr

        

        

disable_mmu:

        mcr p15,0,r0,c7,c7,0

        mrc p15, 0, r0, c1, c0, 0  //读取寄存器

        bic r0 , r0 , #0x00000007 //顺便disable了第一位,因为可以不用disable I-cach,所以在这里没有disableI-cach(12),

        mcr p15, 0, r0, c1, c0, 0  //写寄存器

        mov pc , lr

0 0
原创粉丝点击