当前位置: 技术问答>linux和unix
关于linux启动过程中的一个疑问
来源: 互联网 发布时间:2016-01-30
本文导语: 在看linux的启动过程,不太明白: 现在有一个bootsect.s位于0x90000 一个setup.s位于0x90200 一个压缩的内核映象,存放于0x1000(64k)位置 Setup.s结束的时候,跳转到0x10000(1m,也就是head.s的startup_32位置)开始执行 我的疑问是: 1 ...
在看linux的启动过程,不太明白:
现在有一个bootsect.s位于0x90000
一个setup.s位于0x90200
一个压缩的内核映象,存放于0x1000(64k)位置
Setup.s结束的时候,跳转到0x10000(1m,也就是head.s的startup_32位置)开始执行
我的疑问是:
1 压缩的内核映是怎么出现的?在启动过程中动态编译压缩出来的,还是已经存在,直接读取的?
2 0x9c0200处存放的setup.s也不可能是源代码而是经过编译的吧,那这个编译的过程是在什么时候?
3 arch/i386/boot/compressed/"中的head.S利用misc.c中定义的decompress_kernel()函数,将内核vmlinuz解压到0x100000的 这个动作发生在什么时候?
现在有一个bootsect.s位于0x90000
一个setup.s位于0x90200
一个压缩的内核映象,存放于0x1000(64k)位置
Setup.s结束的时候,跳转到0x10000(1m,也就是head.s的startup_32位置)开始执行
我的疑问是:
1 压缩的内核映是怎么出现的?在启动过程中动态编译压缩出来的,还是已经存在,直接读取的?
2 0x9c0200处存放的setup.s也不可能是源代码而是经过编译的吧,那这个编译的过程是在什么时候?
3 arch/i386/boot/compressed/"中的head.S利用misc.c中定义的decompress_kernel()函数,将内核vmlinuz解压到0x100000的 这个动作发生在什么时候?
|
1 压缩的内核映是怎么出现的?在启动过程中动态编译压缩出来的,还是已经存在,直接读取的?
:已经存在,不可能在启动时动态编译
2 0x9c0200处存放的setup.s也不可能是源代码而是经过编译的吧,那这个编译的过程是在什么时候?
:所有的东西都是事先编译好的,你安装系统时所安装的文件即时早就编译好的映象
3 arch/i386/boot/compressed/"中的head.S利用misc.c中定义的decompress_kernel()函数,将内核vmlinuz解压到0x100000的 这个动作发生在什么时候?
:setup.s执行完后,直接跳到0x10000去执行该压缩的内核,压缩的内核由“解压缩部分”+“真正的内核”组成,解压动作就发生在“跳到0x10000”之后即进行了
:已经存在,不可能在启动时动态编译
2 0x9c0200处存放的setup.s也不可能是源代码而是经过编译的吧,那这个编译的过程是在什么时候?
:所有的东西都是事先编译好的,你安装系统时所安装的文件即时早就编译好的映象
3 arch/i386/boot/compressed/"中的head.S利用misc.c中定义的decompress_kernel()函数,将内核vmlinuz解压到0x100000的 这个动作发生在什么时候?
:setup.s执行完后,直接跳到0x10000去执行该压缩的内核,压缩的内核由“解压缩部分”+“真正的内核”组成,解压动作就发生在“跳到0x10000”之后即进行了