VBOOT

系统首先是从head.S文件开始,ARM是从0X00000000地址开始的,可以看系统文件MEM.LDS发现

 

SECTIONS { 

  . = 000000;

  .myhead ALIGN(0): {*(.text.FirstSector)}

  .text ALIGN(512): { *(.text) }

  .bss ALIGN(4)  : { *(.bss*)  *(COMMON) }

  .data ALIGN(4) : { *(.data*) *(.rodata*) }

 

head.o放在0X0000000的地址,ALIGN(4),表明BSS,和data段的对其方式,是以4字节对其

BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。

数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。

代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

 

从0X00开始的应该是异常向量表

0X00指向的是reset函数

b Reset是跳转指令,跳转到Reset异常处理函数,(ARM汇编 B 跳转指令)

最后系统跳转到MAIN.C函数中

bl Main

跳转到主函数中

void Main(void)

{

       MMU_EnableICache();

       MMU_EnableDCache();

 

       Port_Init();

       NandInit();

 

       if (g_page_type == PAGE_UNKNOWN) {

              Uart_SendString("/r/nunsupport NAND/r/n");

              for(;;);

       }

 

       GetParameters();

 

       Uart_SendString("load Image of Linux.../n/r");

       ReadImageFromNand();    //loader.....

}

 

通过ARM汇编来控制协处理器,对CACHE处理

static inline void MMU_EnableICache(void)

{

 

       asm (

              "mrc p15,0,r0,c1,c0,0/n"

              "orr r0,r0,#(1<<12)/n"

              "mcr p15,0,r0,c1,c0,0/n"

       );

}

MRC 从协处理器移到ARM7寄存器(L=1)

MCR 从ARM7寄存器移到协处理器(L=0)

开启指令cache是设置协处理器cp15c1寄存器的第12位为1
系统有两个cache,一个是指令cache,一个是数据cache


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值