这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【转载】一张图了解嵌入式系统启动流程--from嗷呜

共16条 1/2 1 2 跳转至

【转载】一张图了解嵌入式系统启动流程--from嗷呜

工程师
2023-02-13 19:02:39     打赏

如下图所示是嵌入式系统启动流程图,图中红色的数字圆点表示启动的先后顺序。主要分为4个阶段,分别是第一阶段 bootloader,第二阶段uboot,第三阶段内核启动,第四阶段app启动。

微信图片_20230213185825.png

bootloader阶段

主要完成第一阶段系统的引导和初始化工作,包括序号1~3。系统上电后,首先是cpu开始工作,此时引导程序(通常是汇编代码)从ROM被加载到RAM 中,对cpu的寄存器初始化,启动核0,如果是核1或者其他核则处于休眠状态,等待核0在内核启动正常后通过中断或者事件将其唤醒(图中10的位置)。接下来就是完成flash和ddr初始化,为后面从flash加载bin文件,在DDR中运行程序提供基本环境,一般情况下都是从flash为0的位置,将flash中的bootloader镜像文件加载到RAM或DDR中,该引导程序最终将uboot从flash复制到DDR中,然后交接给uboot进行下一步处理。

uboot阶段

首先对dram,flash,串口进行检查,保障uboot的运行环境是ok的,同时为linux分配内存空间;接下来初始化网络配置,包括mac地址的设置、通信端口的工作模式设置,可以让用户通过网络加载程序;最后将linux从flash中复制到内存中,linux镜像文件中包含内核、文件系统和设备管理树(FDT)三个基本组件,uboot会根据设备管理树定义的信息进行检查,然后依次加载到内存中 。包括序号4~5,这个阶段最后将linux加载后,就可以交接给内核进行操作。

内核启动阶段

主要负责创建进程、绑定进程、划分内存、唤醒核1、加载文件系统等基本工作,包括序号6~13。首先会生成一个初始init0进程,后续创建的所有进程都是从该进程中产生,该进程还负责对内存和虚拟内存进行划分,然后vfork出一个主核进程,绑定到核0上,接下来由cpu主核(核0)唤醒其他的核,从init进程vfork出副核进程,并将该进程绑定到核1上,最后是基于设备管理树完成对系统中其他设备的初始化。

app启动阶段

这一阶段主要对各类app应用进行初始化,如文中以通信设备为例,此处主要完成对转发芯片的初始化,会涉及一些基础转发表项的初始配置,端口和各种通信总线的初始化。接下来会初始化中间件,中间件是作为应用程序和操作系统之间的桥梁,向下屏蔽操作系统的差异,向上为应用程序提供平台化的技术支持;最后就是各种应用程序的初始化了,包括各种特性的初始化,心跳信息,单板信息,版本信息等等。日常工作中,最容易出问题的地方其实都是在app的启动阶段,这部分才是最应该做一个详尽的图出来,后续笔者有了具体的项目案例后将会补充该图例。


转载自网络,如有侵权,联系删除。



工程师
2023-02-13 19:06:02     打赏
2楼

感谢楼主分享


工程师
2023-02-13 19:10:05     打赏
3楼

谢谢分享


工程师
2023-02-13 19:13:19     打赏
4楼

感谢楼主的分享


工程师
2023-02-13 19:21:20     打赏
5楼

感谢楼主的分享


工程师
2023-02-13 19:24:12     打赏
6楼

学习到了


工程师
2023-02-13 19:29:15     打赏
7楼

感谢楼主的分享


专家
2023-02-14 06:24:43     打赏
8楼

感谢楼主分享


院士
2023-02-14 08:17:51     打赏
9楼

谢谢楼主分享的技术分析~!


专家
2023-02-14 08:42:51     打赏
10楼

谢谢分享


共16条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]