Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1971596
  • 博文数量: 185
  • 博客积分: 10707
  • 博客等级: 上将
  • 技术积分: 1777
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-19 17:31
文章分类

全部博文(185)

文章存档

2014年(1)

2012年(6)

2011年(27)

2010年(13)

2009年(75)

2008年(63)

分类: LINUX

2008-12-29 14:21:08

启动armlinuxbootloader必须提供下面几步:

 

1.  设置并初始化ram

2.  初始化一个串口

3.  检测处理器类型

4.  设置内核标记列表

5.  调用内核映像

 

1.       设置并初始化ram

 

bootloader要找到并初始化系统中所有的ram,内核将这些ram用于可变数据的存储。

 

2.       初始化一个串口

 

bootloader应该在目标板上初始化并使能一个串串口。这将允许内核串口驱动自动检测它应该用哪个串口作为内核控制台。

 

另外,bootloader也可通过标记列表传递相关的”console=”选项到内核来指定串口以及串口格式(奇偶位,停止位等)

 

3.       检测处理器类型

 

bootloader应该通过某种方法检测它所运行的处理器的类型,它最终必须能够向内核提供一个MACH_TYPE_xxx值。

 

4.设置内核标记列表

 

bootloader必须创建并初始化内核标记列表。一个有效的标记列表起始于ATAG_CORE而终止于ATAG_NONE。任何数量的标记都可以加入这个列表。bootloader至少要向内核传送系统内存的大小和位置以及根文件系统的位置。

 

标记列表必须放在某个内存区域,这个区域既不能被内核解压器重写,也不能被initrd ‘boot0’ 程序重写。推荐的位置是RAM开头的16K

 

5.  调用内核映像

 

有两种调用kernel zImage的选择。如果zImage存储在flash中,并且被正确的连接从flash运行,那么对于bootloader来说,直接从flash调用zImage是合法的。

 

zImage也可以放到系统RAM中任何位置并在那个位置调用。注意,内核使用这个映像下面的16K RAM存储页表。推荐将映像存放在RAM32K位置处。

 

在任何情况下,下面的重要条件都必须满足:

 

――屏蔽所有具有DMA功能的设备,以便内存不会被伪造的网络包或磁盘数据误导。这将大大节约你的调试时间

 

――cpu寄存器设置

r0 = 0,

r1 = 处理器类型号

r2 = 标记列表在系统内存中的物理地址

 

       uboot中调用内核时:

       theKernel (0, bd->bi_arch_number, bd->bi_boot_params);

这里第123个参数就分别存储在r0r1r2中。

 

――caches, MMUs

MMU必须关闭

指令cache可关闭或打开

数据cache必须关闭

 

――bootloader被指望通过直接跳转到内核映像的第一条指令来调用内核映像

 

这是我根据英文文档做的笔记。本人英文水平有限,如有翻译错误之处,还望指点一下。

阅读(1419) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~