Linux启动引导时内核在内存中地址变化

转载地址:https://blog.csdn.net/Xsos77/article/details/18324441

以下描述为linux在i386类型CPU中的启动流程

 

1、BIOS将可启动设备的第一个扇区(磁盘引导扇区,512字节)的代码(汇编语言编写的boot/bootsect.s)读入内存绝对地址0x7C00处,并跳转到0x7C00

2、于是这段代码开始执行,它把自己(这512字节代码)移到绝对地址0x90000处,并把启动设备中后2KB代码读入到内存0x90200处,而内核其它部分(system模块)则被读入到从地址0x10000开始处,因为当时system模块长度不会超过0x80000字节大小(即512KB),所以不会覆盖0x90000处开始的bootsect和setup模块

3、然后CPU运行到setup模块,setup模块将把system模块移动到内存起始处,这样system模块中代码的地址就等于实际的物理地址,便于对内核代码和数据的操作,然后进入保护模式并跳转到0x00000。

4、此时所有32位运行方式的设置启动都完成:IDT、GDT以及LDT被加载,处理器和协处理器也已确认,分页工作也设置好了,最终调用init/main.c中的main()程序。

——节选自《Linux内核完全注释》——赵烱

--------------------- 本文来自 xsos77 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/Xsos77/article/details/18324441?utm_source=copy

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值