zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

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

Android内核 过程 解压 培训班 88
2023-09-14 09:10:36 时间

由上面的编译过程可知,内核一般是压缩后保存,并由引导程序加载到内存,然后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)等宏。使用这些宏,可以在多个汇编文件里使用,方便代码维护,比如只需要修改头里的宏定义,就可以把所有使用到这些宏定义的文件进行修改了。