如下图所示是嵌入式系统启动流程图,图中红色的数字圆点表示启动的先后顺序。主要分为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的启动阶段,这部分才是最应该做一个详尽的图出来,后续笔者有了具体的项目案例后将会补充该图例。
GT小顽童机器人:新加坡首款个人移动伴随智能机器人,试图改善人们的日常生活
通过工业智能网关实现Modbus仪器仪表和PLC数据通信
全方位测评PCauto深度测试宝马335Li
赛灵思重回DAC并提出关键问题:能用All Programmable为何还用ASIC?
中国人工智能安防峰会上云天励飞作为深圳代表获“五大城市代表企业奖”
一张图了解嵌入式系统启动流程
关于物联网串口WIFI模块8个小知识的介绍
高端化和差异化始终是萦绕在手机市场中的话题
基于几何单目3D目标检测的密集几何约束深度估计器
魅蓝note6发布会地点确定:魅蓝note6真机、配置、价格发布会亮点提前看,下午三点,北京演艺中心不见不散
关于1dB增益压缩点的基本测试方法分享
国行realme5Pro入网 采用后置四摄+背部指纹设计
详细剖析C++的的3种容器
【Si24R2F+ Demo板】介绍说明与使用建议
碳纤维SpeedX Leopard智能自行车体验出众
英飞凌同步整流500kHz 200W LLC评估板
助力高质量发展|软通动力参与制定《信息技术服务 数字化转型 成熟度模型与评估》国家标准
赛灵思 Versal:单芯片内的精准同步
吧5G SIM卡置入无人机到底可不可以
DRAM连涨七个季度 发改委进入调查是否触及垄断问题