编辑: hgtbkwd | 2019-07-03 |
3 概述 本章涉及 PMON 上电启动过程、窗口配置、内存初始化过程等方面的内容. 3.1 上电启动过程 PMON 的上电启动过程如图
1 所示:
2 图1PMON 上电启动过程 针对启动过程的注释如下: [1] PMON基本运行环境建立,即保证处理器正常运行的最基本设置,如:关中断,配置异常向量;
如果多核,确定PMON启动核、从核自初始化Cache、TLB、清Mailbox(缓存寄存器)等. [2] 如果串口在桥片上,则还需对桥片做初步配置. [3] 处理器自身相关配置,如:修正频率、初始化Cache、CPU内部互联配置、非法地址处理. [4] 如果连接内存的I2C控制器在桥片上,则还需对桥片做初步配置. [5] 处理器级IO相关的一些配置,如:IO地址映射、桥片互联配置等. 处理器基本初始化[1] 调试串口初始化[2] 判断自 身位置 处理器相关配置[3] Cache 模式运行 内存初始化[4] 处理器 IO 访问 相关配置[5] 转入内存执行[6] 自解压 跳入到解压代码 执行构造函数, 注册数据结构、命令 环境变量初始化 初始化桥片 PCI 设备探测 构造驱动框架 初始化设备[7] 开始轮询中断 构造传入内核的数据[8] 自动启动系统[9] 加载内核 启动系统 进入 PMON 交互界面 RAM ROM 是否3[6] 内存运行的相关准备工作,如:拷贝代码到内存、设置堆栈、设置传参等. [7] 初始化显示,以及PCI设备中断初始化. [8] 构造提供给内核与系统的信息,如:内存布局、开发板类型等. [9] 自启动系统时会查找boot.cfg或相关环境变量,根据查找结果来启动系统,如果找不到上述 文件或变量,则会返回到命令行界面. 各类开发板系统详细的启动过程参见附录 E. 3.2 复位后 CPU 的初始状态 龙芯 CPU 上电启动后处理器核处于以下状态: a) 小端模式(龙芯只支持小端模式);
b) 特权等级处于内核态;
c) 浮点寄存器处于
32 位数据模式(PMON 启动过程中应将浮点寄存器配置为
64 位模式);
d) 中断处于关闭态;
e) 非对齐访问会引发例外;
f)
64 位地址空间未使能,用户态
64 位操作未使能(龙芯
1 号系列除外);
g) TLB 未初始化(PMON 启动过程中地址空间一直处于未映射段);
h) 所有的 Cache 处于未初始化、 未使能态 (软件应该在初始化内存之前首先初始化并使能 Cache) . 3.3 窗口配置部分约定 3.3.1 窗口配置流程及注意事项 窗口的配置过程可分为以下步骤: a) 配置用于阻挡猜测执行的地址窗口;
b) 配置不可预取的地址窗口,如IO 寄存器映射地址区;
c) 配置高端内存及双通道交错窗口;
d) 配置
32 位地址到
64 位地址转换功能的窗口(GS464);
e) 配置其它窗口,如龙芯 3A 中HT 接收窗口等. 其中步骤 a)b)的配置需要在串口初始化完成且 TLB,Cache 尚未初始化之前进行;
步骤 c)需要 在内存容量探测及内存控制器初始化阶段完成;
步骤 d)需要在用
32 位地址访问 IO 桥片之前完成,此 项配置完成后即可使用
32 位的指针去访问 IO 桥片资源,如果不配置需要
64 位指针才能访问;
步骤 e) 需要在进入 C 语言前完成. 需要注意的是: a) 窗口是有优先级的,序号越小,优先级越高;
b) 窗口配置的过程中,建议用汇编语言或内嵌汇编语言对其进行配置;
c) 有些窗口是有默认功能的,在配置之前最好先保留通过此窗口的通路;
d) 有些窗口寄存器是只写的,配置完后不一定能读出写入的值;