![]() |
久久建筑网(m.kkreddy.com)致力打造一个专业的建筑学习分享平台! | 用户登录 免费注册 | 投诉举报 | 会员中心 | 上传资料 |

linux启动流程分析---内核解压缩过程.doc
资料评价:
暂无
生成时间:
2021-06-15
下载权限:
免费会员
文件大小:
34KB
文件类型:
.doc
浏览次数:
2
建筑论坛:
上传会员:
trntg
所属栏目:
网络技术
下载地址:
资料是由会员“trntg”上传到本平台,如有不妥请联系客服。违规侵权投诉
linux启动流程分析---内核解压缩过程。
启动流程分析内核解压缩过程内核压缩和解压缩代码都在目录,表格
启动流程分析内核解压缩过程内核压缩和解压缩代码都在目录,
编译完成后将产生、、、、这几个文件,
是内核的头部文件,负责初始设置;
将主要负责内核的解压工作,它在之后;
文件主要针对的初始化,将在链接时与合并;
是一个中间文件,其实是一个压缩的内核,只不过没有和初始化文件及解压文件链接而已;
是没有--:是压缩过的内核压缩过的内核,就是由、、、组成的。
在完成系统的引导以后并将内核调入内存之后,调用,
这个函数将跳转到的起始位置。如果没有压缩,就可以启动了。
如果压缩过,则要进行解压,在压缩过的头部有解压程序。
压缩过得入口第一个文件源码位置在。
它将调用函数,这个函数在文件中,
又调用进行设置,
然后使用在打印出信息“”后,调用。将内核放于指定的位置。
以下分析文件:
对于各种的输出设定,通过定义宏来统一操作。
设置开始和结束地址,保存。
如果在以上的中,用的是用户模式,则升到超级用户模式,然后关中断。
分析结构,判断是否需要重载内核地址存入偏移量,判断是否为零。
这里是否需要重载内核地址,我以为主要分析、
和三个文件,主要看链接文件的主要段的位置,
=,而对于、的位置只设为,=。
对于这样的结果依赖于,对内核解压的运行方式,也就是说,内核解压前是在内存中还是在上,
因为这里,我们的将压缩内核移到了的位置,我们的压缩内核是在内存从地址开始顺序排列,
因此我们的获得的偏移量是载入地址。接下来的工作是要把内核镜像的相对地址转化为内存的物理地址,即重载内核地址。
需要重载内核地址,将的偏移量加到和中。
清空堆栈空间-。
建立程序运行需要的缓存,并赋于的栈空间。
这时是缓存的结束地址,是的最后执行地址,是境象文件的开始地址。检查是否地址有冲突。
将等于,使后的地址就在的栈之后。
调用文件的函数,解压内核于缓存结束的地方地址之后。此时各寄存器值有如下变化:
为解压后的大小
为执行时的地址
为解压后的起始地址
为类型值
为系统类型值
将代码拷贝之之后+之后,首先清除缓存,而后执行。
将开始的重载于地址处。
清除内容,关闭,将中赋于,执行开始的代码。
下面简单介绍一下解压缩过程,也就是函数实现的功能:
解压缩代码位于,是从源程序中分离出来的。包含了一些对全局数据的直接引用。
在使用时需要直接嵌入到代码中。压缩文件时总是在前字节的范围内寻找重复的字符串进行编码,
在解压时需要一个
启动流程分析内核解压缩过程内核压缩和解压缩代码都在目录,表格
启动流程分析内核解压缩过程内核压缩和解压缩代码都在目录,
编译完成后将产生、、、、这几个文件,
是内核的头部文件,负责初始设置;
将主要负责内核的解压工作,它在之后;
文件主要针对的初始化,将在链接时与合并;
是一个中间文件,其实是一个压缩的内核,只不过没有和初始化文件及解压文件链接而已;
是没有--:是压缩过的内核压缩过的内核,就是由、、、组成的。
在完成系统的引导以后并将内核调入内存之后,调用,
这个函数将跳转到的起始位置。如果没有压缩,就可以启动了。
如果压缩过,则要进行解压,在压缩过的头部有解压程序。
压缩过得入口第一个文件源码位置在。
它将调用函数,这个函数在文件中,
又调用进行设置,
然后使用在打印出信息“”后,调用。将内核放于指定的位置。
以下分析文件:
对于各种的输出设定,通过定义宏来统一操作。
设置开始和结束地址,保存。
如果在以上的中,用的是用户模式,则升到超级用户模式,然后关中断。
分析结构,判断是否需要重载内核地址存入偏移量,判断是否为零。
这里是否需要重载内核地址,我以为主要分析、
和三个文件,主要看链接文件的主要段的位置,
=,而对于、的位置只设为,=。
对于这样的结果依赖于,对内核解压的运行方式,也就是说,内核解压前是在内存中还是在上,
因为这里,我们的将压缩内核移到了的位置,我们的压缩内核是在内存从地址开始顺序排列,
因此我们的获得的偏移量是载入地址。接下来的工作是要把内核镜像的相对地址转化为内存的物理地址,即重载内核地址。
需要重载内核地址,将的偏移量加到和中。
清空堆栈空间-。
建立程序运行需要的缓存,并赋于的栈空间。
这时是缓存的结束地址,是的最后执行地址,是境象文件的开始地址。检查是否地址有冲突。
将等于,使后的地址就在的栈之后。
调用文件的函数,解压内核于缓存结束的地方地址之后。此时各寄存器值有如下变化:
为解压后的大小
为执行时的地址
为解压后的起始地址
为类型值
为系统类型值
将代码拷贝之之后+之后,首先清除缓存,而后执行。
将开始的重载于地址处。
清除内容,关闭,将中赋于,执行开始的代码。
下面简单介绍一下解压缩过程,也就是函数实现的功能:
解压缩代码位于,是从源程序中分离出来的。包含了一些对全局数据的直接引用。
在使用时需要直接嵌入到代码中。压缩文件时总是在前字节的范围内寻找重复的字符串进行编码,
在解压时需要一个