炼狱,是为追逐光芒
分类: LINUX
2011-12-12 14:49:19
1.嵌入式系统软件结构与分布
一般情况下嵌入式Linux系统中的软件分为:
①引导加载程序:包括内部ROM中固化的启动代码和bootloader。
②Linux kernel和drivers
③文件系统:包括根文件系统和建立于Flash内存设备之上的文件系统(EXT4.UBI.CRAMFS)
④应用程序:
2.linux内核启动条件
Linux内核启动除了内核映像必须在主存的适当位置,CPU还必须具备一定条件:
①.CPU寄存器的设置:R0=0;
R1=Machine ID(即Machine Type Number,定义在
linux/arch/arm/tools/mach-types);
R2=内核启动参数在 RAM 中起始基地址;
②.CPU模式
必须禁止中断(IRQs 和FIQs);
CPU 必须 SVC 模式;
③.cache和MMU设置
MMU 必须关闭;
指令 Cache 可以打开也可以关闭;
数据 Cache 必须关闭;
但是在 CPU 刚上电启动的时候,一般连内存控制器都没有初始化过,主存中根本无法运行程序,更不可能处在 Linux 内核启动环境中。为了初始化 CPU 及其他外设,使得 Linux内核可以在系统主存中运行,并让系统符合 Linux 内核启动的必备条件,必须要有一个先于内核运行的程序,他就是所谓的引导加载程序(Boot Loader)。
3.Boot loader的概念
简单的说,BootLoader就是在OS内核运行之前运行的一段小程序,通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
系统加电或复位后,所有的 CPU 通常都从某个由 CPU 制造商预先安排的地址上取指令。比如,基于 ARM7TDMI core 的 CPU 在复位时通常都从地址
0x00000000 取它的第一条指令。而基于 CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或 FLASH
等)被映射到这个预先安排的地址上。因此在系统加电后,CPU 将首先执行 Boot Loader 程序。
Boot loader详细介绍参考: