ARM Linux内核启动要求

这篇文章英文原版“ARM Linux Kernel Boot Requirements”,是ARM Linux内核的维护者Russell King写的。在此我将其简易的翻译成中文,方便大家学习下。

原版:

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大小处。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/pfsxj.html