windows内核编程 谭文_内核启动过程分析

92d9d87b3a83cc191aff11c55bfee95d.png

原文:https://manybutfinite.com/post/kernel-boot-process/

翻译:RobotCode俱乐部

如果你熟悉类似C的语法,那么源代码是非常易读的,即使你错过了一些细节,你也能大致了解正在发生的事情。主要的障碍是缺少对代码的上下文环境的了解,比如它什么时候运行,为什么运行,或者机器的底层特性。这里我希望提供一些背景知识。

在Intel x86引导的故事中,此时处理器是在实模式下运行的,能够处理1 MB的内存,RAM对于现代Linux系统是这样的:

ab86bd82357d6a011caa6531752daeb1.png
引导加载程序完成后的RAM内容

内核镜像已经由BIOS中的引导加载程序中的I/O服务加载到内存中。此镜像是包含内核文件的副本,例如/boot/vmlinuz-2.6.22-14-server。镜像被分成两部分:一小部分包含实模式内核代码,加载在640K以下;内核的大部分在保护模式下运行,加载在第一个兆字节内存之后。

该操作从上面所示的实模式内核头部开始。这个内存区域用于在 引导加载程序内核 之间实现Linux引导协议。其中一些值是引导加载程序在执行其工作时读取的。比如包含内核版本的可读字符串,也包含其他重要信息,比如实模式内核块的大小。引导加载程序还将值写入该区域,例如用户在引导菜单中给出的命令行参数的内存地址。引导加载程序完成后,它已经填充了内核头部所需的所有参数。现在是跳到内核入口点的时候了。下图显示了内核初始化的程序流程,以及源目录、文件和行号:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值