一、嵌入式系统概述

各位同学,咱们这门课讲的是设备树和Bootloader,但开篇我得先带大家把地基打牢。嵌入式系统到底是什么?它由哪些部分构成?有什么特点?未来往哪走?这些搞不清楚,后面学设备树配置、Bootloader移植,你很容易掉坑里。

我做了十几年嵌入式开发,见过太多人上来就啃芯片手册、调驱动,结果连系统为什么跑不起来都找不到原因。说白了,嵌入式系统不是一个孤立的CPU,它是一个完整的、软硬件协同的工程系统。

1.1 嵌入式系统的定义

嵌入式系统,简单说就是以应用为中心,以计算机技术为基础,软硬件可裁剪,对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。

你想想看,你手机里的SoC、你车上的ECU、你家里的路由器、你手边的智能手表,这些都是嵌入式系统。它们不像你桌上的PC那样通用,而是专为某个特定任务设计的。

核心关键词:专用、可裁剪、约束严格

我习惯把嵌入式系统比作"藏在设备里的计算机"——用户感受不到它的存在,但它时刻在运行。

1.2 嵌入式系统的组成

一个完整的嵌入式系统,由硬件平台和软件系统两大部分组成。我画了一张图,帮你把整体结构看清楚。

嵌入式系统组成结构图 嵌入式系统 硬件平台 软件系统 处理器/SoC 存储器 外设接口 应用软件 操作系统 Bootloader 关键说明 • 硬件平台是骨架,软件系统是灵魂 • Bootloader 是硬件上电后第一个运行的软件 • 设备树(Device Tree)是描述硬件资源的"数据字典" • 本课程核心:Bootloader + 设备树 + 内核启动

从图上你能看到,硬件平台包括处理器/SoC、存储器、外设接口三大块。软件系统则分为应用软件、操作系统、Bootloader三个层次。这里我要特别强调:Bootloader是硬件上电后第一个运行的软件,它负责初始化硬件、加载操作系统内核。而设备树,就是描述硬件资源的"数据字典",Bootloader要把这个字典传给内核。

1.3 嵌入式系统的特点

嵌入式系统和通用PC系统有什么不同?我列个表,你一看就明白。

对比项 嵌入式系统 通用PC系统
专用性 面向特定任务,软硬件定制 通用计算,支持多种应用
资源约束 存储小、内存少、功耗低 资源充裕,可扩展
实时性 多数场景要求实时响应 非实时或软实时
可靠性 高可靠,常7×24运行 可重启,容忍故障
成本敏感 每颗芯片、每KB存储都要精打细算 成本容忍度较高
开发方式 交叉编译,宿主机-目标板 本地编译运行

我的经验:做嵌入式开发,最怕的就是"PC思维"。我见过有人把Linux内核完整编译进去,结果Flash只剩2MB,系统根本跑不起来。记住:嵌入式是"戴着镣铐跳舞",每一行代码、每一个配置都要考虑资源开销。

1.4 嵌入式系统的发展趋势

这些年嵌入式领域变化很快。我总结几个关键趋势,这些趋势直接影响了设备树和Bootloader的发展方向。

1.4.1 多核异构成为主流

现在的SoC,动不动就是Cortex-A + Cortex-M + DSP + GPU的组合。比如TI的AM62x系列,一个芯片里既有跑Linux的应用核,又有跑RTOS的实时核。这种架构下,设备树必须能描述多个CPU集群、多个内存域、多种外设——这也是为什么设备树语法越来越复杂的原因。

1.4.2 硬件平台碎片化加剧

以前一个芯片厂商就那么几款芯片,现在一年能出几十款。每个板子的外设、引脚、时钟都不一样。如果每个板子都写一套BSP,工作量太大了。设备树就是为了解决这个问题——把硬件描述从内核源码中抽离出来,变成独立的数据文件。我在项目里就靠这个,三天适配了一块新板子。

1.4.3 安全与可信启动

车规、工控、物联网设备,现在都要求安全启动。Bootloader需要校验内核签名、验签设备树、建立信任链。我记得有一次做车机项目,客户要求从ROM到OS每一级都要做哈希校验,Bootloader的代码量直接翻了一倍。

1.4.4 虚拟化与容器化

嵌入式Linux开始引入虚拟化技术,比如Xen、KVM。一个物理核上跑多个虚拟机,每个虚拟机需要独立的设备树视图。这就催生了设备树叠加(DT Overlay)技术——动态加载、卸载设备节点,而不需要重新编译整个设备树。

避坑指南:我曾经在一个项目里,因为设备树里CPU节点的reg属性写错了,导致多核启动时只有一个核在工作。排查了整整两天才发现问题。所以,设备树里的每一个数字、每一个逗号都不能错——它直接决定了硬件能不能被正确识别。

1.5 嵌入式系统的分类

根据实时性和复杂度,嵌入式系统大致可以分为三类。这个分类对我们后面选择Bootloader和配置设备树很有参考价值。

  • 小型嵌入式系统(MCU类):如STM32、ESP32,资源极有限,通常跑裸机或RTOS,不需要设备树。
  • 中型嵌入式系统(MPU类):如i.MX6ULL、AM335x,跑Linux,需要Bootloader(U-Boot)和设备树。
  • 大型嵌入式系统(SoC类):如RK3588、Jetson Orin,多核高性能,需要复杂Bootloader(ATF + U-Boot)和完整设备树。

咱们这门课,主要聚焦在中型和大型系统上。因为只有这些系统才需要设备树,才需要复杂的Bootloader移植。

1.6 本章小结

这一章,我们讲了嵌入式系统的定义、组成、特点和发展趋势。你记住几个关键点:

  • 嵌入式系统是专用、可裁剪、资源受限的计算机系统
  • 它由硬件平台和软件系统组成,Bootloader是软硬件的桥梁
  • 设备树是硬件描述语言,让内核与硬件解耦
  • 多核异构、安全启动、DT Overlay是当前的技术热点