基于ARM的Linux的启动分析

说明: 本文主要的分析基于ARM的linux-2.6.17内核启动过程分析

基于ARM 的Linux 的启动分析

说明: 本文主要的分析基于ARM的linux-2.6.17内核启动过程分析。

1、Linux 内核的启动方案:

由/arch/arm/Makefile的代码:

define archhelp

echo '* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)' echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)' echo '* xipImage - XIP kernel image, if configured

(arch/$(ARCH)/boot/xipImage)'

echo ' bootpImage - Combined zImage and initial RAM disk'

echo ' (supply initrd image via make variable

INITRD=<path>)'

echo ' install - Install uncompressed kernel'

echo ' zinstall - Install compressed kernel'

echo ' Install using (your) ~/bin/installkernel or'

echo ' (distribution) /sbin/installkernel or'

echo ' install to $$(INSTALL_PATH) and run lilo'

endef

可以看出,主要有三种启动方案,分别是:

echo '* zImage - Compressed kernel image (arch/$

(ARCH)/boot/zImage)'

echo ' Image - Uncompressed kernel image (arch/$

(ARCH)/boot/Image)'

echo ' bootpImage - Combined zImage and initial RAM disk'

echo ' (supply initrd image via make variable INITRD=<path>)'。

Linux内核有两种映像:一种是非压缩内核,叫 Image,另一种是它的压缩版

本,叫zImage。根据内核映像的不同,Linux内核的启动在开始阶段也有所不同。 zImage是Image经过压缩形成的,所以它的大小比 Image小。但为了能使用 zImage,必须在它的开头加上解压缩的代码,将 zImage解压缩之后才能执行, 因此它的执行速度比Image要慢。但考虑到嵌入式系统的存储空容量一般比较小, 采用zImage可以占用较少的存储空间,因此牺牲一点性能上的代价也是值得的。 所以一般的嵌入式系统均采用压缩内核的方式(另外bootpImage 是编译包含 zImage和initrd的映像,可以通过make变量INITRD=<path>提供initrd映像)

2.典型启动方案的代码结构:

(1).Image启动方案的代码结构:

#arch/arm/boot/Makefile:

$(obj)/Image: vmlinux FORCE

$(call if_changed,objcopy)

@echo ' Kernel: $@ is ready'

由此可见,Image由vmlinux 二进制化得到的。

Image的是由kernel/vmlinux构成的。

(2).zImage启动方案的代码结构:

基于ARM的Linux的启动分析相关文档

最新文档

返回顶部