专题5-核心初始化

一.异常向量表
1.ARM一上电就属于一种异常--reset,而且在工作过程中,难免会发生各种异常事件。所谓异常就是,处理器在执行某向特定任务,突然间某个事件发生,而且这个事件导致处理器不能再继续执行当前工作,必须停下手里工作去处理改事件,则称此类事件为异常事件,简称异常。
2.常见异常类型以及入口地址

虽然有两套入口地址,但是默认情况下,选择Normal address 作为异常向量,只有当设置了协处理器CP15的相关寄存器以后,才会启用High vector address,此时则忽略Normal address。
3.异常向量:
当一个异常发生的时候,处理器必然要去处理它,但是处理器要到什么地方去处理他呢?这个时候由硬件机制,处理器会跳转到一个固定地址去执行相关异常处理程序,而这个固定地址就是所谓的异常向量。
4.异常向量表:由七个异常向量及其处理函数跳转关系组成的一个“代码表”,之所以叫”表“代码编写以后的布局形状像是一张表,并非实际意义上的表格。
5.代码编写:;利用samba服务器,在Linux和Windows之间编写代码。(Windows工具写Linux服务器的代码)
(1)start.S


(2)链接脚本jun-boot.lds

用OUTPUT_ARCH(arm)指明输出文件是要运行到arm平台
用ENTRY(_start)指明入口在_start标号处
(3)Makefile文件

6.针对210的一个补充:BL1头信息的添加
210上电以后由厂商提供的Irom程序(BL0)将nandflash里面的BL1拷贝到iram里面运行,但是拷贝完成以后,他要进行校检,看看是不是拷贝的内容和用户指定的大小相等。而他拷贝文件(BL1)的大小计算方法为

就是扫描拷贝的文件中1的个数。然后和头里面的校检码进行比对,相等则执行后续程序,否则程序崩溃,停止执行。而头部的布局如下

很明显的表示了占用16B的空间,然后分四个部分,第二第四没有用到,第一和第三分别作为拷贝文件的大小控制参数,以及校检码,所以我们要用相同的校检算法将头信息补齐,故要用到210image工具,目的就是加入校检码和文件大小信息,否则没有校检码,Bl1在拷贝完以后是运行不了的。
二.SVC模式设置
1.uboot和内核都是工作在SVC模式
2.SVC模式能执行更多命令和访问更多寄存器
3.清除指令:bic
置位指令:orr
4.状态字寄存器访问指令:mrs,msr
5.

三.关闭看门狗
1.嵌入式系统可能运行在无人看守的环境,有可能会意外死机,但是鉴于无人看守,所以需要一种自动重启的硬件机制---看门狗
2.看门狗原理图

3.原理:
(1)PCLK经过预分频器以及选择器以后会产生看门狗时钟,然后通过计数逻辑模块,开始计数。
(2)WTDAT是预先存放的计数初值,WTCNT是减量计数模块,当WTCNT从WTDAT的值减到0的时候,如果还没有更新WTDAT,则认为没有喂狗,系统死机,
(3)发出reset  信号,强制系统重启
(4)在初始化阶段,我们认为代码少,系统也不会进入死机状态,为了节约开销,避免无休止的喂狗,所以关闭看门狗。
4.代码

四.屏蔽中断
1.6410和210采用向量中断,由硬件执行。有两组中断源,相应的控制寄存器也有多个
2.6410和210使能和屏蔽是分开的寄存器
3.屏蔽控制寄存器的读写操作从而屏蔽中断,都是写入全1
4.2440的代码:

5.中断的屏蔽与否由两部分控制
(1)CPSR的I F位
(2)中断屏蔽寄存器
五.关闭MMU
1.计算机存储体系

越往上,越快越贵容量越小越往下容量越大越慢
2.cache有无对比

没有cache的时候,cpu直接和主存储器进行数据传输,很慢。
有了cache以后,现在cache查找有无cpu需要的数据,有的话直接使用,没有再到主存储器去寻找,找到以后,把数据存到cache里面,以便下次再用到该数据会快很多,cache是比主存储器快很多但是容量小,分为指令cache和数据cache的。
3.虚拟地址:程序中使用的地址

物理地址:实实在在的物理存储设备在系统中的地址。最终我们应用程序是要访问物理地址,但是鉴于物理地址小,且有可能多个应用程序会同时访问同一个物理地址引起冲突,所以引入虚拟地址,通过映射以后对存储机制进行扩充范围和避免冲突。而重点是如何实现映射机制。
4.MMU作用:把虚拟地址转换成物理地址

(1)上面的图是ARM11之前的结构,要访问cache直接就可以。(2)下面的图则是ARM11之后包括arm11,要访问cache就要先将地址进行映射,才能到物理地址访问cache。
(3)MMU和cache都是由协处理器cp15控制的
5.代码:
(1)使得I/D cache已有的数据失效
(2)直接关闭cache和MMU





(3)具体实现
主要是MMU和Dcache,至于Icache很宽松。主要是怕在下载和启动内核的过程中,使用到的数据存在Dcache而不放到内存。

各种平台的CP15的操作是一样的。
(4)思考:使得之前的数据失效的Rd参数和关闭MMU的Rd是不是要一样???

posted @ 2015-04-16 18:44  生活需要深度  阅读(188)  评论(0编辑  收藏  举报