第1章 嵌入式系统概述

各位同学,咱们这门课讲的是BSP移植和内核裁剪。在动手之前,我觉得有必要先把嵌入式系统这个老本行聊透。你想想看,如果连系统长什么样、由什么组成、有什么脾气都不清楚,后面做移植和裁剪就容易跑偏。

我刚开始做嵌入式那会儿,也犯过这种错——拿到一块开发板就急着改代码,结果连Flash分区都没搞明白,折腾了两周才发现是启动方式选错了。嗯,从那以后我养成了一个习惯:先花半天把系统架构理清楚,再动手。

1.1 嵌入式系统定义

嵌入式系统,说白了就是以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统。它被嵌入到某个设备或系统中,完成特定的功能。

跟咱们平时用的PC不一样。PC是通用平台,你可以今天写文档、明天打游戏、后天剪视频。嵌入式系统呢?它只干一件事——比如路由器只管转发数据包,智能手表只管监测心率,汽车ECU只管控制喷油量。

核心特征:专用性、嵌入性、可裁剪性、实时性要求。

我在项目中遇到过最典型的例子:一个工业数据采集器,CPU主频只有200MHz,RAM 64MB,Flash 128MB。就这点资源,要跑TCP/IP协议栈、Modbus通信、本地存储、LCD显示。你说PC能干这事吗?能,但成本、功耗、体积全都不对。这就是嵌入式存在的意义。

1.2 嵌入式系统组成

一个完整的嵌入式系统,由四大部分组成。我习惯把它们分成“硬件四件套”和“软件四层楼”。

硬件部分

组件 说明 常见例子
嵌入式处理器 系统的核心,负责运算和控制 ARM Cortex-A/M/R、RISC-V、MIPS、x86
存储器 存放程序代码和数据 Flash、SRAM、SDRAM、DDR、EEPROM
外设接口 与外部设备通信的通道 UART、I2C、SPI、USB、Ethernet、GPIO
电源管理 提供稳定供电,控制功耗 PMIC、LDO、DC-DC、电池管理

软件部分

  • 应用层:用户直接面对的软件功能,比如GUI界面、通信协议、控制算法。
  • 操作系统层:管理硬件资源、提供任务调度、文件系统、网络协议栈。咱们这门课的主角——Linux内核就在这一层。
  • 中间件层:介于OS和应用之间,比如数据库、图形引擎、加密库。
  • BSP/驱动层:直接跟硬件打交道,把CPU、内存、外设抽象成操作系统能理解的接口。这就是咱们BSP工程师的主战场。

我的经验:做BSP移植时,最容易被忽略的是电源管理部分。很多开发板参考设计只给了基本供电,但量产产品对功耗有硬指标。我建议在系统设计阶段就把PMIC的驱动和调试验证纳入计划,不然后面改起来很痛苦。

1.3 嵌入式系统特点

嵌入式系统跟通用系统比,有几个非常鲜明的特点。我列出来,大家对照着理解。

  1. 资源受限:CPU主频低、内存小、存储空间有限。你想想看,一个家用路由器可能只有16MB Flash、64MB RAM,却要跑完整的Linux系统。
  2. 实时性要求:很多嵌入式系统必须在规定时间内响应外部事件。比如汽车安全气囊,从碰撞到弹出必须在毫秒级完成。
  3. 功耗敏感:电池供电的设备,功耗直接决定续航。我做过一个手持设备项目,因为驱动层没做好休眠唤醒,待机电流多了5mA,结果续航从7天掉到3天——被产品经理追着骂了一周。
  4. 可靠性高:很多嵌入式系统部署后不能重启、不能蓝屏。比如医疗设备、工业控制器,一跑就是几年。
  5. 专用性强:软硬件紧密耦合,针对特定应用场景优化。同一个芯片,用在智能家居和用在工业控制上,BSP和内核配置可能完全不同。
  6. 开发环境特殊:交叉编译、JTAG调试、逻辑分析仪、示波器——这些工具是嵌入式工程师的日常。

避坑指南:我曾经在一个项目中,因为忽略了“资源受限”这个特点,把完整版Linux内核直接编译进去,结果内核镜像就占了8MB,而Flash总共才16MB。后来老老实实做内核裁剪,把不需要的驱动、文件系统、网络协议全砍掉,最终内核压缩后只有1.2MB。所以,资源受限不是口号,是每行代码都要面对的现实。

1.4 主流嵌入式操作系统对比

嵌入式操作系统种类很多,选型直接影响BSP移植和内核裁剪的策略。我整理了一个对比表,方便大家快速了解。

操作系统 内核类型 实时性 资源需求 典型应用 BSP移植难度
Linux 宏内核 软实时(RT补丁可硬实时) 较高(RAM≥32MB,Flash≥4MB) 路由器、NAS、工业平板、智能座舱 中等
RT-Thread 微内核+组件化 硬实时 低(RAM≥2KB,Flash≥4KB) IoT终端、传感器、智能家电 低
FreeRTOS 实时内核 硬实时 极低(RAM≥几百字节) MCU项目、电机控制、可穿戴 低
VxWorks 实时内核 硬实时 中等 航空航天、军工、工业控制 高
μC/OS-II/III 实时内核 硬实时 低 教学、简单控制、医疗设备 低

我个人最常用的是Linux和RT-Thread。Linux生态丰富、驱动多、社区活跃,适合功能复杂的系统。RT-Thread轻量、实时性好、组件化设计,适合资源受限的IoT设备。

选型时我一般会问自己三个问题:

  • 系统需要多强的实时性?——硬实时选RTOS,软实时Linux也能扛。
  • 硬件资源有多少?——RAM小于4MB就别硬上Linux了。
  • 团队熟悉什么?——没人会VxWorks就别硬选,出了问题没人能救。

关于BSP移植:不管选哪个OS,BSP移植的核心思路是相通的——把CPU初始化、时钟、中断、定时器、串口、GPIO这些底层硬件抽象出来,让操作系统能“认识”这块板子。咱们这门课以Linux为主线,但很多方法可以迁移到其他OS上。

本章知识体系

下面这张图把本章的核心内容串起来了。我建议你保存下来,后面学BSP移植和内核裁剪时,随时回来对照。

嵌入式系统知识体系 嵌入式系统 系统定义 系统组成 系统特点 OS对比 专用性 嵌入性 可裁剪 实时性 处理器 存储器 外设接口 电源管理 资源受限 实时性 功耗敏感 高可靠性 Linux RT-Thread FreeRTOS VxWorks 核心思路 BSP移植:将硬件抽象为OS可识别的接口 内核裁剪:按需配置,去掉冗余功能

这张图把嵌入式系统的定义、组成、特点和主流OS对比串成了一个整体。后面咱们讲BSP移植时,会反复回到“系统组成”这个分支——尤其是处理器、存储器、外设接口这三块。内核裁剪则跟“系统特点”里的资源受限、实时性、功耗敏感紧密相关。

好了,第一章就到这里。内容不多,但都是基础中的基础。把这些概念吃透了,后面咱们动手做BSP移植和内核裁剪时,你就能理解每一步到底在干什么、为什么要这么干。