裸机启动流程“裸机”指直接运行在硬件上的程序无操作系统通常是MCU/单片机启动流程极简硬件复位上电/复位后CPU强制从固定启动地址如0x00000000读取指令该地址通常映射到片内Flash或ROM。0x0000000此处存储的是向量表的起始地址向量表的第 1 项是栈顶地址第 2 项是复位中断服务程序Reset_Handler的入口地址。。初始化与执行启动地址的程序直接包含硬件初始化逻辑设置堆栈指针SP、配置时钟如晶振→PLL、初始化GPIO/UART等外设。这些代码通常位于启动文件如 STM32 的startup.s或初始化函数如SystemInit()。无中间层无BootLoader/OS初始化后直接运行应用逻辑如传感器采集、电机控制。特点程序必须包含所有硬件驱动和逻辑适用于简单场景如单片机控制LED、温湿度采集。STM32启动流程以Cortex-M内核为例STM32是基于ARM Cortex-M系列内核的嵌入式微控制器其启动流程由硬件复位逻辑和启动模式共同决定核心是从指定存储介质加载程序并跳转执行硬件复位阶段芯片上电或复位引脚触发后硬件自动执行复位序列关闭中断、初始化部分核心寄存器如PC指针、SP指针。复位后PC程序计数器强制指向启动地址0x00000000SP栈指针从启动地址4的位置读取即向量表第0项为栈顶地址第1项为复位中断服务程序入口。启动模式选择STM32通过BOOT0、BOOT1引脚电平决定启动介质如Flash、SRAM、系统存储器若从Flash启动最常用程序存储在片内Flash启动地址映射到Flash基地址0x08000000向量表默认位于此处。若从系统存储器启动ISP模式执行芯片出厂固化的BootLoader用于通过UART/SPI等更新程序。向量表与中断服务程序启动地址处是向量表中断服务程序入口地址的数组第1项为复位中断服务程序Reset_Handler。硬件自动跳转到Reset_Handler执行初始化系统时钟如PLL、配置外设、初始化堆栈最终调用main()函数。进入应用程序Reset_Handler执行完毕后跳转到用户编写的main()函数开始运行应用逻辑。Linux嵌入式设备启动流程嵌入式Linux设备如ARM开发板的启动依赖“硬件初始化→BootLoader→内核→根文件系统”的链式加载核心是从存储介质加载并启动操作系统BootROM阶段固化初始程序上电后CPU从固化的BootROM只读存储器开始执行如ARM的iROM、MIPS的BootROM。功能初始化最小硬件如时钟、SPI/NAND控制器检测启动介质eMMC、SD卡、NAND Flash加载BootLoader到片内RAM。BootLoader阶段如U-BootBootLoader是用户可定制的引导程序分两个阶段阶段1汇编实现初始化关键硬件DDR内存、串口将自身剩余部分加载到DDR。阶段2C实现解析启动参数如从环境变量读取内核地址加载Linux内核和设备树Device Tree到DDR指定地址。最终通过bootm或bootz命令跳转到内核入口如0x80008000。Linux内核启动内核启动解压自身若内核是压缩的初始化核心组件进程管理、内存管理、中断系统解析设备树识别硬件挂载根文件系统通过root参数指定如/dev/mmcblk0p2。启动init进程PID1如systemd、busybox init作为用户空间第一个进程。用户空间启动init进程加载配置文件如/etc/inittab启动服务如网络、驱动最终进入命令行或应用程序。Windows设备启动流程启动自检阶段设备通电后首先会读取BIOS基本输入/输出系统或UEFI统一可扩展固件接口对内存、CPU、硬盘、键盘等设备进行自检。此阶段屏幕上会显示自检相关的打印信息若检测到硬件故障可能会报警或显示错误提示。初始化启动阶段BIOS或UEFI会根据预设的启动顺序查找可启动的优先设备如本地磁盘、CD - Driver、USB设备等并准备从该设备启动系统。此时屏幕一般为黑屏状态。Boot加载阶段若从硬盘启动会从启动分区如C盘加载NtldrWindows Vista之前的系统或bootmgr.exeWindows Vista及之后的系统。Ntldr会设置内存模式若是x86处理器且操作系统为32位则设置为32 - bit flat memory mode若为64位操作系统64位处理器则设置为64位内存模式。然后启动文件系统读取boot.ini文件用于确定启动选项。如果按F8或存在多系统时会显示启动选项菜单否则屏幕仍为黑屏。检测和配置硬件阶段系统开始检查和配置一些硬件设备包括系统固件如时间和日期、总线和适配器、显示适配器、键盘、通讯端口、磁盘、软盘、输入设备如鼠标、并口以及在ISA总线上运行的设备等。此过程屏幕依旧是黑屏。内核加载阶段Ntldr或bootmgr.exe将首先加载Windows内核Ntoskrnl.exe和硬件抽象层HAL。接着从注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet下读取这台机器安装的驱动程序并依次加载。驱动程序加载完成后系统会创建系统环境变量启动win32.sysWindows子系统的内核模式部分、csrss.exeWindows子系统的用户模式部分和winlogon.exe创建虚拟内存页面文件还可能对一些必要的文件进行改名主要是驱动文件。此时屏幕会显示Windows logo界面和进度条。登录阶段系统会启动机器上安装的所有需要自动启动的Windows服务启动本地安全认证Lsass.exe然后显示登录界面等待用户输入用户名和密码进行登录登录成功后系统启动完成用户可开始使用计算机。总结复杂系统Linux电脑/嵌入式依赖“固件→BootLoader→内核→用户空间”的链式加载核心是分层初始化硬件并加载更大的程序。简单系统STM32裸机、无BootLoader直接从固定地址执行程序需包含所有硬件初始化逻辑。BootLoader的作用是“桥接硬件与目标程序”解决“目标程序太大无法直接从ROM执行”或“需要灵活加载不同程序”的问题。附录MCU启动过程全解析–从上电复位到进入main函数
企业数字化 ERP 产品动态
相关推荐
计算机毕业设计之基于Spring Boot 企业crm系统的设计与实现 随着网络科技的不断发展以及人们经济水平的逐步提高,网络技术如今已成为人们生活中不可缺少的一部分,而信息管理系统是通过计算机技术,针对用户需求开发与设计,该技术尤其在各行业领域发挥了巨大的作用,相比于以前的传… · 2026/9/24 14:08:11
【Dv3admin】下拉API接口传多个值到form 表单操作中常见需求之一是在下拉选择时同步传递和处理多个字段,提升数据验证和业务逻辑的便捷性。实际开发环境下,数据交互常涉及到多项信息同步写入,直接影响业务流程的顺畅与正确。
本文介绍一种在下拉选择学生信息时,如何一次性将学号和姓名等多个参数同时写入表单,实… · 2026/9/24 14:08:11
Design Compiler:分频器生成时钟的创建方法 相关阅读
Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 目录 直接显式例化 通过RTL表示 方法一 方法二 在Design Compiler中,由于分频时钟无法从时钟分频器的输出自动推断,需要使用create_ge… · 2026/9/24 14:08:11
LLaMA 有哪些实际应用? 👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:AI大模型原理和应用面试题 文章目录 一、🍀回答重点 二、🍀扩展知识 三、🍀具体应用 3.1 ☘️企业级应用 3.2 ☘️教育科研应用 3.3 ☘️内容创作与… · 2026/9/24 14:48:31
Zonotope几何建模:虚拟电厂分布式资源不确定性聚合方法 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 14:48:25
深入理解 TypeScript 的 unknown 类型:any 的类型安全替代方案 文档教程 【免费下载链接】typescript-book The Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source. 项目地址: https://gitcode.com/gh_mirrors/typ/typescript-book 点击查看 免费下载 unknown 是 TypeSc… · 2026/9/24 14:48:25
【读卡器SD插入到电脑未自动挂载】 问题描述:插入读卡器SD到电脑,虚拟机未自动挂载且显示图标。
解决思路:用dmesg | tail -20,和查看ls /dev/ 是否有sda*/sdb*。失败原因是是因为没卸载就硬拔未卸载就硬拔,导致拔卡后的 I/O 错误。内核认到了࿰… · 2026/9/24 14:48:24
C语言动态内存管理详解:从malloc到柔性数组 1. 引言在C语言的学习过程中,内存管理始终是一个绕不开的核心话题。很多初学者在编写程序时,往往只关注逻辑是否正确,却忽略了内存的分配与释放。实际上,动态内存管理是C语言中极为重要的一环,它直接关系到程序的稳定性… · 2026/9/24 14:48:01
低空空域智能管控怎么做?物理AI+数字孪生完整技术架构解析 低空空域智能管控的最优物理AI方案,不应只是“无人机监控大屏”,而应该是一套能够完成空域数字化、实时感知、航线规划、仿真推演、风险预测、智能调度和应急处置的闭环系统。按照城市级数字孪生能力、空域数据融合、飞行器实时感知、仿真预测、多机协同… · 2026/9/24 14:47:47
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44