linux arm soc,ARM Linux Android启动分析

提纲

0)方法论

1)uboot启动内核

2) 内核启动step 1

3) Android启动

方法论

苏格哪里说:不懂得方法论的同志不是好同志。

苏格哪里又说:对Linux内核的分析一定要注意方法论。

本次分析的历程要经历三个大的环节:u-boot引导内核、内核启动并初始化进程、Android启动初始服务。

实施的方式:不为分析而分析,要学以致用,为实践而分析;有分析、有实践、有总结,方能有效果。

1关于内核镜像的格式

1.1内核镜像的格式问题

内核编译的最后,可以看到下面的链接和处理过程:

LD      vmlinux

SYSMAP  System.map

SYSMAP  .tmp_System.mapOBJCOPY arch/arm/boot/Image  Kernel: arch/arm/boot/Image is ready

AS      arch/arm/boot/compressed/head.o

GZIP    arch/arm/boot/compressed/piggy.gz

AS      arch/arm/boot/compressed/piggy.o

CC      arch/arm/boot/compressed/misc.o

AS      arch/arm/boot/compressed/head-xscale.oLD      arch/arm/boot/compressed/vmlinux

OBJCOPY arch/arm/boot/zImage

vmlinux编译出来的最原始的内核文件,elf格式,是经过压缩的Image和加入了解压头的elf格式的文件。

zImage是在vmlinux基础上,objcopy处理了的可以直接下到对应的地址执行的内核镜像。

GNU实用工具程序objcopy的作用是拷贝一个目标文件的内容到另一个目标文件中。Objcopy可以使用不同于源目标文件的格式来写目的目标文件(也即是说可以将一种格式的目标文件转换成另一种格式的目标文件)。使用Objcopy产生一个原始的二进制文件,实质上是进行了一回输入目标文件内容的内存转储。所有的符号和重定位信息都将被丢弃。内存转储起始于输入目标文件中那些将要拷贝到输出目标文件去的部分的最小虚地址处。

bzImage bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的tag。可以使用u-boot提供的mkimage工具在zImage上打上头,生成uImage。

typedef struct image_header {

uint32_t ih_magic;/* Image Header Magic Number */

uint32_t ih_hcrc; /* Image Header CRC Checksum */

uint32_t ih_time; /* Image Creation Timestamp */

uint32_t ih_size; /* Image Data Size */

uint32_t ih_load; /* Data Load Address */

uint32_t ih_ep; /* Entry Point Address */

uint32_t ih_dcrc; /* Image Data CRC Checksum */

uint8_t ih_os; /* Operating System */

uint8_t ih_arch; /* CPU architecture */

uint8_t ih_type; /* Image Type */

uint8_t ih_comp; /* Compression Type */

uint8_t ih_name[IH_NMLEN]; /* Image Name */

} image_header_t;

2 boot如何启动内核

执行do_bootm

执行do_bootm_linux

3 uboot传递参数给内核

4不加image_header_t也能被引导?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值