这篇文章英文原版“ARM Linux Kernel Boot Requirements”,是ARM Linux内核的维护者Russell King写的。在此我将其简易的翻译成中文,便利我们学习下。
原版:http://www.arm.linux.org.uk/developer/booting.php
Author: Russell King
Initial date: May 18, 2002
Revision:1 – 17 September 20042 – 30 September 2004
为了发动ARM Linux,首要,你需求一个bootloader,它是一个很小的程序(在内核运转之前发动)。bootloader的第一阶段效果便是初始化各种硬件设备,终究,便是调用内核,而且将第一阶段的各种参数传递给内核。
实质大将,bootloader程序应供给(最小限度)如下几个方面:
1、设置和初始化化RAM
2、初始化一个串口
3、检测机器类型
4、设置内核发动需求的符号列表
5、调用内核镜像
1、设置和初始化RAM
现有的bootloader:强制性的(有必要的)
新的bootloader:强制性的(有必要的)
bootloader被用来去找到并初始化一切内核将用于非易失性数据存储体系中运用的内存。它完结那些动作都是在机器依靠的办法下完结的。(它或许选用内部算法来主动定位和分类一切的RAM,或许它或许选用特定机器的RAM的相关常识,或许任何其它的、设计者以为适宜的办法)。
2、初始化一个串口
现有的bootloader:可选的,引荐运用的
新的bootloader:可选的,引荐运用的
bootloader在这个进程应该以初始化、使能一个串口设备为方针。这使得内核的串行驱动程序主动检测哪一个串口应该被用来作为内核的控制台。(一般用于调试或许通讯的意图)。
可供挑选的,经过特定的串口符号列表,bootloader能够向内核传递比如“console=”相关的参数,还能够传递一些串口格局的参数,比如在linux/Documentation/kernel-parameters.txt中描绘的。
3、检测机器ID
现有的bootloader:可选的
新的bootloader:强制性的(有必要的)
bootloader有必要创建和初始化内核符号列表。一个有用的符号列表开始于ATAG_CORE这个符号,完毕于ATAG_NONE,ATAG_CORE或许会是空的,或许也或许不是。一个空ATAG_CORE符号的巨细被设置为2 (0x00000002),ATAG_NONE这个符号的巨细有必要设置为0。
任何号码的符号都能够放置在这个符号列表中。可是,重复的符号是否附加到前面的符号所带着的信息中,或许它是否会替代完好的信息,这些都是不确定的。
The boot loader must pass at a minimum the size and location ofthe system memory, and root filesystem location,因而,最小的符号列表如下:
+-----------+base -> | ATAG_CORE | |+-----------+ || ATAG_MEM | | increasing address+-----------+ || ATAG_NONE | |+-----------+ v
这个符号列表应该寄存在体系的RAM中。
这个符号列表有必要放置在一块内存区中,这块内存区内核既不能解压,暂时的文件体系也不能掩盖它。一般引荐的这个内存方位为RAM的第一个16KB巨细处。
5、调用内核镜像
现有的bootloader:强制性的(有必要的)
新的bootloader:强制性的(有必要的)
bootloader在调用内核的时分供给了连个选项。假如zImage镜像存储在Flash中,而且它被正确的链接为从Flash中发动,那么,bootloader直接从Flash调用zImage便是合法的(有用的)。
zImage还或许放置在体系的RAM(RAM的任何方位)中,而且在那里被调用。请注意,内核运用内核镜像下的16KB RAM来寄存页表。所以,这个页表引荐放置在RAM的第32KB处。
在上述的两种情况下,有必要满意以下条件:
●CPU 寄存器设置
★ r0=0;
★ r1=机器ID(上述第三步中发现的)
★r2=符号列表在RAM的物理地址
●CPU形式
★一切的中止有必要禁用
★CPU有必要设置为SVC形式(操作体系保护形式),
●高速缓存、MMUs
★关MMU(内存映射)
★指令缓存能够设为开或许关
★有必要关数据缓存,而且其间不能含有“脏数据”
●设备
★不响应DMA设备
● bootloader经过直接跳转到内核镜像的第一条指令来终究完成内核的调用。