1. 嵌入式系统概述

大家好,我是你们的讲师。在正式开始讲U-Boot移植之前,咱们得先把地基打牢。什么是嵌入式系统?这问题听起来简单,但很多新手工程师干了两年都说不透。我面试过不少人,一上来就背定义,但一问到实际场景就卡壳了。

说白了,嵌入式系统就是「专门干一件事的计算机」。你手机里的摄像头、家里的路由器、车上的ABS刹车系统,都是嵌入式系统。它们不像你的台式机那样能装各种软件、打游戏、写文档,它们只做一件事,但必须做得又快又稳。

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

1.1 嵌入式系统的组成

一个完整的嵌入式系统,我习惯把它拆成四个部分。你想想看,就像一个人,得有大脑、四肢、神经和灵魂。

组成部分 具体内容 我的经验
嵌入式处理器 ARM、RISC-V、MIPS、x86等 ARM Cortex-A系列做Linux最常用
外围硬件 存储器、I/O接口、传感器、电源 DDR布线是高频噩梦,我踩过坑
嵌入式操作系统 Linux、RT-Thread、FreeRTOS、VxWorks 带MMU的芯片才能跑Linux
应用软件 驱动程序、协议栈、业务逻辑 驱动写不好,硬件再好也白搭

这里我要特别强调一下嵌入式处理器。我刚开始做项目时,总以为选个主频高的芯片就万事大吉。结果有一次,选了个不带MMU的Cortex-M系列,硬要往上怼Linux,折腾了两周才发现根本跑不了。嗯,这就是典型的「选型翻车」。

小提示:带MMU(内存管理单元)的处理器才能运行Linux。常见的如ARM Cortex-A系列、RISC-V的SiFive U系列。Cortex-M系列只能跑RTOS,别搞混了。

1.2 嵌入式系统的特点

嵌入式系统和通用计算机有什么区别?我总结了五个核心特点,每个都是我在项目中实实在在体会过的。

  • 专用性强:一个系统只干一件事。比如路由器不会去解码视频,空调控制器不会去跑网页服务器。
  • 资源受限:内存可能只有64MB,Flash只有128MB,CPU主频可能才800MHz。你得精打细算。
  • 实时性要求:汽车刹车系统必须在几毫秒内响应,晚了就是人命关天。
  • 功耗敏感:电池供电的设备,功耗每多1W,续航就少一大截。
  • 可靠性优先:工业设备可能连续运行几年不重启,死机就是事故。

我记得有一次做智能电表项目,客户要求设备在-20°C到70°C的环境下稳定运行。实验室测试没问题,一到东北冬天就频繁死机。查了半个月,发现是DDR颗粒在低温下时序漂移。从那以后,我每次选型都会仔细看芯片的工业级温度范围。

避坑指南:我曾经因为忽略「工业级温度范围」这个参数,导致一批设备在北方冬天全部罢工。嵌入式系统的可靠性,往往就藏在那些不起眼的参数里。

1.3 嵌入式系统的应用领域

嵌入式系统无处不在。我列几个典型的领域,你看看自己身边有多少嵌入式设备。

应用领域 典型设备 常用操作系统
消费电子 智能手机、智能音箱、机顶盒 Android、Linux
工业控制 PLC、工业机器人、数控机床 RT-Thread、VxWorks
汽车电子 ECU、车载娱乐系统、ADAS QNX、Linux、AUTOSAR
医疗设备 CT机、心电监护仪、胰岛素泵 VxWorks、Linux
物联网 智能传感器、网关、智能家居 FreeRTOS、Linux
航空航天 飞行控制器、卫星通信 VxWorks 653、RTEMS

你可能会问,为什么有的设备用Linux,有的用RTOS?我举个例子你就明白了。智能音箱用Linux,因为它需要处理音频解码、网络协议、语音识别这些复杂任务。而一个温度传感器节点,只需要每隔10秒采集一次数据并上报,用FreeRTOS就够了,省电又便宜。

1.4 嵌入式系统知识体系总览

为了让你对整个课程有个全局认识,我画了一张图。这张图涵盖了嵌入式Linux系统从硬件上电到应用启动的完整链路,也是咱们这门课要讲的核心内容。

嵌入式Linux系统启动流程总览 硬件层 CPU (ARM/RISC-V) | DDR | Flash | 外设接口 BootROM (芯片内部固化启动代码) 从指定介质加载SPL/第一阶段Bootloader U-Boot SPL (第一阶段引导) 初始化DDR、时钟,加载完整U-Boot U-Boot (第二阶段引导) 初始化外设、加载设备树、启动内核 Linux内核 + 根文件系统 挂载根文件系统,启动init进程 本课程核心内容 U-Boot移植与调试

这张图展示了咱们这门课要讲的核心链路。从芯片上电那一刻开始,BootROM先运行,然后加载U-Boot SPL,SPL初始化DDR后加载完整的U-Boot,U-Boot再加载设备树和Linux内核,最后内核挂载根文件系统启动用户空间。每一步都有坑,每一步我都会结合项目经验给你讲透。

1.5 为什么选择U-Boot?

市面上Bootloader不少,为什么我偏偏选U-Boot来讲?原因有三:

  • 生态最成熟:支持ARM、RISC-V、x86、MIPS等几乎所有主流架构。你换芯片不用换工具链。
  • 社区活跃:每年都有多个版本发布,bug修复快。我遇到问题去邮件列表问,通常24小时内就有回复。
  • 可移植性强:代码结构清晰,板级配置和芯片驱动分离。移植一个新板子,改几个文件就能跑起来。

个人建议:如果你是第一次接触Bootloader,从U-Boot入手是最稳妥的选择。我见过有人用自己写的Bootloader,结果光调试串口驱动就花了两周。U-Boot把这些都做好了,你只需要关注板级适配。