在讲述Symbian智能手机引导顺序前,先介绍或重新认识一下相关的基本概念。因为这些基本概念在系统启动过程表述中会经常出现。
NOR Flash
NOR Flash是Intel 1988年开发的,主要用来存储芯片内执行(XIP, eXecute In Place)程序,这些程序可以被CUP直接读取,而不用复制到RAM中去读取和执行。它与SOC(System ON Chip)上的静态存储总线连接,可以像RAM一样随机访问。
NOR Flash读取速度很快,但在擦除和写入时速度很慢,但是NOR Flash接口简单,容易使用。它的特点决定了它通常被用来存储代码。
NAND Flash
NAND flash是1989年由东芝公司开发出来的。NAND Flash是基于块的存储技术,它不支持XIP,意味存在其中的程序代码必须复制到RAM 中才能执行,这就要求在使用NAND Flash是还需要额外的RAM。NAND Flash写入和擦除的速度非常快,几乎是NOR Flash的10倍。但接口较复杂,且稳定性也稍差一些,不过由于其可以大批量生产,所以它的价格比NOR Flash便宜很多。它的特点决定了它通常被用来存储数据。
ARM CPU运行模式及寄存器
ARM架构采用堆叠寄存器(Banked Register),并且它是使用固定大小固定地址的向量表来处理异常。它有七种运行模式:
1. User(usr)模式:这是唯一的非特权模式,也就是说特定的指令不能再这种模式下执行,内存管理单元(MMU)会阻止对那些只有特权指令才能访问的内存区域的访问。这种模式是普通应用程序的执行模式。Symbian OS 中除了Kernel、设备驱动及板载支持包(BSP)外其他所有代码都在用户模式下执行。
2. System(sys)模式:系统模式是唯一的具有特权但不能进入异常处理的模式,Symbian OS 不使用系统模式。
3. Supervisor(Svc):管理模式是操作系统中的保护模式,当执行一个中断指令或CPU重置都会进入这个模式,所有的Symbian OS Kernel程序都在这个模式下运行。
4. Abort (abt): 数据访问终止模式,是一种特权模式,用以虚拟存储及存储保护,当预取失败或数据失败异常发生会进入这个模式。Symbian OS 很少使用这个模式,仅当少量寄存器被保存后异常切换到管理模式之前时使用。
5. Undefined(Und):未定义指令终止模式,当一个未定义的异常发生时,进入这个模式。Symbian OS 很少使用这个模式,仅当少量寄存器被保存后异常切换到管理模式之前时使用。
6. Interrupt(irq):中断处理模式,当处理器接受一个IRQ 中断时进入此特权模式。在Symbian OS 中, 中断服务向量在这么模式中执行。
7. Fast Interrupt(fiq):快速中断处理,用于高速数据传输和通道处理。当处理器接受一个FIQ中断时进入此模式。Symbian OS 中,FIQ中断服务向量在此模式中运行。
这七种运行模式的进入或退出都会写ARM状态寄存器(CPSR),CPSR的低五位决定了当前的运行模式。如下表所示:
CPSR[4:0] |
Mode |
Register set |
10000 |
User |
PC, R14..R0, CPSR |
10001 |
FIQ |
PC, R14_fiq..R8_fiq, R7-R0, CPSR, SPSR_fiq |
10010 |
IRQ |
PC, R14_irq, R13_irq, R12-R0, CPSR, SPSR_irq |
10011 |
SVC |
PC, R14_svc, R13_svc, R12-R0, CPSR, SPSR_sv |
10111 |
Abort |
PC, R14_abt, R13_abt, R12-R0, CPSR, SPSR_abt |
11011 |
Undef |
PC, R14_und, R13_und, R12-R0, CPSR, SPSR_und |
11111 |
System |
PC, R14..R0, CPSR |
这7中运行模式除用户模式(Usr)外其他模式都是特权模式。ARM体系结构支持16个通用寄存器,从R0到R15分别表示这些寄存器。然而并非所有的寄存器在所有模式下都可访问,如下图所示,R0到R7,在所有模式下都可访问,且指的都是同一个物理寄存器;R8到R14每个寄存器对应不同的物理寄存器。这使得中断处理非常简单。例如,仅仅使用R8到R14寄存器时,FIQ处理程序可以不必执行保存和恢复中断现场的指令,从而使中断处理过程非常迅速。对于R13、R14,每个寄存器对应6个不同的物理寄存器,其中的一个是用户模式和系统模式公用,另外5个对应其他5种处理模式。R15为程序计数器(PC)。
Bootstrap
Bootstrap是一个程序,在手机硬件Reset后运行。它的任务是为系统Kernel的运行准备基本的环境。Symbian OS 将Bootstrap分为两层,其中之一是平台独立的,供ARM设备来使用,另个层是平台相关的,由手机制造商来实现。
系统启动过程
有了以上的基本概念,再来看Symbian智能手机的启动过程就比较简单了。Symbian智能手机的启动过程基本分为五个阶段,硬件Reset后从NOR Flash 或NAND Flash中加载运行Bootstrap、加载Kernel、文件系统、系统启动、Window Server及UI这五个阶段。如下图所示:
阶段1:
如果手机采用的是NAND Flash, 那么NAND核心载入器会载入并启动Bootstrap程序。如果是NOR Flash,就可以直接运行存于其中的Bootstrap程序。Bootrom.bin文件就是所谓的Bootstrap程序,这个阶段的系统环境:CPU低速运行,MMU处于禁用状态,PC(R15_svc)的值为0;行为顺序:
1. 切换CPU到svc模式,并屏蔽所有中断
2. 初始化硬件并清理中断
3. 创建一个执行栈,将SP(R13_svc)指向这个栈
4. 创建和初始化RAM页分配器
5. 映射基本的内存页面目录及第一页的页表,MMU开始使用虚拟地址
6. 分配线程栈,将SP(R13_svc)指向这个栈
7. 切换到基本执行单元执行入口点
阶段2:
这个阶段的主要是运行EKern.exe,系统环境:CPU全速运行,MMU可以使用;行为顺序:
1. BSP被初始化
2. 触发BP(Baseband Processor)开始执行电话模块(RTOS)
3. 加载内核扩展
4. 准备下一阶段的处理
阶段3:
这个阶段的主要是运行EFile.exe,系统环境:微核(Micro-Kernel)功能正常;行为顺序:
1. 启动文件服务器
2. 挂接第一个文件系统ROMFS
3. 启动线程加载器以提供可执行加载服务
4. 运行EStart进程
5. EStart运行后,它会加载其他的文件系统,恢复HAL设置如语言、地区等,最后开始系统启动
阶段4:
这个阶段运行Sysstart.exe程序,系统环境:Symbian Kernel 具有完整的服务功能。行为顺序:
1. 根据配置文件启动系统相关的服务。
2. 准备Window Server进程。
阶段5:
这个阶段运行Ewsrv.exe程序,行为顺序:
1. 启动Window Server
2. 启动Wsini.ini文件中的进程。
至此,整个系统基本就算启动完毕,可以使用了。