GRUB2及启动过程详解

GRUB2及启动过程详解
GRUB2及启动过程详解

GRUB2及启动过程详解

作者: 南瓜剪子

2016年7月28日

1. 概述 (2)

2. CentOS7中GRUB2 (2)

3. GRUB2 的bootstrap image文件 (3)

3.1. boot.img (3)

3.2. diskboot.img (3)

3.3. kernel.img (4)

3.4. core.img (4)

3.5. *.mod (4)

4. 对比GRUB Legacy (5)

4.1. stage1 (5)

4.2. *_stage1_5 (5)

4.3. stage2 (5)

5. grub2-mkimage定制core.img (6)

6. GRUB2安装 (7)

6.1. Linux是怎么命名设备(/dev/sda) (7)

6.2. MBR(Master Boot Record) (8)

6.3. MBR分区表DPT(Disk Partition Table) (9)

6.4. LBA and CHS (14)

6.4.1. CHS(cylinders-heads-sectors) (14)

6.4.2. LBA(Logical Block Address) (14)

6.5. boot.img和core.img安装 (14)

6.6. 硬盘总结 (17)

7. 启动过程 (19)

7.1. BIOS (19)

7.2. GRUB2中boot.img (20)

7.2.1. Step1无条件跳转 (20)

7.2.2. Step2 初始化 (20)

7.2.3. Step3 判断硬盘是否支持LBA还是只支持CHS (22)

7.2.4. Step4 采用LBA加载core.img第一个扇区 (23)

7.2.5. Step5 拷贝core.img第一个扇区到内存指定位置 (25)

7.2.6. Step6 执行core.img第一条语句 (26)

7.2.7. Step7 boot.img总结 (26)

7.3. GRUB2中core.img (28)

7.3.1. diskboot.img (28)

7.3.2. GRUB2 core Startup (34)

7.3.3. GRUB主函数即GRUB主要功能 (37)

7.3.4. 加载Linux Kernel (38)

7.4. Linux kernel (46)

8. 结束语 (47)

9. 参考文献 (47)

1.概述

计算机系统上电之后由固化到ROM中的BIOS(UEFI)进行操作,然后导入硬盘MBR中Boot Loader并调到其运行,由Boot Loader对操作系统内核进行加载,并将控制权交给操作系统.下图简单描述了CentOS7的启动过程(CentOS7使用GRUB2作为Boot Loader):

现在的Boot Loader有很多类型,大致如下:

1.对Linux来说GRUB2占据了统治地位

2.对Windows来说Bootmgr/BCD占据了统治地位

3.对Apple系统缺省的是BootX

作为一名计算机工程师,了解Boot Loader的原理是很重要。本文着重介绍GRUB2及其启动流程.读完本文,相信读者能够对Boot Loader原理有一定深刻理解,并能大致知道其他Boot Loader的作用.

本文在介绍一些基本知识后,在第7章会引入基本的反汇编过程来讲解GRUB2的启动流程,因为只有直接读代码才能深入学习原理.需要读者:

- 有一定的汇编语言知识,如果读者对汇编不敢兴趣,可以跳过相关章节

- 同时也需要读者有一定C语言知识

本文稍微有点长,但都是作者本人的经验总结,如果静下心读完,相信对你会有帮助,相比其它GRUB一厚本书,能节约你很多时间。但由于作者水平有限,有不足之处忘谅解。

2.CentOS7中GRUB2

GRUB2是GNU下面的一个项目,有关其详细信息,请参考官方网站: https://www.360docs.net/doc/7c9403362.html,/software/grub/. 相对于GRUB2, 原先的GRUB(i.e. version 0.9x)被称为: GRUB Legacy. 官网上说明: GRUB Legacy is no longer being developed.

从 1.x 开始的新版本就称为GRUB 2(注意,虽然称为GRUB2,但其版本号却是从1.x开始1.99也是GRUB2). 现在各种最新发行版本的Linux(包括CentOS7)都采用GRUB2.

在CentOS7上可以查看安装的GRUB2版本

[root@controller ~]# rpm -qa | grep "grub"

grub2-2.02-0.34.el7.centos.x86_64

在CentOS7下面/boot/grub2目录可以看到有关GRUB2相关文件. 在/boot/grub2/i386-pc目录下是GRUB2 bootstrap images文件,该目录大部分文件是以.mod结

尾,这些文件为GRUB2模块文件,最后在该目录下面有以下两个image文件:

[root@controller i386-pc]# ls -lrt *.img

-rw-r--r--. 1 root root 26618 7\u6708 11 23:33 core.img

-rw-r--r--. 1 root root 512 7\u6708 11 23:33 boot.img

以上两个img文件都会被grub2-install命令安装到硬盘上相应位置(在硬盘什么位置后面会说),很有意思的是请注意两点

1)boot.img固定为512Byte

2)core.img小于32KByte

如果你觉得好奇,可以用file命令查看这些image文件类型

[root@controller i386-pc]# file boot.img

boot.img: x86 boot sector; partition 4: ID=0xd4, starthead 205, startsector 4277266767, 0 sectors, code offset 0x63

[root@controller i386-pc]# file core.img

core.img: data

[root@controller i386-pc]# file xfs.mod

xfs.mod: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

对于boot.img file命令明确指出其为x86 boot sector,而mod文件却是ELF文件,接下来让我们进一步了解这些bootstrap image文件

3.GRUB2 的bootstrap image文件

GRUB2有以下各种bootstrap images文件,大伙应悉知,这些image会被grub2-install安装到硬盘相应的位置,当BIOS完成后,他们会被加载并引导系统继续完成启动.

3.1. boot.img

在PC BIOS系统中,这个image是GRUB2第一个被运行的.它被写在MBR(Master Boot Record)或者在分区(partition)的boot sector中.因为MBR或PC boot sector是固定512字节,这个文件的大小也固定为512byte.

boot.img功能很简单,主要是读磁盘中core.img中的第一个扇区(sector)到内存中并跳到该部分运行(如果是硬盘启动,那么该扇区就是下面要介绍的diskboot.img).因为只有512字节,boot.img不能够加载文件系统(比如CentOS7中XFS或其它Linux的EXT4等等),并且只能是从硬盘固定的位置加载.

3.2. diskboot.img

当从硬盘启动的时候这是core.img第一个扇区(sector)的内容,主要功能是读剩下的core.img到内存中并开始运行kernel.img. 同样diskboot.img没有文件系统的功能(XFS,EXT4等),当他读取剩余的core.img时候,依然从硬盘固定位置读取.

根据启动的介质不同,类似diskboot.img文件有很多,在安装GRUB时候选用其中一个,目前大部分都是从硬盘启动diskboot.img

1.cdboot.img: 从CD-ROM启动

2.pxeboot.img: 从PXE网络启动

3.Lnxboot.img: 如果从其他bootloader比如LILO(用image=’section)启动,这个image使GRUB看上去像一个Linux内核.

3.3. kernel.img

这个文件包含了GRUB2基本的运行时支撑:对设备及文件的框架,环境变量,恢复模式下的命令行等等.一般我们不会直接使用它,但是它是core.img中必不可少的一部分.

3.4. core.img

这个是GRUB的核心.他是被grub2-mkimage命令生存,包含了kernel.img以及一些必须必要的modules. 通常core.img包含了足够的模块(modules)为了访问XFS/EXT4文件系统/boot/grub2目录,并且在运行时加载从文件系统(XFS)所有剩余的模块,这些剩余模块包含启动目录处理,加载操作系统等等功能.

模块化的设计思路最主要的目的是使core.img保持足够小,目前disk限制core.img安装必须小于32KB. core.img一般被安装在硬盘特殊区域:embedding area(夹层区),这个区一般有32K限制,我们在后面会介绍什么是夹层区.

3.5. *.mod

所有GRUB其他部分被称为模块,他们大部分被core.img在运行时自动动态加载,其中一小部分被整合到core.img中,这小部分是必须,比如文件系统支持(xfs.mod) 模块可以手工加载,请参考insmod command(在本文不作介绍,请查阅相关文档)

注意:如果对以上各种image文件还是不清楚,请继续往下读,后面会有详细说明。

4.对比GRUB Legacy

GRUB2 与GRUB Legacy不同,很多人都熟悉GRUB Legacy里面的stage1, stage1_5,stage2等等概念,而在GRUB2里面,这些被各种bootstrap image文件替代:

boot.img

diskboot.img

core.img

大伙应悉知以上三个images

4.1. stage1

GRUB Legacy中stage1相当于GRUB 2中boot.img, 他们完成相同的功能.

4.2. *_stage1_5

GRUB Legacy中Stage 1.5包含了足够的文件系统(XFS或EXT4)代码而允许Stage2从文件系统中直接载入系统,就这个意义上来说很像GRUB 2中的core.img.

不过core.img功能更加强大,它提供了恢复shell,使能够在不能加载其他模块(modules)情况下(比如partition number已经改变)能够人工恢复。Core.img能够被灵活的创建,允许从LVM或者RAID加载模块.

GRUB Legacy 能够运行stage1和stage2而不运行stage1.5, 但是对GRUB2来说,core.img 是必须的。

4.3. stage2

GRUB 2 没有对应stage2的image. 它从/boot/grub加载相应的模块。

5.grub2-mkimage定制core.img

上一章介绍的core.img至少包含了一下几个部分

1)diskboot.img

2)kernel.img

3)required *.mod

他们被grub2-mkimage命令整合成core.img文件,实际上当运行完该命令最终生成的是上一章中/boot/grub2/i386-pc目录下的两个image文件

1)boot.img

2)core.img

有兴趣的读者请参照man grub2-mkimage查阅相关信息,定制自己的core.img: [lanzhou@controller image]$ grub2-mkimage -O i386-pc -p /boot/grub2 -v -o core.img xfs

grub2-mkimage: info: the total module size is 0x26e4.

grub2-mkimage: info: reading /usr/lib/grub/i386-pc/kernel.img.

grub2-mkimage: info: locating the section .text at 0x0.

grub2-mkimage: info: locating the section .rodata at 0x5494.

grub2-mkimage: info: locating the section .data at 0x6448.

grub2-mkimage: info: locating the section .bss at 0x6bd0.

grub2-mkimage: info: reading /usr/lib/grub/i386-pc/fshelp.mod.

grub2-mkimage: info: reading /usr/lib/grub/i386-pc/xfs.mod.

grub2-mkimage: info: kernel_img=0x2649700, kernel_size=0x6bd0.

grub2-mkimage: info: the core size is 0x5085.

grub2-mkimage: info: reading /usr/lib/grub/i386-pc/lzma_decompress.img.

grub2-mkimage: info: reading /usr/lib/grub/i386-pc/diskboot.img.

grub2-mkimage: info: writing 0x200 bytes.

grub2-mkimage: info: writing 0x5bc5 bytes.

core.img是内核的名字,生成在当前目录下, i386-pc是镜像的格式, xfs是加入内核的模块。常用模块有:

xfs: 支持xfs 文件系统(CentOS7缺省的文件系统)

ext2: 支持ext2 文件系统

但是我们一般不直接运行该命令,一般运行grub2-install.该命令会自动调用grub2-mkimage.

6.GRUB2安装

当一切准备好后,我们可运行以下命令

grub2-install /dev/sda

去安装grub2(缺省的--boot-directory=/boot/)

不过一般的CentOS7已经安装好了GRUB2,除非你感兴趣,不用运行上面命令.

在继续后面的内容之前,下面有几个概念大伙必须知道:

6.1. Linux是怎么命名设备(/dev/sda)

比如/dev/sda5,如下图所示

1) SCSI硬盘

第一个SCSI接口硬盘:/dev/sda

第二个SCSI接口硬盘:/dev/sdb

2) USB

如果只有一块硬盘,那么第一个USB盘也可能是/dev/sdb (usb存储设备也目前在内核中在两种驱动方法,一种是模拟SCSI硬盘,另一种是非模拟SCSI硬盘,前一种目前比较多)

3) SATA

如果只有一个SATA硬盘,第一个SATA硬盘也是: /dev/sda

4) IDE硬盘

第一个IDE接口主盘:/dev/hda

第一个IDE接口从盘:/dev/hdb

第二个IDE接口主盘:/dev/hdc

第二个IDE接口从盘:/dev/hdd

注意:

1) 所以只靠/dev/sda无法知道设备类型,也许是SCSI, SATA或者U盘,但是一般来说/dev/sda 都会是SCSI硬盘, 本文不在详述SCSI,IDE,SATA区别,请参考相关资料

2)有关分区,见下文6.3DPT

6.2. MBR(Master Boot Record)

MBR,即主引导记录,是对IBM兼容机的硬盘或者可移动磁盘分区时,在驱动器最前端的一段引导扇区,其地址为

采用CHS寻址: MBR固定为硬盘的0柱面、0磁头、1扇区

采用LBA寻址: MBR固定LBA0

(注意,我们将在后面介绍CHS与LBA,目前普片采用LBA寻址)

MBR长度为512字节,它一般由三个部分组成:

主引导程序

硬盘分区表DPT(Disk Partition table)固定4个分区,每分区16byte

分区有效标志, 以55AA结尾的MBR

Structure of a classical generic MBR

Address Description Size

(bytes) Hex Dec

+000hex+0 Bootstrap code area 446

+1BE hex+446 Partition entry 1

Partition table

(for primary

partitions) 16

+1CE hex+462 Partition entry 2 16

+1DE hex+478 Partition entry 3 16

+1EE hex+494 Partition entry 4 16

+1FE hex+510 55hex

Boot signature[a] 2 +1FF hex+511 AA hex

Total size: 446 + 4*16 + 2 512 本表摘自:https://https://www.360docs.net/doc/7c9403362.html,/wiki/Master_boot_record

注意

1) 由于后面支持EFI及GPT,上述结构有些变化,但在本文不作描述,有兴趣的读者可以参看相关EFI及GPT文档

2) 上文中的boot.img将会被grub2-install命令拷贝到MBR主引导程序部分(也就是Bootstrap code area),在后面将会详细分析boot.img

====================================================

工具: 导出并查看MBR

====================================================

我们可以用DD命令把MBR从硬盘中导出来

[root@controller image]# dd if=/dev/sda of=mbr.bin bs=1 count=512

512+0 records in

512+0 records out

512 bytes (512 B) copied, 0.00173968 s, 294 kB/s

然后我们可以使用hexdump查看其内容

[root@controller image]# hexdump -C mbr.bin

00000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.c..............|

00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..|

00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u|

00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..|

00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........|

00000050 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00 |................|

00000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70 |...........t...p|

00000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc |t....y|..1......|

00000080 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 be 05 7c |. ..d|<.t...R..||

00000090 b4 41 bb aa 55 cd 13 5a 52 72 3d 81 fb 55 aa 75 |.A..U..ZRr=..U.u|

000000a0 37 83 e1 01 74 32 31 c0 89 44 04 40 88 44 ff 89 |7...t21..D.@.D..|

000000b0 44 02 c7 04 10 00 66 8b 1e 5c 7c 66 89 5c 08 66 |D.....f..\|f.\.f|

000000c0 8b 1e 60 7c 66 89 5c 0c c7 44 06 00 70 b4 42 cd |..`|f.\..D..p.B.|

000000d0 13 72 05 bb 00 70 eb 76 b4 08 cd 13 73 0d 5a 84 |.r...p.v....s.Z.|

000000e0 d2 0f 83 de 00 be 85 7d e9 82 00 66 0f b6 c6 88 |.......}...f....|

000000f0 64 ff 40 66 89 44 04 0f b6 d1 c1 e2 02 88 e8 88 |d.@f.D..........|

00000100 f4 40 89 44 08 0f b6 c2 c0 e8 02 66 89 04 66 a1 |.@.D.......f..f.|

00000110 60 7c 66 09 c0 75 4e 66 a1 5c 7c 66 31 d2 66 f7 |`|f..uNf.\|f1.f.|

00000120 34 88 d1 31 d2 66 f7 74 04 3b 44 08 7d 37 fe c1 |4..1.f.t.;D.}7..|

00000130 88 c5 30 c0 c1 e8 02 08 c1 88 d0 5a 88 c6 bb 00 |..0........Z....|

00000140 70 8e c3 31 db b8 01 02 cd 13 72 1e 8c c3 60 1e |p..1......r...`.|

00000150 b9 00 01 8e db 31 f6 bf 00 80 8e c6 fc f3 a5 1f |.....1..........|

00000160 61 ff 26 5a 7c be 80 7d eb 03 be 8f 7d e8 34 00 |a.&Z|..}....}.4.|

00000170 be 94 7d e8 2e 00 cd 18 eb fe 47 52 55 42 20 00 |..}.......GRUB .|

00000180 47 65 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52 |Geom.Hard Disk.R|

00000190 65 61 64 00 20 45 72 72 6f 72 0d 0a 00 bb 01 00 |ead. Error......|

000001a0 b4 0e cd 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00 |.....<.u........|

000001b0 00 00 00 00 00 00 00 00 a7 36 08 00 00 00 80 20 |.........6..... |

000001c0 21 00 83 dd 1e 3f 00 08 00 00 00 a0 0f 00 00 dd |!....?..........|

000001d0 1f 3f 8e fe ff ff 00 a8 0f 00 00 58 f0 00 00 00 |.?.........X....|

000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa|..............U.|

00000200

黑色部分为启动代码

蓝色部分为分区表DPT(下面会介绍)

红色部分为分区有效标志55AA

6.3. MBR分区表DPT(Disk Partition Table)

DPT作为MBR中的一部分,已经使用了好长一段时间,直到最近GPT及EFI的出现。但是DPT作为一个经典,还是有很多东西学习,在这一章我简要介绍一下DPT.

工具: fdisk

====================================================

linux上经典的工具fdisk就是对有关的DPT进行操作。

[root@controller sbin]# fdisk -l /dev/sda

Disk /dev/sda: 8589 MB, 8589934592 bytes, 6777216 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x000836a7

Device Boot Start End Blocks Id System

/dev/sda1 * 20481026047 512000 83 Linux

/dev/sda2 1026048 16777215 7875584 8e Linux LVM

可以看到我的CentOS7上面/dev/sda这个SCSI硬盘包含了两个分区: sda1, sda2 注意其中sda1从2048 sector(LBA2048)开始

1)我们说了MBR在第一个sector, 所有第一个分区sda1不能从0sector开始

2)从很早前dos,第一个分区只能从LBA64开始,

3)而从LBA2048开始是为了2011年后采用高级格式化的硬盘4k分区对齐

fdisk输出单位:

1 block =1024bytes =

2 sectors

1 sector =512bytes

====================================================

DPT解析

====================================================

如果把上一章6.2MBR中导出的mbr.bin HEX中的DPT对比查看

partition1: 80 20 21 00 83 dd 1e 3f 00 08 00 0000 a0 0f 00

partition2: 00 dd 1f 3f 8e fe ff ff 00 a8 0f 0000 58 f0 00

partition3: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

partition4: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

DPT编码

====================================================

分区类型描述(Partition Type Indicator)

采用DPT同一块硬盘可以安装多种文件系统而互不影响

====================================================

扩展分区

====================================================

按照DPT中要求,linux最多限制有4个主分区

1)也就是你可以把硬盘分为4个主分区

/dev/sda1 (主分区)

/dev/sda2 (主分区)

/dev/sda3 (主分区)

/dev/sda4 (主分区)

如果需要把硬盘分为多4个分区,那么必须使用扩展分区,扩展分区做多1个,在扩展分区下面在设立若干个逻辑分区:

/dev/sda1 (主分区)

/dev/sda2 (主分区)

/dev/sda3 (扩展分区)

/dev/sda5 (逻辑分区)

/dev/sda6 (逻辑分区)

/dev/sda7 (逻辑分区)

注意:

1)扩展分区的分区类型描述(Partition Type Indicator)为0x85

2)逻辑分区并不是从sda4开始,sda4固定分配给主分区

6.4. LBA and CHS

关于硬盘的寻址与定位有两种方式:CHS是24位寻址,LBS是可以支持64位寻址

6.4.1.CHS(cylinders-heads-sectors)

CHS寻址模式将硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Sector)。

柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面",意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。简单地理解,柱面数=磁道数。

磁头(Heads):每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁头就可以表示数据在哪个磁面。

扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为512字节。

知道了磁头数、柱面数、扇区数,就可以很容易地确定数据保存在硬盘的哪个位置。也很容易确定硬盘的容量,其计算公式是:

硬盘容量=磁头数×柱面数×扇区数×512字节

CHS限制1: BIOS INT 13h 接口

柱面地址10位1024

磁头地址8位256

扇区地址6位63 (扇区从1开始,并不是从0开始)

共24位的寻址方式, 最大硬盘空间8GB

CHS限制2: IDE(ATA)

柱面地址16位65536

磁头地址4位16

扇区地址6位63

共24位的寻址方式, 最大硬盘空间127.5GB

CHS目前基本上不再使用,由于24位寻址空间的局限太大,目前普片采用LBA方式

采用CHS寻址,MBR地址为0柱面、0磁头、1扇区

6.4.2.LBA(Logical Block Address)

LBA是非常单纯的一种寻址模式﹔从0开始编号来定位区块,第一区块LBA=0,第二区块LBA=1,依此类推。这种寻址模式取代了原先操作系统必须面对存储设备硬件构造的方式。最具代表性的首推CHS(cylinders-heads-sectors,磁柱-磁头-扇区)寻址模式

LBA最大的好处能偷突破CHS 24bit限制,老式设备支持28bit LBA,新设备一般支持48bit LBA

采用LBA寻址,MBR地址为LBA-0

6.5. boot.img和core.img安装

在了解上面的基础知识后,在回到我们的GRUB2,我们知道boot.img将会拷贝到MBR,也就是LBA-0的位置,那么core.img将会被放置在什么地方?MBR与GPT有不同解决方案:

请参考https://www.360docs.net/doc/7c9403362.html,/software/grub/manual/grub.html#BIOS-installation

1)MBR

在MBR和第一个partition之间有一段空白磁盘空间。大伙还记得5.3 DPT中fdisk命令查看第一个分区的位置从2048sector(LBA2048)开始,那么前面之一段都是空白。

这个空白磁盘空间有各种名称"boot track", "MBR gap", "embedding area", 但是有至少必须32Kbyte,一般来说core.img将会被拷贝到这个区域中

2) GPT

GPT作为UEF的一部分,也能够被使用在BIOS平台上,但是必须得有一个专门的GPT 分区,这个分区至少32KB大小,建议1M,名字为BIOS Boot Partition,然后core.img拷贝到这个分区。

采用GPT方案有好处,不会使用"MBR gap"区域。

本文中将描述第一种MBR方案,也就是当运行grub2-install命令,至少会做两件事情

1)拷贝boot.img到LBA-0的MBR引导代码中

2)拷贝core.img到LBA-1开始到LBA-31中的空闲代码中

====================================================

深入研究mbr.bin

====================================================

除了上面的,其实grub2-install还完成了其它的工作,有兴趣可以研究下,在这里进行一个额外的对比给大家看看:

1)mbr.bin(我们已经在6.2MBR中使用DD命令导出的MBR)

2)/boot/grub2/i386-pc/boot.img

然后使用命令hexdump导出文件

[root@controller i386-pc]# hexdump -Cv boot.img

00000000 eb 63 90 00 00 00 00 00 00 00 00 00 00 00 00 00 |.c..............|

00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

00000050 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00 |................|

00000060 00 00 00 00 ff fa eb 05 f6 c2 80 74 05 f6 c2 70 |...........t...p|

00000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc |t....y|..1......|

00000080 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 be 05 7c |. ..d|<.t...R..||

00000090 b4 41 bb aa 55 cd 13 5a 52 72 3d 81 fb 55 aa 75 |.A..U..ZRr=..U.u|

000000a0 37 83 e1 01 74 32 31 c0 89 44 04 40 88 44 ff 89 |7...t21..D.@.D..|

000000b0 44 02 c7 04 10 00 66 8b 1e 5c 7c 66 89 5c 08 66 |D.....f..\|f.\.f|

000000c0 8b 1e 60 7c 66 89 5c 0c c7 44 06 00 70 b4 42 cd |..`|f.\..D..p.B.|

000000d0 13 72 05 bb 00 70 eb 76 b4 08 cd 13 73 0d 5a 84 |.r...p.v....s.Z.|

000000e0 d2 0f 83 de 00 be 85 7d e9 82 00 66 0f b6 c6 88 |.......}...f....|

000000f0 64 ff 40 66 89 44 04 0f b6 d1 c1 e2 02 88 e8 88 |d.@f.D..........|

00000100 f4 40 89 44 08 0f b6 c2 c0 e8 02 66 89 04 66 a1 |.@.D.......f..f.|

00000110 60 7c 66 09 c0 75 4e 66 a1 5c 7c 66 31 d2 66 f7 |`|f..uNf.\|f1.f.|

00000120 34 88 d1 31 d2 66 f7 74 04 3b 44 08 7d 37 fe c1 |4..1.f.t.;D.}7..|

00000130 88 c5 30 c0 c1 e8 02 08 c1 88 d0 5a 88 c6 bb 00 |..0........Z....|

00000140 70 8e c3 31 db b8 01 02 cd 13 72 1e 8c c3 60 1e |p..1......r...`.|

00000150 b9 00 01 8e db 31 f6 bf 00 80 8e c6 fc f3 a5 1f |.....1..........|

00000160 61 ff 26 5a 7c be 80 7d eb 03 be 8f 7d e8 34 00 |a.&Z|..}....}.4.|

00000170 be 94 7d e8 2e 00 cd 18 eb fe 47 52 55 42 20 00 |..}.......GRUB .|

00000180 47 65 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52 |Geom.Hard Disk.R|

00000190 65 61 64 00 20 45 72 72 6f 72 0d 0a 00 bb 01 00 |ead. Error......|

000001a0 b4 0e cd 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00 |.....<.u........|

000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 12 |..............$.|

000001c0 0f 09 00 52 be bd 7d 31 c0 cd 13 46 8a 0c 84 c9 |...R..}1...F....|

000001d0 75 0f be da 7d e8 cc ff eb 96 46 6c 6f 70 70 79 |u...}.....Floppy|

000001e0 00 bb 00 70 8e c3 31 db b8 01 02 b5 00 b6 00 cd |...p..1.........|

000001f0 13 72 d4 b6 01 b5 4f e9 f1 fe 00 00 00 00 55 aa |.r....O.......U.|

00000200

然后可以文本比较工具进行比较,贴图如下,左边是/boot/grub2/i386-pc/boot.img

大致有四处不同

1) 0x0003~0x0040, /boot/grub2/i386-pc/boot.img全为0,在真正的磁盘MBR中,被grub2-install填入了必要的数据。

注意:0x0000~0x0002为eb 63 60汇编为jmp short 0x0067 ,中间这部分被grub2-insall装填部分数据,暂时不知道是为什么使用

2) 0x0066~0x0067, /boot/grub2/i386-pc/boot.img 为eb 05, 被grub2-install修改为90 90

90 为nop指令,这里修改了两个nop指令

3) 0x01b8~0x01bb, /boot/grub2/i386-pc/boot.img 00 00 00 00, 被grub2-install修改为a7 36 08

00,这部分代码请参考https://https://www.360docs.net/doc/7c9403362.html,/wiki/Master_boot_record

其中的Structure of a modern standard MBR,我拷贝到这里作参考

被修改的这4个Byte[a7 36 08 00] 为32 bit Disk Signature,它是可选的, 我想可能是为了UEFI 使用。

4) 0x01be~0x01fd, DPT硬盘分区表部分,保持不变grub2-install不会去修改

如果大家有兴趣可以去研究代码,知道grub2-install还有很多工作,这里就不在描述。

6.6. 硬盘总结

一块SCSI硬盘逻辑结构简单来说如下图所示:

LBA0: 固定存储MBR,一般GRUB2的boot.img就存放在这里

LBA1~LBA2047: 被称为“Embedding Area”“MBR Gap”,一般GRUB2的core.img就存放这里LBA2048后面为我的两个硬盘分区,他们放在连续的区域

7.启动过程

在前面介绍相关的知识,咱们回归到主题,现在开始启动过程

7.1. BIOS

系统上电之后,由固化在ROM里面的BIOS代码运行,进行硬件检查及初始化工作。有关BIOS具体运行原理在这里不作描述,有兴趣的请参考相关书籍。

最近的EFI作为BIOS的替代或升级,支持更多的功能,在这里也不做描述。

BIOS运行的最后两步操作我们必须知道

1)加载LBA-0(或者CHS的0柱面、0磁头、1扇区)的MBR,共512字节到内存中0x7C00位置

2)从内存0x7C00位置运行

我们知道拷贝到MBR中的正式GRUB2 boot.img,从这个时候开始,GRUB2正式登上历史舞台。但是请注意,并不是说BIOS就全部退出舞台,BIOS依然为GRUB2提供底层服务,比如硬盘读取等等(通过BIOS INT13 功能), GRUB2在一穷二白基础上还离不开BIOS

============================================

地址0x7C00

============================================

这里有个问题,为什么BIOS会加载MBR到0x7C00的位置,而不是其他的位置?

答案请参考:

https://www.360docs.net/doc/7c9403362.html,/questions/2058690/what-is-significance-of-memory-at-00007c00-to-b ooting-sequence

这个问题是应该由最初的IBM PC BIOS的设计者们(软件及硬件)来回答,但是简单的答案可能是0x7C00是距离地下最初32K安装内存有1K大小(512Bytes给MBR以及另外的512Bytes 作运行时堆栈使用)

7.2. GRUB2中boot.img

BIOS加载MBR到0x7C00并从该处运行的时候,实际上就是boot.img开始运行了,我们的工作来了,我们将介绍boot.img将要干什么,可以从官方网站https://www.360docs.net/doc/7c9403362.html,/software/grub/.去使用git下载源码, 源码是采用AT&T风格的汇编。

这里我们采用反汇编的方式取得Intel风格代码

1)我们已经在6.2MBR中使用DD命令导出的MBR

2)安装nasm

[root@controller i386-pc]# yum install nasm

Loaded plugins: fastestmirror, langpacks

Loading mirror speeds from cached hostfile

* base: https://www.360docs.net/doc/7c9403362.html,

* extras: https://www.360docs.net/doc/7c9403362.html,

* updates: https://www.360docs.net/doc/7c9403362.html,

Package nasm-2.10.07-7.el7.x86_64 already installed and latest version

Nothing to do

3)进行反汇编

[root@controller image]# ndisasm -o 0x7c00 mbr.bin > mbr.asm

这里加入-o 0x7c00是告诉反汇编器这段代码在0x7c00处运行,使生成的mbr.asm更加容易理解

在这里我把反汇编的代码mbr.asm作为附件供参考,后面的boot.S是官方源码:

mbr.asm boot.S

注意:boot.S是AT&T汇编语法,反编译的mbr.asm是Intel汇编语法,两者有区别,如果感兴趣,请参阅相关文档进行学习。下面详细讲解主要流程。

7.2.1.Step1无条件跳转

/*位于0x7C00的语句就是一条跳转语句, 跳转到0x7c65处*/

00007C00 EB63 jmp short 0x7c65

7.2.2.Step2 初始化

/* 禁止中断目前是不安全的*/

00007C65 FA cli

00007C66 90 nop

00007C67 90 nop

/*

STM32启动文件详解

STM32启动文件详解 (2012-07-28 11:22:34) 转载▼ 分类:STM32 标签: stm32 启动 在<>,用的是STM32F103RBT6,所有的例程都采用了一个叫STM32F10x.s的启动文件,里面定义了STM32的堆栈大小以及各种中断的名字及入口函数名称,还有启动相关的汇编代码。STM32F10x.s是MDK提供的启动代码,从其里面的内容看来,它只定义了3个串口,4个定时器。实际上STM32的系列产品有5个串口的型号,也只有有2个串口的型号,定时器也是,做多的有8个定时器。比如,如果你用的 STM32F103ZET6,而启动文件用的是STM32F10x.s的话,你可以正常使用串口1~3的中断,而串口4和5的中断,则无**常使用。又比如,你TIM1~4的中断可以正常使用,而5~8的,则无法使用。 而在固件库里出现3个文件 startup_stm32f10x_ld.s startup_stm32f10x_md.s startup_stm32f10x_hd.s 其中,ld.s适用于小容量产品;md.s适用于中等容量产品;hd适用于大容量产品; 这里的容量是指FLASH的大小.判断方法如下: 小容量:FLASH≤32K 中容量:64K≤FLASH≤128K 大容量:256K≤FLASH ;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** ;* File Name : startup_stm32f10x_hd.s ;* Author : MCD Application Team ;* Version : V3.5.0 ;* Date : 11-March-2011 ;* Description : STM32F10x High Density Devices vector table for MDK-ARM ;* toolchain. ;* This module performs: ;* - Set the initial SP ;* - Set the initial PC == Reset_Handler ;* - Set the vector table entries with the exceptions ISR address ;* - Configure the clock system and also configure the external ;* SRAM mounted on STM3210E-EVAL board to be used as data ;* memory (optional, to be enabled by user) ;* - Branches to __main in the C library (which eventually ;* calls main()). ;* After Reset the CortexM3 processor is in Thread mode,

项目启动包括哪些内容

项目启动包括哪些内容 在项目管理中,启动阶段就是识别和开始一个新项目或新项目阶段的过程。为了确保以合适的理由开始合适的项目需要考虑许多因素。在一个重要项目上获得适当的甚至很小的一点成功比在一个不重要的项目上获得巨大成功更具有意义。一次,选择项目进行投资就像选择项目经理一样至关重要。 战略计划是选择项目的基础。组织的战略计划阐述了组织的经营理念、使命、目标、目的、战略。它还为IT项目的计划提供了依据。信息技术在组织中的功能通常是支持性的,因此,启动IT项目必须了解组织在目前和未来的技术需求。信息系统必须支持公司的主要业务目标。 启动IT项目有很多理由,但是最重要的是支持明确的业务目标。项目启动过程的任务包括进行项目干系人分析、可行性研究和初步需求文件。项目启动的输出或者结果包括:项目章程、项目经理的选择、项目关键约束和假设条件。 选择项目经理 项目启动阶段的一项重要工作就是选择项目经理。 项目经理要熟悉本行业,工作经验丰富。懂技术;懂得技术可以提高企业的生产力。对项目充满热情。 项目章程: 制定项目章程是制定一份正式批准项目或阶段的文件,并记录能反映项目干系人的需要和期望的初步要求的过程。在多阶段项目中,这一过程可用来确定或优化在以前的制定项目章程过程中所做的相关决策。 它在项目执行组织与项目发起组织(或客户,如果是外部项目的话)之间建立起伙伴关系。项目章程的批准,标志着项目的正式启动。在项目中,应尽早确认并任命项目经理,最好在制定项目章程时就任命,最晚也必须在规划开始之前。项目经理应该参与与指定项目章程,因为该项目章程将授权项目经理在项目活动中使用组织资源。

项目由项目以外的人员批准,如发起人、PMO(Project Management Office)或项目组指导委员会。项目启动者或发起人应该具有一定的职权,为项目提供资金。他们亲自编制项目章程,或授权项目经理代为编制。项目章程经启动者签字,即标志着项目获得批准。可能因为内部经营需要或外部影响而批准项目,故通常需要编制需求分析、商业分析或情况描述。通过编制项目章程,就可以把项目与组织的战略及日常运营工作联系起来。 输入:项目工作说明书、商业论证、合同、事业环境因素、组织过程资产 工具与技术:专家判断 输出:项目章程 项目章程的下一步是指定项目管理计划。 并且项目章程是:收集需求、定义范围、识别干系人的基础。 其中: 1、项目工作说明书(SOW)是对项目所需交付的产品或服务的叙述性说明。对于内部项目,项目启动者或发起人根据业务需要及对产品或服务的需求,来提供工作说明书。对于外部项目,工作说明书则有客户提供,可以是招标文件(例如:建议邀请书、信息要求书、投标邀请书)的一部分,或合同的一部分。SOW涉及: 业务需要。组织的业务需要可基于市场需求、技术进步、法律要求或政府法规。 产品范围描述。记录项目所需产出的产品的特征,以及这些产品或服务与项目所对应的业务需求之间的关系。战略计划。所有项目都应支持组织的战略目标。进行项目选择和排序时,应该考虑执行组织的战略计划。 2、商业论证 什么是项目章程:

WindowsXP启动过程概述

WindowsXP启动过程概述 从按下计算机开关启动计算机,到登入到桌面完成启动,一共经过了以下几个阶段: 1. 预引导(Pre-Boot)阶段; 2. 引导阶段; 3. 加载内核阶段; 4. 初始化内核阶段; 5. 登陆。 每个启动阶段的详细介绍 a) 预引导阶段 在按下计算机电源使计算机启动,并且在Windows XP专业版操作系统启动之前这段时间,我们称之为预引导(Pre-Boot)阶段,在这个阶段里,计算机首先运行Power On Self Test (POST),POST检测系统的总内存以及其他硬件设备的现状。如果计算机系统的BIOS(基础输入输出系统)是即插即用的,那么计算机硬件设备将经过检验以及完成配置。计算机的基础输入输出系统(BIOS)定位计算机的引导设备,然后MBR(Master Boot Record)被加载并运行。在预引导阶段,计算机要加载Windows XP的NTLDR文件。 b) 引导阶段 Windows XP Professional引导阶段包含4个小的阶段。 首先,计算机要经过初始引导加载器阶段(Initial Boot Loader),在这个阶段里,NTLDR 将计算机微处理器从实模式转换为32位平面内存模式。在实模式中,系统为MS-DOS保留640kb内存,其余内存视为扩展内存,而在32位平面内存模式中,系统(Windows XP Professional)视所有内存为可用内存。接着,NTLDR启动内建的mini-file system drivers,通过这个步骤,使NTLDR可以识别每一个用NTFS或者FAT文件系统格式化的分区,以便发现以及加载Windows XP Professional,到这里,初始引导加载器阶段就结束了。 接着系统来到了操作系统选择阶段,如果计算机安装了不止一个操作系统(也就是多系统),而且正确设置了boot.ini使系统提供操作系统选择的条件下,计算机显示器会显示一个操作系统选单,这是NTLDR读取boot.ini的结果。(至于操作系统选单,由于暂时条件不够,没办法截图,但是笔者模拟了一个,见图一。) 在boot.ini中,主要包含以下内容: [boot loader]

机动车辆启动过程的几种图象分析

精心整理 机动车辆启动过程的几种图象分析 在分析的过程中涉及的公式有:;;在匀加速运动阶段、;在达到额定功率以后。以上各式中:表示机车发动机功率,即机车发动机牵引力的功率,为机车启动的加速度,表示机车牵引力,并不表示机车受到的合外力,表示以额定功率运动过程的牵引力做功。所以可以得出,机车的启动过程 机动车的启动过程涉及到的图象有:图象、图象(为发动机的牵引力)、图象(为发动机功率)、图象、图象等。 .和图象: 从图象可以看出,汽车在做初速度为零的匀加速运动,在做加速度减小的变加速运动,后做匀速运动。汽车做匀加速运动的最大速度,而最终做匀速运动的速度,从图象可以看出,汽车的额定功率。由得汽车受到的阻力: 由题意分析可知,汽车在匀加速运动过程中受到的牵引力最大,当匀加速运动过程的速度为时功率恰好达到,所以最大牵引力:

:; 。解得汽车的质量 在内为,则, 。解得: .图象和图象: 为,随着机车速度的不断增加,、、三个物理量随之发生变化。下面就机车以恒定加速度启动为例来 ①图甲是图象,图象以、作为纵横坐标,直接反应了与之间的关系,段图象表示机车做匀加速直线运动,牵引力为恒力,随着速度的增加,机车功率逐渐增加,到达点时机车功率达到额定值,段图象表示 图象为双曲线的一支。 由于图象的段为双曲线的一支, ②图乙是图象,由于图象的横轴为,所以分析图象时应该沿着横轴从右向左分析。图象的段表示随着速度的增加,牵引力恒定不变,此过程为匀加速直线运动。图象的段表示随着速度的增加,牵引力逐渐减小,机车发动机功率不变,此过程为变加速直线运动,点时机车速度达到最大,机车开始匀速直线运动。段图象的斜率 ③图丙是图象,图象的段表示匀加速直线运动,段表示变加速直线运动。 在检测某种汽车性能的实验中,质量为㎏的汽车由静止开始沿平直公路行驶,达到的最大速度为 —图象(图象

电脑启动过程详解!!!

电脑启动过程详解 1.当按下电源开关时,电源就开始向主板和其它设备供电,这时电压还不太稳定,主板上的控制芯片组会向CPU发生并保持一个RESET(重置)信号,让CPU内部自动恢复到初始状态,但CPU在些刻不会马上执行指令,当芯片组检查到电源已经开始稳定供电了(当然从不稳定,到稳定的过程只是一瞬间的事情)它便撤去RESET信号(如果是手工按下电脑面板上的RESET按钮来重启机器,那么松开该按钮时芯片组就会撤去RESET信号)CPU马上从地址FFFF0H处开始执行指令,这个地址实际在系统BIOS的地址范围内, 无论是Award BIOS,还是AMI BIOS,在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。 2.系统BIOS的启动代码首先要做的事情就进行POST(Power-On Self Test,加电后自检),POST的主要任务是检查系统中一些关键设备是否存在和是否正常工作,例如内存和显卡等设备.由于POST是最早进行的检查过程,此时显卡还没有初始化,如果系统BIOS在进行POST的过程中发现了些致命错误,例如没有找到内存或内存有问题 (此时只会检查640KB常规内存),那么系统BIOS就会直接控制嗽叭发生声音来报告错误,声音的长短和次数代表了错误的类型.在正常情况下,POST过程进行的非常快,我们几乎无法感觉到它的存在,POST结束之后就会调用其它代码来进行更完整的硬件检测。 3.接下来系统BIOS将查找显卡的BIOS,前面说过,存放显卡BIOS的ROM芯片的超始地址通常设在 C0000H,系统BIOS在这个地方找到显卡BIOS之后就调用它的初始化代码来初始化显卡,此时多数显卡都在屏幕上显示出一些初始化信息,介绍生产厂商,图形芯片类型等内容,不过这个画面几乎是一闪而过,系统BIOS接着会查找其它设备的BIOS程序,找到之后同样会调用这些BIOS内部的初始化代码来初始化相关的设备。 4.查找完所有其它设备的BIOS之后,系统BIOS将显示出它自己的启动画面,其中包括有系统BISO的类型,序列号和版本号等内容. 5.接着系统BIOS将检查和显示CPU的类型和工作频率,然后开始测试所有RAM,并同时在屏莫显示内存测试的速度,用户可以在CMOS设置中自行决定使用简单耗时少或详细耗时多的测试方式. 6.内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘,CD-ROM,串口,并口,软驱等设备,另外绝大数较新版本的系统BIOS在这一过程中还要自动检测和设置内存的定时参数,硬盘参数和访问模式等. 7.标准设备检查完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断,DMA通道和I/O端口等资源。 8.到这一步为止,所有硬件都已经检测配置完毕了,多数系统BIOS会重新清屏并在屏幕上方显示出一个表格,其它概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。 9.接下来系统BIOS会更新ESCD(Extended system configuration data,扩展系统配置数据.)ESCD是系统BIOS用来与操作系统交换硬件配置信息的一种手段,这些数据被存放在CMOS之中,通常ESCD数据只在系统配置发生改变后才会更新,所以不是每次启动电脑时都能够看到"updata ESCD … Success"这样的信息, 不过某些主板的系统BIOS在保存ESCD数据时使用了与widnwos 9x不相同的数据格式,于是widnwos 9x在启动过程中会把ESCD数据修改成自己的格式,但在下一次启动时,既使硬件配置没有发生改变,系统BIOS也会把ESCD的数据格式修改回来,如此循环,将会导致在每次启动电脑时,系统BIOS都要更新一遍ESCD,这就是为什么有些机器在每次启动时都会显示出相关信息的原因。 10.ESCD更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软件,硬件或光驱启动,以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的引导记录,而分区引导记录将负责读取并执行 IO.SYS这是DOS和widnows 9x的IO.SYS(或NT的NTLDR)首先要初始化一些重要的系统数据,然后将显示出我们熟悉的蓝天白云,在这幅画面之下,widnwos 将继续进行DOS部分和GUI(图形用户界面)部分的引导和初始化工作. 上面介绍的便是电脑在打开电源开关(或按RESET)进行冷启动时所要完成的各种初始化工作,如果在DOS 下按Ctrl Alt DEL组合键,(或从windows中选择重新启动电脑)来进行热启动,那么POST过程将被跳过去,

keil下C51启动代码详解

由于CPU和程序启动代码文件STARTUP.a51的重要性,一些8051派生的CPU产品要求初始化CPU来满足设计中的相应的硬件,因此,有时候用户需要对STARTUP.a51进行修改,所以进行注释一下: ;--------------------------------------------------- ;startup.A51: 用户上电初始化程序 ;---------------------------------------------------- ; ;使用以下EQU命令可定义在CPU复位时需要用0进行初始化的内存空间 ; ;IDA TA存储器的空间的绝对起始地址总是零 IDA TALEN EQU 80H ;需用0进行初始化的IDA TA存储器空间的字节数 ; XDA TASTART EQU 0H ;XDA TA存储器空间的绝对起始地址 XDA TALEN EQU 0H ;需用0进行初始化的XDA TA存储器的空间字节数 ; PDA TASTART EQU 0H ;PDA TA存储器的空间的绝对起始地址 PDA TALEN EQU 0H ;需用0进行初始化的PDA TA存储器的空间字节数 ;注意:IDA TA存储器的空间在物理上包括了8051单片机的DA TA和BIT存储空间 ;至少要保证与C51编译器运行库有关的存储器的空间进行0初始化 ; ;再入函数模拟初始化 ;----------------------------------------------------------- ;以下用EQU指令定义了再入函数模拟堆栈指针的初始化 ; ;使用SMALL存储器模式时再入函数的堆栈空间 IBPSACK EQU 0 ;使用SMALL存储器模式再入函数时将其设置成1 IBPSTACKTOP EQU 0FFH+1 ;将堆栈顶设置为最高地址加1 ; ;使用LARGE存储器模式时再入函数的堆栈空间 XBPSTACK EQU 0 ;使用LARGE存储器模式再入函数时将其设置成1 XBPSTACKTOP WQU 0FFFFH+1 ;将堆栈顶设置为最高地址加1 ; ;使用COMPACT存储器模式时再入函数的堆栈空间 PBPSTACK EQU 0 ; 使用COMPACT存储器模式再入函数时将其设置成1 PBPSTACKTOP WQU 0FFFFH+1 ;将堆栈顶设置为最高地址加1 ;;---------------------------------------------------- ;使用COMPACT存储器模式时,64KB X DA TA存储器空间的分页定义 ; ;以下用EQU指令定义PDA TA类型变量在XDA TA存储器空间的页地址 ;使用EQU指令定义PFAGE时必须与L51连接定位器PDA TA指令的控制参数一致 ; PPAGEENABLE EQU 0 ;使用PDA TA类型变量时将其设置成1 PPAGE EQU 0 ;定义页号 ; ;------------------------------------------------ NAME ? C_STARTUP ;模块名为? C_STARTUP ? C_51STARTUP SEGMENT CODE ;代码段 ? STACK SEGMENT IDA TA;堆栈段 RSEG ? STACK ;堆栈 DS 1 EXTRN COE(? C_START) ;程序开始地址

项目启动过程组包括如下内容

项目立项管理这一章主要考查以下知识点 1,需求分析的概念, 需求分析是对要解决的问题进行详细的分析,弄清项目发起人及项目其他干系人的要求,待开发的信息系统要解决客户和用户的业务问题以及问题的来龙去脉。可以说,需求分析就是确定待开发的信息系统应该“做什么” 2,需求分析的方法 3,项目建议书的内容 项目建议书主要包括如下内容 1)项目的必要性。 2)项目的市场预测。 3)产品方案或服务的市场预测。 4)项目建设必需的条件。 项目建议书的主要内容 1)项目名称 2)项目建设的必要性和依据 3)项目目的,作用及意义 4)项目的国内外技术发展概况,水平和发展趋势 5)研究开发领域,主要关键技术,研究内容,技术方案和实验地点,规模,进度安排。 6)项目的研究开发情况,现有工作基础和设备条件 7)项目负责人,项目主要技术人员 8)项目起止时间,最终达到的目标,前景及预期考核的技术经济指标。 9)项目经费预算,用途和用款计划 10)其他 4,项目建议书的编制方法 5,项目可行性研究报告的内容 项目可行性研究报告一般应包括如下内容 1)投资必要性 2)技术的可行性 3)财务可行性 4)组织可行性 5)经济可行性 6)社会可行性 7)风险因素及对策 6,项目可行性研究报告的编制方法 7,招投标的主要过程 8,招投标的关键产物 9,立项申请书(项目建议书)的编写,提交和获得批准 10,项目初步可行性研究,详细可行性研究的方法,项目论证评估的过程和方法 项目启动过程组包括如下内容 1)制定项目章程 2)制定初步的项目范围说明书

项目的计划过程组包括如下内容 1)制定项目管理计划 2)编制项目范围管理计划 3)范围定义 1,创建工作分解结构WBS 将主要的项目可交付物和项目工作细分成更小,更易于管理的部分。 2,活动定义确定为了产生不同的项目可交付物所必须执行的特定的活动。 3,活动排序用于明确活动之间的相互依赖关系,并记录 4,活动资源估算用于估算每个活动所需的资源 5,活动历时估算用于估算完成每个活动所需的时间 6,制定进度计划用户分析活动顺序,活动工期以及资源需求,确定每个活动的具体工期安排,制定项目进度7,成本估算用于确定为完成项目所需资源的大致成本 8,成本预算为每项活动按照其工期分配资金与资源,建立项目的成本基线。 9,制订项目的质量管理计划用于明确与项目相关的质量标准,并确定达到标准的方法 10,制订项目人力资源管理计划用于明确项目角色,职责和报告机制,建立项目的人员管理计划 11,制订项目沟通管理计划用于确定项目干系人的信息和沟通要求 12,制订项目风险管理计划用于决定使用何种方法来实施项目的风险管理活动。 13,风险识别用于确定哪些风险可能会影响项目,并且记录他们的特征 14,风险定性分析用于总结风险出现的概率和影响,对风险进行优先级的排序,便于后续的分析 15,风险定量分析用于确定风险对整体项目目标的定量影响 16,制定风险应对计划用于制定风险应对计划以增强对计划的把握,降低风险对项目目标的威胁 17,制定项目采购管理计划用于确定项目采购什么和何时采购 18,编制合同用于记录材料,产品,货物和服务的需求,并识别潜在的供方。 执行过程组包括如下内容 1)指导和管理项目执行按照计划定义的活动执行,收集可交付物的完成状态和工作完成信息,反馈到绩效报告2)执行质量保证执行已计划好的,系统性的质量活动来确保项目满足质量要求的过程。 3)获取项目团队成员招收为完成项目所需的人力资源 4)团队建设培育个人和团队的能力以提升项目绩效 5)信息发布及时向项目干系人提供他们所需的信息 6)询价获取信息,报价,投标文件,出价和提交建议苏 7)供方选择评标和选择潜在供方以及与供方协商并签订合同 8)合同管理管理与卖方之间的关系 监督和控制过程组包括如下内容 1)监督和控制项目工作用于收集,测量,发布绩效信息,评估趋势以及过程改进,绩效报告提供项目在范围,进度,成本和风险上的执行情况。 2)整体变更控制用于控制变更的因素以确保这些变更是有利的或可控的,确定是否已出现变更,管理已批准的变更 3)范围验证用于正式验收项目的阶段成果或项目的最终成果,也叫范围确认 4)范围变更控制用于控制项目范围的变更 5)进度控制用于控制项目进度的变更 6)成本控制用于控制项目预算的变更,对造成成本变化的因素施加影响 7)质量控制用于监督特定的项目结果来确定是否符合相应的质量标准 8)管理项目团队用于跟踪个人和团队的绩效,提供反馈,分析问题和提高项目绩效 9)绩效报告用于收集和发布绩效信息,包括项目的状态报告,进展和预测

计算机启动过程

从打开电源到开始操作,计算机的启动是一个非常复杂的过程。 零、boot 的含义 先问一个问题,"启动"用英语怎么说? 回答是boot。可是,boot 原来的意思是靴子,"启动"与靴子有什么关系呢?原来,这里的boot 是bootstrap(鞋带)的缩写,它来自一句谚语: "pull oneself up by one's bootstraps" 字面意思是"拽着鞋带把自己拉起来",这当然是不可能的事情。最早的时候,工程师们用它来比喻,计算机启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序! 早期真的是这样,必须想尽各种办法,把一小段程序装进内存,然后计算机才能正常运行。所以,工程师们把这个过程叫做"拉鞋带",久而久之就简称为boot 了。 计算机的整个启动过程分成四个阶段。 一、第一阶段:BIOS 上个世纪70 年代初,"只读内存"(read-only memory,缩写为ROM)发明,开机程序被刷入ROM 芯片,计算机通电后,第一件事就是读取它。 这块芯片里的程序叫做"基本輸出輸入系統"(Basic 无效/Output System),简称为BIOS。1. 1 硬件自检 BIOS 程序首先检查,计算机硬件能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test),缩写为POST。 如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止。如果没有问题,屏幕就会显示出CPU、内存、硬盘等信息。 1. 2 启动顺序 硬件自检完成后,BIOS 把控制权转交给下一阶段的启动程序。 这时,BIOS 需要知道,"下一阶段的启动程序"具体存放在哪一个设备。也就是说,BIOS 需要有一个外部储存设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做"启动顺序"(Boot Sequence)。 打开BIOS 的操作界面,里面有一项就是"设定启动顺序"。 二、第二阶段:主引导记录 BIOS 按照"启动顺序",把控制权转交给排在第一位的储存设备。 这时,计算机读取该设备的第一个扇区,也就是读取最前面的512 个字节。如果这512 个字节的最后两个字节是0x55 和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给"启动顺序"中的下一个设备。 这最前面的512 个字节,就叫做"主引导记录"(Master boot record,缩写为MBR)。 2. 1 主引导记录的结构 "主引导记录"只有512 个字节,放不了太多东西。它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。 主引导记录由三个部分组成: (1)第1-446 字节:调用操作系统的机器码。 (2)第447-510 字节:分区表(Partition table)。 (3)第511-512 字节:主引导记录签名(0x55 和0xAA)。 其中,第二部分"分区表"的作用,是将硬盘分成若干个区。 2. 2 分区表 硬盘分区有很多好处。考虑到每个区可以安装不同的操作系统,"主引导记录"因此必须知道将控制权转交给哪个区。

项目启动计划书格式流程

项目启动计划书

一、公司简介 1.1公司基本信息 公司名称大同市天涯拓展有限责任公司 项目名称天涯素质拓展训练培训机构 项目创始人王磊 地址亲水湾 企业性质有限责任公司 注册日期 注册资本100万元人民币 公司网址 天涯拓展有限公司成立于2017年3月13日,作为一家素质拓展公司,就是要把大同市中、小学,各大小教育机构中3到16岁之间的青少年素质拓展项目进行整合,通过营销策划,为相关培训机构提供素质拓展、课外活动的服务;从而把大中小型课外培训机构、企事业单位、民间团体商家结合起来,推动素质拓展活动的联盟,达到资源整合、互惠互利的目的。 1.2公司使命 打造大同市素质拓展活动联盟第一品牌 1.3公司服务范畴 涵盖了幼小衔接亲子营、3到16岁青少年课外素质拓展、企事业单位团体

员工管理培训等多个方面。 二、项目综述 2.1项目简介 素质拓展训练是一种以提高心理素质为主要目的,兼具体能和实践的综合素质教育,它以运动为依托,以培训为方式,以感悟为目的。它与传统的知识培训和技能培训相比,少了一些说教和灌输,多了一些运动中的体验和感悟。拓展训练能使青少年学生激发个人潜能,培养乐观的心态和坚强的意志,提高沟通交流的主动性和技巧性,树立相互配合、相互支持的团队精神,极大增强合作意识,从而达到提高学生心理素质的目的。因此,这种培训方式成为学生学习生活经验、体验社会教育、形成正确的人际、情感和社会性价值观等教育目标的一个重要途径,是青少年学生素质教育中不可缺少的一项。本项目就是要把素质拓展作为一项服务,为社会团体,特别是广大青少年提供一个专业、安全、有价值的培训平台。 2.2项目精髓 实现广大青少年及各大小培训机构素质拓展方面专业性的指导,联合大同市教育商圈,做专业级平台,帮助大同市教育联盟打造一套完整的户外素质拓展活动流程。 2.3关键概念释义 大同市教育培训联盟,是一种创新的商业运营模式,整合同一商圈、同一行业、不同商家资源,为形成必要的规模效应、商业信息网络、增强商家的经济活力及收益,通过联盟的方式组成的利益共同体。项目以整合互动营销为核心,通过资源整合、资源共享,实现多方共赢。 做专业级平台,是本项目的核心概念,以素质拓展活动为开端,不断吸收经验,在稳步发展中吸纳一些教育资源,达到联合其他学校、其他机构,一起做活动的目的。在活动规模、活动专业度来说,做到行业最高标准。 吸引更多的机构一起参与、一起合作,达到资源共享,利益最大化。 2.4具体做法

Windows启动过程详解

Windows启动过程详解 我们每天都在和Windows打交道,很多人可能每天都要面对多次W indows的启动过程,可是您知道在Windows的启动过程背后,隐藏着什么秘密吗?在这一系列过程中都用到了哪些重要的系统文件?系统的启动分为几个步骤?在这些步骤中计算机中发生了什么事情?这些就是本文试图告诉您的。 本文的适用范围 随着技术的发展,我们能够见到的计算机硬件种类越来越多。以计算机上最重要的组件CPU来说,目前就有很多选择。当然,这里的选择并不是说AMD或者Intel这种产品品牌,而是指其内部的体系结构。目前常见的CPU体系结构主要基于复杂指令集(Complex I nstruction Set Computing,CISC)或者精简指令集(Reduced Ins truction Set Computing,RISC),我们常用的Intel的Pentium、C eleron系列以及AMD的Athlon、Sempron系列都是基于复杂指令集的,而这些基于复杂指令集的CPU还有32位和64位的寄存器数据带宽区别。关于这些指令集以及寄存器数据带宽之间的区别等内容比较繁杂,而且不是本文的重点,感兴趣的朋友可以自己在网上搜索相关内容。因为CPU种类的不同,在不同CPU的系统中运行的Wind ows的启动过程也有一些小的不同。本文将会以目前来说最普遍的,在x86架构的系统上安装的32位Windows XP Professional为例向

您介绍。 基本上,操作系统的引导过程是从计算机通电自检完成之后开始进行的,而这一过程又可以细分为预引导、引导、载入内核、初始化内核,以及登录这五个阶段。 在继续阅读之前,首先请注意图1,这是Windows XP的操作系统结构,其中包括了一些在后台工作的组件以及经常和我们打交道的程序。在了解Windows XP的启动过程之前,对系统结构有一个初步概念是很重要的。

电脑启动过程详解

电脑从按完开关加电开始直到进入到系统桌面的整个过程详解本文以Windows2000/xp和Windows Vista/7两个内核做讲解 电脑从加电到进桌面可以分为两大部分: 无论是Windows2000/XP还是Windows Vista/7,在硬件自检方面都是想同的,不同的是在系统加截。 硬件部分: 在讲解前,我们先来了解几个概念: BIOS:即“Basic Input/Output System”(基本输入输出系统),它是一组被“固化”在计算机主板上的一块 ROM 中直接关联硬件的程序,保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序,其主要功能是为计算机提供最底层的、最直接的硬件设置和控制,它包括系统 BIOS(主板 BIOS).其它设备 BIOS(例如 IDE 控制器 BIOS、显卡 BIOS 等)其中系统 BIOS 占据了主导地位.计算机启动过程中各个 BIOS 的启动都是在它的控制下进行的。 CMOS:即“Complementary Metal-Oxide-Semiconductor”(互补金属氧化物半导体),它本是计算机系统内一种重要的芯片,保存了系统引导最基本的资料。 内存地址:我们知道,内存空间的最基本单位是位,8 位视为一个字节,即我们常用的单位 B,内存中的每一个字节都占有一个地址(地址是为了让 CPU 识别这些空间,是按照 16 进制表示的),而最早的 8086 处理器只能识别 1MB(2 的 20 次方 B)的空间,这 1MB 内存中低端(即最后面)的 640KB 就被称为基本内存,而剩下的内存(所有的)则是扩展内存。这 640KB 的空间分别由显存和各 BIOS 所得。 我们来看一下硬件部分的流程图:

linux内核启动 Android系统启动过程详解

linux内核启动+Android系统启动过程详解 第一部分:汇编部分 Linux启动之 linux-rk3288-tchip/kernel/arch/arm/boot/compressed/ head.S分析这段代码是linux boot后执行的第一个程序,完成的主要工作是解压内核,然后跳转到相关执行地址。这部分代码在做驱动开发时不需要改动,但分析其执行流程对是理解android的第一步 开头有一段宏定义这是gnu arm汇编的宏定义。关于GUN 的汇编和其他编译器,在指令语法上有很大差别,具体可查询相关GUN汇编语法了解 另外此段代码必须不能包括重定位部分。因为这时一开始必须要立即运行的。所谓重定位,比如当编译时某个文件用到外部符号是用动态链接库的方式,那么该文件生成的目标文件将包含重定位信息,在加载时需要重定位该符号,否则执行时将因找不到地址而出错 #ifdef DEBUG//开始是调试用,主要是一些打印输出函数,不用关心 #if defined(CONFIG_DEBUG_ICEDCC)

……具体代码略 #endif 宏定义结束之后定义了一个段, .section ".start", #alloc, #execinstr 这个段的段名是 .start,#alloc表示Section contains allocated data, #execinstr表示Section contains executable instructions. 生成最终映像时,这段代码会放在最开头 .align start: .type start,#function /*.type指定start这个符号是函数类型*/ .rept 8 mov r0, r0 //将此命令重复8次,相当于nop,这里是为中断向量保存空间 .endr b 1f .word 0x016f2818 @ Magic numbers to help the loader

GRUB2启动代码详解

GRUB2的介绍 目前Grub1已经停止开发了,不再增加新的功能,所有的开发都转移到Grub2上了,Grub 2 是新一代的Grub,它实现了一些Grub中所没有的功能:1.模块化设计 不同于Grub的单一内核结构,Grub 2 的功能分布在很多的小模块中,并且能在运行时动态装载和卸除。 2.支持多体系结构Grub 2可支持PC(i386), MAC(powerpc)等不同的体系结构,而且支持最新的EFI架构。 3.国际化的支持Grub 2 可以支持非英语的语言。 4.内存管理Grub 2 有真正的内存管理系统。 5.脚本语言Grub 2 可以支持脚本语言,例如条件,循环,变量,函数等。 当然,Grub 2正处在开发阶段,因此以上的某些功能可能现阶段还不是很完善。 如果你熟悉Grub2,应该可以看明白里面的内容。要注意的是: a、timeout, default等参数用变量来储存 b、菜单项由menuentry定义 c、第1个分区是(hd0,1)而不是(hd0,0) 理论的东西说多了大家估计也晕,举个简单的例子:在grub1中,要改变启动背景的时候只能选择支持640X480分辨率并且格式也只能是.xpm的图片,分辨率稍微大点的图就显示不出来了,但grub2不存在这个问题,它有更绚丽的菜单界面,grub2默认.png .tga .jpeg等很多种格式的图片都支持,而且支持的图片分辨率也更大。

GRUB2启动代码分析 # # DO NOT EDIT THIS FILE # # It is automatically generated by /usr/sbin/grub-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub # ### BEGIN /etc/grub.d/00_header ### if [ -s $prefix/grubenv ]; then #如果“$prefix/grubenv”目录不为空 load_env #从grubenv文件中加载环境变量 fi set default="0" #启动第1项# if [ ${prev_saved_entry} ]; then #如果prev_saved_entry的值不为空 set saved_entry=${prev_saved_entry} #将saved_entry的值设置成变量prev_saved_entry的值。 save_env saved_entry #将变量saved_entry保存到grubenv文件中。 set prev_saved_entry= #将prev_saved_entry的值设置为空 save_env prev_saved_entry #将prev_saved_entry保存到grubenv文件中 set boot_once=true #将boot_once的值设置为真(貌似是为了标志已经设置过启动的相关环境变量了)fi function savedefault {

项目启动会流程

一、开项目启动会前,需要准备以下事宜。 1、与项目发起人(销售或公司高层领导,外部项目一般是销售,内部项目一般是公司高层)沟通了解项目整体情况:市场份额、项目情况、分工界面、发起方负责部门和负责人员、关键里程碑等。 2、跟领导确认项目团队框架,开发人员、测试人员、售前、产品、交付、采购等。确认项目预算。 3、跟项目负责人简单沟通项目情况,了解他们目前的工作分配,对此项目的了解和可以参加项目启动会时间 4、找一个最近的且关键团队人员能够参加的时间作为项目启动会召开时间,提前与他们沟通确认时间是否可以,并至少提前两天发邮件通知大家,开会时间、地点和项目议题等。 二、项目启动会一般流程: 1、领导开场,说明项目远景,并指定项目经理及内部关键干系人(售前负责人、研发经理、采购负责人、售前等,一般会前已经沟通好的)。 2、发起人(销售或公司高层领导),说明项目成立背景和成功标准,里程碑规划,项目主要干系人 3、售前,简单介绍项目情况,技术架构,周边项目及厂商 4、研发经理,介绍开发人员配置及入场时间,及相应开发周期 5、测试经理,说明测试人员配置及入场时间 6、采购,说明下项目需采购设备周期 7、交付,说明下实施周期及实施方案讨论

8、项目经理,会议中主持会议,防止会议跑题、时间控制、记录会议要点等,会议后梳理会议结论并给会议参与人员和项目人员群发会议纪要。 项目启动会主要是信息共享,而非问题讨论,最好会前与各方沟通清楚各方的工作职责和事项。项目启动会控制在一个小时为佳,超过2个小时仍在争论,没能达成明确清晰的分工,就算是失败的项目启动会。 三、项目启动会会议纪要要点 参与人员、地点、时间 合同类型、市场份额、涉及省市、周边厂商 公司内部项目相关负责人,各负责人职责;局方相关的联系人公司内部项目流程 关键里程碑(到货、开发、测试等关键时间点) 项目所需注意事项

计算机启动过程

计算机启动过程 讲课教师:黄小龙 计算机启动过程总体分为两个过程,即硬件启动过程和操作系统启动过程。本课中操作系统我们仅选用Windows XP 的启动过程讲解。 一、硬件启动过程 ⑴加电 按下电源开关后,电源就开始向主板和其它设备供电,此时电压还不稳定, 主板上的控制芯片组会向CPU 发出并保持一个RESET(重置)信号,让CPU 初始化。当电源开始稳定供电后,芯片组便撤去RESET 信号(如果是按下Reset 按钮来重启,那么松开该按钮时芯片组就会撤去RESET 信号)。然后,CPU 马上就从地址FFFF0H 处开始执行指令(这是BIOS 的起始地址),但放在这里的只是一条跳转指令,跳到系统真正的BIOS 启动代码处,由BIOS 的代码进行下一步的POST 自检。 ⑵BIOS 进行post

POST就是加电自检,它是Power On Sel f Test的缩写。它是检查一些关键设备是否存在和能否正常工作,如内存和显卡等。如果发现错误,则通过喇叭发声来报告错误情况,此时的声音长短和次数代表了错误类型。 注:由于POST的检测过程在显示卡初始化之前,因此POST 自检过程发现的错误是无法在屏幕上显示出来的。 ⑶BIOS检测硬件的各种信息 BIOS进行加电自检后,就开始检测计算机上硬件设备的各种信息,如设备类型、工作频率、芯片组型号、出厂厂商等。这阶段的硬件检测顺序是:显示卡、CPU、内存、其它标准硬件设备(如硬盘、光驱、软驱、外设等)。 ⑷BIOS更新ESCD 按下来系统BIOS将更新ESCD(Extended System Configuration Data,扩展系统配置数据)。ESCD是系统BIOS用来与操作系统交换硬件配置信息的数据,这些数据被存放在CMOS之中。通常ESCD数据只在系统硬件配置发生改变后才会进行更新,因此不是每次启动都能看到"Update ESCD... Success"这样的信息。不过,某些主板的BIOS在保存ESCD数据时使用了与Windows 9x 不相同的数据格式,于是Windows 9x在每一次启动都会把ESCD 数据转换成自己的格式,导致BIOS每次重新启动时都认为是硬件配置发生变化,并重新改写ESCD数据,这就是为什么有的计算机在每次启动时都会显示"Update ESCD... Success"信息的原因。

uboot启动代码详解

·1 引言 在专用的嵌入式板子运行GNU/Linux 系统已经变得越来越流行。一个嵌入式Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。固化在固件(firmware)中的boot 代码,也就是Boot Loader,它的启动通常分为两个阶段。 2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系统和建立于Flash 内存设备之上文件系统,root fs。 4. 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI 有:MicroWindows 和MiniGUI 等。 引导加载程序是系统加电后运行的第一段软件代码。回忆一下PC 的体系结构我们可以知道,PC 机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR 中的OS Boot Loader(比如,LILO 和GRUB 等)一起组成。BIOS 在完成硬件检测和资源分配后,将硬盘MBR 中的Boot Loader 读到系统的RAM 中,然后将控制权交给OS Boot Loader。Boot Loader 的主要运行任务就是将内核映象从硬盘上读到RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。 而在嵌入式系统中,通常并没有像BIOS 那样的固件程序(注,有的嵌入式CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由Boot Loader 来完成。比如在一个基于ARM7TDMI core 的嵌入式系统中,系统在上电或复位时通常都从地址 0x00000000 处开始执行,而在这个地址处安排的通常就是系统的Boot Loader 程序。·2 bootloader简介 简单地说,Boot Loader (引导加载程序)就是在操作系统内核运行之前运行的一段小程序,它的作用就是加载操作系统, 实现硬件的初始化,建立内存空间的映射图,为操作系统内核准备好硬件环境并引导内核的启动。如上图所示的那样在设备的启动过程中bootloader位于最底层,首先被运行来引导操作系统运行,很容易可以看出bootloader是底层程序所以它的实现严重地依赖于硬件,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,一些功能强大、支持硬件环境较多的BootLoader也被广大的使用者和爱好者所支持,从而形成了一些被广泛认可的、较为通用的的bootloader实现。 2.1 Boot Loader 所支持的CPU 和嵌入式板 每种不同的CPU 体系结构都有不同的Boot Loader。有些Boot Loader 也支持多种体系结构的CPU,比如U-Boot 就同时支持ARM 体系结构和MIPS 体系结构。除了依赖于CPU 的体系结构外,Boot Loader 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU 而构建的,要想让运行在一块板子上的Boot Loader 程序也能运行在另一块板子上,通常也都需要修改Boot Loader 的源程序。 2.2 Boot Loader 的安装媒介(Installation Medium)

相关文档
最新文档