[STM32MP1]

Linux内核移植之内核启动过程

[复制链接]
1167|7
手机看帖
扫描二维码
随时随地手机跟帖
tpgf|  楼主 | 2021-9-8 07:49 | 显示全部楼层 |阅读模式
与移植U-Boot的过程相似,在移植Linux之前,先了解它的启动过程。Linux的启动过程可以分为两部分:架构/开发板相关的引导过程、后续的通用启动过程。如图16.7所示是ARM架构处理器上Linux内核vmlinux的启动过程。之所以强调是vmlinux,是因为其他格式的内核在进行与vmlinux相同的流程之前会有一些独特的操作。比如对于压缩格式的内核zlmage,它首先进行自解压得到vmlinux,然后执行vmlinux开始“正常的”启动流程。

        引导阶段通常使用汇编语言编写,它首先检查内核是否支持当前架构的处理器,然后检查是否支持当前开发板。通过检查后,就为调用下一阶段的start kernel函数作准备了。这主要分如下两个步骤。

(1)连接内核时使用的虚拟地址,所以要设置页表、使能MMU。

(2)调用C函数start_kernel之前的常规工作,包括复制数据段、清除BSS段、调用start_kernel函数。

        第二阶段的关键代码主要使用C语言编写。它进行内核初始化的全部工作,最后调用rest init 函数启动init 过程,创建系统第一个进程:init进程。在第二阶段,仍有部分架构/开发板相关的代码,比如图16.7中的setup_arch函数用于进行架构/开发板相关的设置(比如重新设置页表、设置系统时钟、初始化串口等)。


247386137fa7ff2757.png

使用特权

评论回复
tfqi| | 2021-10-5 11:34 | 显示全部楼层
都有几种启动方式啊

使用特权

评论回复
wiba| | 2021-10-5 11:38 | 显示全部楼层
启动过程并不复杂啊

使用特权

评论回复
zljiu| | 2021-10-5 11:44 | 显示全部楼层
必须要严格按照这个流程吗

使用特权

评论回复
coshi| | 2021-10-5 11:50 | 显示全部楼层
请问MMU是什么啊

使用特权

评论回复
aoyi| | 2021-10-5 12:15 | 显示全部楼层
如何确定虚拟地址呢

使用特权

评论回复
chenjun89| | 2021-10-5 14:47 | 显示全部楼层
3版本以上的Linux内核变化很大

使用特权

评论回复
caigang13| | 2021-10-5 14:57 | 显示全部楼层
ST的MPU跑Linux系统咋样了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1271

主题

13688

帖子

8

粉丝