Android培训班(88)内核解压过程1

本文详细解析了压缩内核的解压过程,从Linux内核的编译入手,介绍了如何从/Android-2.0/kernel/arch/arm/boot目录下的piggy.S、head.S等文件开始分析,特别关注了head.S文件的结构及其在启动过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由上面的编译过程可知,内核一般是压缩后保存,并由引导程序加载到内存,然后CPU跳到相应的位置运行的,因为压缩后的代码是不能直接运行,所以必须存在一个解码的过程,而这个解码过程是怎么样执行呢?又是怎么样实现的呢?下面带着这两个问题来学习解压的过程。


从上面分析编译过程,就可以知道需要从目录/Android-2.0/kernel/arch/arm/boot入手,在这个目录里主有piggy.Shead.Smisc.cvmlinux.lds文件,在连接时是把head.S连接到内核的最开始位置,以便最先运行,这是由vmlinux.lds里决定。因此,就是从head.S来开始分析。


/*

* linux/arch/arm/boot/compressed/head.S

*

* Copyright (C) 1996-2002Russell King

* Copyright (C) 2004 Hyok S.Choi (MPU support)

*

* This program is free software;you can redistribute it and/or modify

* it under the terms of the GNUGeneral Public License version 2 as

* published by the Free SoftwareFoundation.

*/

#include<linux/linkage.h>


head.S的第一段代码,主要描述了本文件名称和位置,以及作者、版权、编写和修改时间。接着包括linux/linkage.h头文件。在内核文件里,都遵守这样的编码规范,添加上开发人员,方便大家跟开发人员交流,并提出建议。添加上修改时间,方便验证文件是否最新的,并且做了那些修改,作为备忘录的作用。


包含linkage.h文件,主要是声明一些宏定义,比如ALIGNENTRY(name)WEAK(name)KPROBE_ENTRY(name)KPROBE_END(name)END(name)ENDPROC(name)等宏。使用这些宏,可以在多个汇编文件里使用,方便代码维护,比如只需要修改头里的宏定义,就可以把所有使用到这些宏定义的文件进行修改了。

转载于:https://www.cnblogs.com/ajuanabc/archive/2012/02/12/2463057.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值