ARM体系下BOOT程序功能原理简介

一、功能简介

  Boot程序主要功能就是系统各方面的初始化,主要包含如下几方面。

1、      设置CPU模式

  在ARM体系中CPU工作模式主要分为7种,分别是:

  (1)    用户模式(usr,User Mode):ARM处理器正常的程序执行状态。

  (2)    快速中断模式(fiq,Fast Interrupt Request Mode):用于高速数据传输或通道处理,当出发快速中断时进入该模式。

  (3)    外部中断模式(irq,Interrupt Request Mode):用于通用的中断处理,当触发外部中断时进入该模式。

  (4)    管理模式(svc,Supervisor Mode):操作系统使用的保护模式,在系统复位或者执行软中断指令SWI时进入。

  (5)    数据访问终止模式(abt,Abort Mode):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。

  (6)    系统模式(sys,System Mode):运行具有特权的操作系统任务。

  (7)    未定义指令终止模式(und,Undefined Mode):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的的软件仿真。

  在此过程中主要是将CPU设置成SVC模式。

2、      关闭看门狗

  看门狗(watch dog)一般是个硬件模块,其作用是,在嵌入式操作系统中,很多应用情况是系统长时间运行且无人看守,为防止系统死机,看门狗会帮自      动重启系统。其实现原理简单来说就是硬件上有个记录超时的功能,然后要求用户每隔一定的时间对其进行操作,比如往里面写入一些固定的值之类的,俗称“喂狗”,当硬件判断超时了还没有被喂狗,看门狗就会重新启动系统,而我们在boot初始化阶段,要是不关闭看门狗的话就需要单独写一个喂狗程序,相比写喂狗程序而言,关掉它更实在些。

3、      关闭中断

  关中断即将对应的中断寄存器设置为disable即可。

4、      设置堆栈SP指针

  设置SP指针就只一个动作,即让SP等于某个地址即可,但背后的逻辑是自己要先弄清楚当前系统是如何使用堆栈的,堆栈生长方向是向上还是向下。在给SP赋值前要确保对应的地址空间是专门分配给堆栈使用的,保证堆栈的大小相对合适。

5、      清除BSS段

  在计算机系统中数据会按照不同的用途存放在不同的区域,其区域主要分为如下几类。

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

  (2)    text段(code/text segment):通常是指用来存放程序执行代码的一块内存区域。该部分区域大小在程序运行前就已经确定了,通常该区域属于只读(某些架  构也允许写,及允许修改程序)。

  (3)    堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就添加到堆上(堆被扩张);当利用free等函数释放内存是,被释放的内存从堆中被剔除(堆被缩减)

  (4)    栈(stack):栈又称堆栈,是用户存放程序临时创建的局部变量,其特点是先进先出(FIFO),所以栈方便用来保存/恢复调用现场。

该过程中就是将对应的bss段都设置为0,其对应的地址空间就是哪些未被初始化的全局变量之类的地址。

6、      异常中断处理

  该过程就是实现对应的常见的那些处理中断的部分内容,boot在初始化的时候,主要目的只是初始化系统及引导系统,所以中断处理部分的代码往往相对比较简单。

Uboot源码中start.S源码详解

海阔凭鱼跃,天高任鸟飞。
原文地址:https://www.cnblogs.com/chenshikun/p/14755347.html