WINCE6.0+S3C2443的启动过程---eboot1
来源:互联网 发布:淘宝助理tbi文件 编辑:程序博客网 时间:2024/04/29 21:17
WINCE6.0+S3C2443的启动过程---eboot 我们知道从nboot把eboot从nandflash中拷贝到内存指定的地址后,就接着在这个地址处开始运行eboot了,之后,nboot的工作就完成了,那么那么eboot开始执行的地址在哪里呢?我们看看/Src/Bootloader/Eboot/boot.bib下面的配置 MEMORY ; Name Start Size Type ; ------- -------- -------- ---- ARGS 80020800 00000800 RESERVED RAM 80021000 0000B000 RAM STACK 8002c000 0000A000 RESERVED EBOOT 80038000 00040000 RAMIMAGE BINFS 80080000 00021000 RESERVED 我们根据EBOOT的这一项可以知道,EBOOT对应的虚拟起始地址就是0x80038000,实际的物理地址是0x30038000,根据/Src/Bootloader/Eboot/sources下面的内容 TARGETNAME=eboot TARGETTYPE=PROGRAM RELEASETYPE=PLATFORM EXEENTRY=StartUp 可知eboot的入口是StartUp,下面两个图是从eboot.map的截取出来的 通过上图可以知道eboot的入口地址是0x00009d68 根据上图可知StartUp函数的地址是0x00009d68,所以可以确定eboot的入口地址就是Startup函数,也就是eboot从这个Startup函数开始执行。 1.startup函数 系统上电后第一步就是运行Startup函数的代码,这是一个汇编语言函数,主要其最主要功能是执行芯片级初始化:禁止中断,配置系统时钟频率,复制BootLoader镜像到内存,设置存储器的读写周期,构造内存映射表,启用MMU,并启用虚拟内存等操作。 Startup函数有两条重要的地址定义,定义ram空间的物理基地址和页表的基地址,这是startup函数主要操作的物理地址空间,如下所示 定义RAM空间的物理基地址和页表的基地址 PHYBASE EQU 0x30000000 ; physical start PTs EQU 0x30010000 ; 1st level page table address (PHYBASE + 0x10000) ; save room for interrupt vectors. 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xxxluozhen/archive/2010/08/03/5783705.aspx ⑴startup函数的入口 入口函数首先通过对协处理器的操作来清空TLB、指令Cache和数据Cache p15是系统控制协处理器,主要是对内存还有cashe进行管理。mcr指令,把ARM寄存器中的值传递到协处理寄存器中。C8 是TLB Control 寄存器,C7是Cache/Write Buf Control 寄存器, ResetHandler ; Make sure that TLB & cache are consistent mov r0, #0 mcr p15, 0, r0, c8, c7, 0 ; flush both TLB mcr p15, 0, r0, c7, c5, 0 ; invalidate instruction cache mcr p15, 0, r0, c7, c6, 0 ; invalidate data cache 下面为了更好去理解上面这段代码,我们来学习相关知识: ①MCR和MRC 对CP15协处理器的操作使用mcr和mrc两条协处理器指令,这两条指令的记法是从后往前看:mcr是把r(CPU核寄存器)中的数据传送到c(协处理器寄存器)中,mrc则是把c(协处理器寄存器)中的数据传送到r(CPU核寄存器)中。对CP15协处理器的所有操作都是通过CPU核寄存器和CP15寄存器之间交换数据来完成的。 ②TLB TLB(translation lookaside buffer),旁路转换缓冲区,或称页表缓冲,里面存放的是一些页表文件(虚拟地址到物理地址的转换表),TLB是MMU中的一块高速缓存(也是一种cache),它缓存最近查找过的V对应的页表项,如果TLB里缓存了当前VA的页表项就不必做Translation Table Walk(也就是从发出VA到定位到PA的过程)了,否则去物理内存中读出页表项来保存在TLB中,TLB缓存可以减少访问物理内存的次数。 ③instruction cache instruction cache(ICache),cache是高速缓冲存储器,是介于CPU和主存之间的缓冲器,ICache是用于存在正在执行的指令地址附近的一部分指令,供CPU在一段时间内使用。 当系统上电或重起(Reset)的时候,ICaches功能是被关闭的,我们必须往lcr bit置1去开启它,lcr bit在CP15协处理器中控制寄存器1的第12位(关闭ICaches功能则是往该位置0)。ICaches功能一般是在MMU开启之后被使用的(为了降低MMU查表带来的开销),但有一点需要注意,并不是说MMU被开启了ICaches才会被开启,正如本段刚开始讲的,ICaches的开启与关闭是由lcr bit所决定的,无论MMU是否被开启,只要lcr bit被置1了,ICaches就会发挥它的作用,见下图 ④data cache data cache(DCache),cache是高速缓冲存储器,是介于CPU和主存之间的缓冲器,DCache是用于存在正在执行的指令地址附近的一部分数据,供CPU在一段时间内使用。 ARM920T有16KB的ICache,也有16KB的DCache,另外外加4KB的steppingstone,那么S3C2440自带的RAM有36KB. 与ICaches一样,系统上电或重起(Reset)的时候,DCaches功能是被关闭的,我们必须往Ccr bit置1去开启它,Ccr bit在CP15协处理器中控制寄存器1的第2位(关闭DCaches功能则是往该位置0)。与ICaches不同,DCaches功能是必须在MMU开启之后才能被使用的。 mcr p15, 0, r0, c7, c5, 0 ; invalidate instruction cache mcr p15, 0, r0, c7, c6, 0 ; invalidate data cache c7是个只写寄存器,这个寄存器用来管理ICache和DCache,其中包括Invalidate cache 见下图我们就知道上面代码的意义了。 --->后面待续
Eboot是通过下面的操作来disable ICache和DCache的
- WINCE6.0+S3C2443的启动过程---eboot1
- WINCE6.0+S3C2443的启动过程---eboot1
- WINCE6.0+S3C2443的启动过程---eboot2
- WINCE6.0+S3C2443的启动过程---eboot3
- WINCE6.0+S3C2443的启动过程---eboot4
- WINCE6.0+S3C2443的启动过程---eboot3
- WINCE6.0+S3C2443的启动过程---eboot4
- WINCE6.0+S3C2443的启动过程---eboot2
- WINCE6.0+S3C2443的启动过程---eboot5
- WINCE6.0+S3C2443的启动过程---eboot6
- WINCE6.0+S3C2443的启动过程---eboot2
- WINCE6.0+S3C2443的启动过程---eboot
- WINCE6.0+S3C2443的启动过程
- WINCE6.0+S3C2443的启动过程---内核启动
- WINCE6.0 + S3C2443的启动过程---nboot篇
- WINCE6.0 + S3C2443的启动过程---nboot篇
- WINCE6.0+S3C2443下的activesync问题
- 基于WINCE6.0+S3C2443的camera驱动
- 医疗信息化领域的软件工程
- sas
- 软件设计师重点难点——操作系统
- 常用的8个DOS命令
- 软件设计师重点难点——多媒体
- WINCE6.0+S3C2443的启动过程---eboot1
- 【转】#define 和内联函数
- WINCE5.0+S3C2443系统每隔几分钟会自动关闭LCD显示
- WINCE5.0+2443 camera中断不能进来的原因
- 基于xp系统搭建android开发环境
- WINCE config.bib文件中的FSRAMPERCENT的意义
- WINCE6.0+S3C2443的启动过程---eboot3
- char *p=new char
- CE5.0 - romimage.exe如何填充eboot.bin中的pTOC特殊指针生成.nb0