Inside SW,FW and HW R&D

C/C++ | Visual C++ | 嵌入式系统 | 硬件设计 | 通信与网络

My Links

Blog统计

公告


  ----Counters-----
     Welcome to Inside SW,FW and HW R&D.
   Developer:宋宝华
21cnbao@21cn.com

文章

收藏

相册

技术网站

存档


正在读取评论……

ARM Linux Booting Sequence (1)

Linux的启动需要由bootloader来引导。

 

bootloader完成system initialization后,会试着将LinuxbzImageinitrd加载memory,接着设定好Linux启动所需的参数,并将program counter指向bzImage所在的地址,将控制权交给Linux

 

bootloader在启动Linux时必需设定的参数主要有3

1. r1 = #0

2. r2 = machine(platform) type id

3. r3 = ATAG start address(physical address)

 

其中ATAG(kernel tagged list)bootloader用来存放要传递给kernel使用的系统参数的listATAG_COREATAG_NONE此两个field分别代表ATAG的起始和结束。

 

另外,在Linux启动前,bootloader必须先将CPU设定在SVC mode并且关掉IRQFIQ;如果系统有MMUdata cache的话,也必将他们关闭。

Stage

x86上,一个instruction4 bytes(在进入保护模式之前是2 bytes)MBR512 bytes所能存放的指令数不多,对于现在功能日益强大的bootloader来说绝对是不够用的(尤其是一些可以执行多重开机的bootloader)。因此,bootloader的工作又被切割成两个stages,来完成OS加载的工作。

 

stage 1:

 

即由MBR上的code所完成。此512 bytecode所能提供的程序功能有限,因此主要的工作只是负责找到stage 2codedisk上的位置并将code读取出来。

 

stage 2:

 

stage 2已不再受限于512 bytes的大小,因此可以让programmer尽情发挥,拓展bootloader的功能。当然,不管如何,bootloader的主要功能仍然是辅助启动OS,因此stage 2code必须能够判读diskfile system,并以此为依据找到OS image所在的位置并loadmemorystage 2执行完后,系统的所有软硬件就完全转移给OS来控制与管里了。

MBR

现行的hard diskfloppy disk标准规格,以每512 bytes为一个sectordisk上第0sector称作MBR(Master Boot Record),是存放bootloader的地方。

 

BIOS在做完POST的程序后,会依照各个开机装置的priority,依序check他们的MBR。假若MBR上的最后2 byte所存放的值为0xaa55此一magic number,表示此装置的MBR所储存的数据为合法的bootloader程序代码,BIOS即将此MBR512 bytes的数据loadmemory0x0000:0x7c000x0000:0x7dff处。接着BIOS设定CS = 0x0000IP = 0x7c00,将控制权专交给bootloader,从此BIOScomputer运行中就完全失去了作用。

Bootloader概述

Bootloader 是计算器系统用来加载OSmemory的程序

 

对一般的x86 PC来说,power onreset后系统将会先到ROM读取并执行BIOSBIOS执行完POST并在memory0x0000:0x00000x0000:0x0400地址上创建好基本的256interrupt vector后,即将512 bytesbootloader标头载入memory0x0000:0x7c0000之处,接着program counter便跳转到0x0000:0x7c0000执行bootloader

 

embedded system里,bootloader经常是直接烧在ROM中,系统在power on后就立即执行bootloader的程序代码。此时,bootloader就必须身兼x86BIOS的工作,先作POST和硬件初始化的程序,再加载OS。因为embedded system的硬件通常较简单阳春,所以bootloader的设计和程序撰写上相对于x86 PCBIOSbootloader而言是较容易的。



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=1204222


[点击此处收藏本文]  发表于2007年08月28日 1:54 PM




正在读取评论……
大名
网址
验证码
评论