深入解读Linux内存管理系列(1)——系统启动阶段的操作

本文深入探讨Linux内存管理,从系统启动阶段开始,包括压缩和解压内核镜像、内存管理、MMU和TLB的作用。讲解了PowerPC架构下的启动流程,如何处理地址转换,并在启动过程中建立TLB条目,确保内核正确运行。
摘要由CSDN通过智能技术生成
日期 内核版本 CPU架构 作者
2019.04.06 Linux-4.4 PowerPC LoneHugo

系列文章:https://blog.csdn.net/Vince_/article/details/89055979

1. 基本概念

在介绍系统启动阶段的内容之前先来了解一些基本的知识,方便我们理解相应的准备和操作的原理是什么。

主要有五点:

  • elf format
  • load address:内核镜像加载地址
  • entry point:内核启动执行的入口地址
  • bootm address:bootm指令从改地址启动,需要判断address与load address的异同,不同的话需要进行move操作,将镜像拷贝到对应的地址之后才能跳转运行
  • kernel运行地址

参考:https://blog.csdn.net/qq_21792169/article/details/50098749

2. 启动准备

2.1 压缩和解压

在编译生成内核镜像的时候会进行压缩,并提取关键信息添加内核头部。所以系统启动跳转到内核执行之前需要由u-boot(bootloader)将内核Image解压后放置到对应的内存位置,然后跳转到内核入口处执行。当然也有可能是内核进行自解压之后再跳转执行,跟体系结构有关,比如arm架构下是自解压的方式,具体压缩和解压算法可以在编译内核的时候进行配置。

相对比较简单处理方式是PowerPC,采用gzip压缩,直接由u-boot进行解压,并去掉头部信息,放置到内存特定位置之后进行跳转到内核开始执行。

2.2 内存相关

根据内核镜像头部信息可以获取到entry point和load address信息,接下来跳转到entry point进行执行,其中load address为镜像在内存中的起始地址。如果bootm指定的address与load address不同,则需要进行move操作,将去掉头部之后的Image从其指定的地方转移到load address,然后跳转到内核运行。

2.3 MMU和TLB

在普遍情况下,启动阶段内核运行在实模式,也就是直接访问物理地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值