- UID
- 1029342
- 性别
- 男
|
当电源按钮按下后,到shell命令起来,能理解4个CPU核到底发生了什么是非常重要的,嵌入Linux内核的引导过程和pc是不一样的,原因是环境设置和可用硬件都不一样了。比如,嵌入式没有硬盘和PC BIOS,取而代之的是一个引导监控器和flash 盘。所以两者基本的差一点是“找内核并装载它”,一旦内核装载到了内存,所有CPU架构的事件处理过程和负载分配都相同。 Linux的引导过程分三个阶段:1、加电(按下电源按钮);2、System Startup Boot Monitor;3、Bootloader uboot;4、ARM Linux Startup;5、进入shell command状态;说明:1、当按下power on键,引导监视器代码运行(从一个预先定义好的地址NOR flash 内存的0地址);2、启动监视器初始化PB11MPCore 硬件周边设备,然后启动真正的bootloader U-Boot;3、在启动监视器下,利用一个自动脚本,也可以由用户手动输入适当的命令来完成U-Boot初始化内存,并copy 压缩的内核映像(uImage)到主内存, 这个映像可以放在NOR上,MMC上,CompactFlash上或者主机PC上。4、由ARM11 MPCore来执行;5、然后传递一些初始化参数给内核;6、内核映像自己解压自己,并开始初始化自己的数据结构,如建立一些用户进程,引导所有的CPU核,并且在用户空间运行命令行环境;
第一章、System startup (Boot Monitor 引导监视器)
1、当系统加电或reset,ARM11 MPCore的所有CPUs取下一条指令(从 restet 向量地址,即NOR flash 的 0x00000000地址)到它们自己的PC寄存器,这个地址放了引导监视器的程序;2、只有CPU0 继续执行引导监视器代码,并且其它CPUs执行WFI 指令,这是一个循环,检测SYS_FLAGS 寄存器。其它CPUs在Linux 内核引导过程中,才开始执行有意义的代码,在随后的ARM Linux一节中有详细 描述; 引导监视器是一个是由ARM平台库组成的、标准的ARM 应用程序,它运行在系统引导完成后。 当系统reset的情况下,引导监视器完成下面的动作: a、执行CPU0上的主代码和其它CPUs上执行WFI指令; b、初始化内存控制器、配置主板外设; c、在内存中建立一个栈; d、Copy自己到主内存DRAM里; e、复位引导内存的映射; f、重新映射和直接访问依赖于PB11MPCore 的C库I/O例程,如输出口UART0 或LCD, 输入口UART0 或 keyboard) g、NOR flash上如果有就自动运行一个引导脚本,并且把PB11MPCore的面板切换到ON,引导监视器也可以 进到shell命令行的提示符状态; 所以,基本上引装在板子上的导监视器应用类似于PC机器的BIOS。它的功能有限,不能引导一个Linux映像。因此,另一个bootloader需要完成引导过程,它就是U-Boot。U-Boot 代码编译成ARM平台格式,并烧到NOR flash 上,最后的步骤是从引导监视器命令行启动U-Boot映像。这一步也可以用一个脚本或手工输入适当的命令来做。 |
|