一、功能简介
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在初始化的时候,主要目的只是初始化系统及引导系统,所以中断处理部分的代码往往相对比较简单。