一张图了解嵌入式系统启动流程

嵌入式技术

1372人已加入

描述

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

嵌入式系统

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的启动阶段,这部分才是最应该做一个详尽的图出来,后续笔者有了具体的项目案例后将会补充该图例。

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
雷龙发展 2023-03-07
0 回复 举报
您好,我这边是深圳市雷龙发展 Leah,看到你的文章我很喜欢,请问有用到国产主控吗?可以用我们家的北京君正X2000进行设计,期待您的答复! 感兴趣合作;请加我微信13691982107 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分