Linux的启动过程(嵌入式SoC)

目录

总流程

一、执行SoC内置ROM中的启动程序

二、执行Uboot

三、执行内核程序

四、创建init进程

最后

补充

参考


总流程

嵌入式SoC从上电到运行Linux系统,主要步骤就4个:1、执行SoC内置ROM中的启动程序;2、启动程序执行Uboot;3、Uboot加载内核程序;4、内核初始化完就创建init进程(第一个用户进程)。如下图,下面对这四个过程进行简要介绍

一、执行SoC内置ROM中的启动程序

这个SoC内置ROM中的启动程序在PC/服务器中就对应着BIOS,启动程序主要做下面3个事情

1、电源自检

SoC通电后,启动程序会先进行电源自检(POST),检查各硬件是否正常并进行初始化。例如初始化CPU等。

2、找到启动设备

启动设备就是存放Uboot和Linux内核映像的设备,例如SD卡、EMMC、NAND等,要是购买了Linux开发板就可以看到有专门的拨片开关用来选择启动设备。

3、执行Uboot

找到启动设备后,会跳转并执行Uboot。(对于PC/服务器,会用到MBR和PBR。而SoC就要看具体的硬件设计)

二、执行Uboot

Uboot是最常见的一种Bootloader(引导加载程序,也叫自举程序),用来初始化硬件和加载内核程序。uboot的执行过程分为两个阶段。这一部分的详细过程可以看文章最后的参考文章

第一阶段(汇编)

  1. 硬件初始化。设置时钟,然后关闭中断和MMU这些。
  2. 初始化内存空间(为加载第二阶段代码做准备)
  3. 把第二阶段代码拷贝到内存中,然后跳转

第二阶段(C语言)

  1. 初始化要用到的硬件(例如初始化串口给程序员与Uboot交互)
  2. 检测内存映射,确定板子上的内存长度和地址
  3. 为内核设置启动参数
  4. 把内核程序加载到内存中,然后跳转到内核来执行内核程序(在内核调用之前,中断和MMU是要一直关闭的)

三、执行内核程序

uboot启动内核后,由内核程序完成各种初始化任务,如内存管理、设备驱动程序等。初始化完成后会创建一个用户空间进程,然后该进程会创建init进程。

四、创建init进程

init是第一个用户空间进程,它的工作主要有:1、运行系统初始化脚本来启动各种系统服务,如网络服务、挂载文件系统等;2、管理系统的运行级别,例如单/多用户模式、图形界面模式等;3、运行守护进程(在后台运行的进程),例如下面的登录管理器。

登陆管理器进程:该进程处理用户的登录和注销,它会提供用户登录界面,用户登录后就启动Shell进程(命令行)或图形用户界面,进而创建用户会话。然后用户就可以使用操作系统了,这就是Linux系统开机的整个流程。

最后

补充

1、根文件系统:根文件系统会根据类型在Uboot的第二阶段或内核程序阶段挂载。

2、中断向量:在Uboot阶段设置的

参考

1、超详细分析Bootloader(Uboot)到内核的启动流程(万字长文!)_bootloader启动过程-CSDN博客

2、GPT以及网上的一些文章

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值