1. 课程导论与硬件准备:为什么需要OTA?Flash分区与内核裁剪的关系
各位工程师朋友,欢迎来到这门实战课。我是你们的老朋友,一个在嵌入式Linux领域摸爬滚打了十几年的老兵。
咱们开门见山。这门课叫《内核裁剪与Flash分区配合OTA升级实战》,名字挺长,但核心就三件事:怎么把内核做小、怎么把Flash空间安排好、怎么让设备能远程升级还不翻车。
这三件事,其实是绑在一起的。你想想看,Flash空间就那么大,OTA升级又需要冗余分区,内核不裁剪根本塞不下。我在项目里见过太多人,上来就搞OTA,结果Flash不够用,回头再裁内核,分区表改来改去,最后项目延期。所以,咱们得从一开始就把这三件事想清楚。
1.1 为什么需要OTA?
OTA,Over-The-Air,说白了就是远程升级固件。你可能会问:我产品出货前都测好了,为什么还要OTA?
嗯,这里有几个真实场景:
- 修Bug:产品卖出去一万台,发现一个偶发死机问题。没有OTA,你得召回,或者派人上门刷机。成本?天文数字。
- 加功能:客户说想要一个新协议支持。有OTA,后台推送,用户点一下更新就行。
- 安全补丁:Linux内核爆出漏洞,CVE编号都出来了。你不更新?等着被黑吧。
我曾经负责过一个智能网关项目,出货后三个月发现Wi-Fi驱动在特定环境下会内存泄漏。没有OTA,那批货就得全部召回,损失几百万。还好我们提前设计了OTA通道,两周内推送了修复包,问题解决。从那以后,我接手任何项目,第一件事就是问:OTA方案定了没有?
核心观点:OTA不是可选项,而是现代嵌入式产品的必备能力。它决定了产品的生命周期和运维成本。
1.2 Flash分区与内核裁剪的关系
好,既然要OTA,那Flash分区就得重新设计。传统的分区方案很简单:一个Bootloader分区,一个内核分区,一个根文件系统分区,完事。但OTA需要双备份或者增量升级,这就意味着你得有冗余空间。
举个例子,一个典型的OTA分区布局:
| 分区名称 | 大小 | 说明 |
|---|---|---|
| Bootloader | 1MB | uboot或TF-A,基本不动 |
| Kernel A | 8MB | 当前运行的内核 |
| Kernel B | 8MB | 备用内核,OTA升级目标 |
| Rootfs A | 64MB | 当前运行的文件系统 |
| Rootfs B | 64MB | 备用文件系统 |
| Data | 剩余 | 用户数据、配置、日志 |
你看,光是内核和根文件系统就各需要两份,Flash空间直接翻倍。如果你的Flash只有128MB,那根文件系统每个分区只能分到64MB,甚至更少。这时候,内核如果不裁剪,动辄十几MB,根本塞不下。
所以,内核裁剪是OTA的前提。你裁得越狠,留给应用和数据的空间就越多。我在项目中见过一个极端案例:某物联网设备Flash只有16MB,工程师把内核从12MB裁到3.5MB,才勉强实现了双分区OTA。嗯,那段时间他天天加班,但最后做成了,很值。
经验之谈:内核裁剪不是盲目删功能,而是基于产品需求做减法。你不需要的驱动、文件系统、网络协议,统统可以去掉。后面我们会专门讲怎么系统化地裁剪。
1.3 硬件平台选型:STM32MP157 vs RK3568
这门课我们选了两个主流平台:STM32MP157 和 RK3568。为什么选它们?因为这两个芯片代表了嵌入式Linux的两个典型方向。
| 特性 | STM32MP157 | RK3568 |
|---|---|---|
| 架构 | 单核/双核 Cortex-A7 + M4 | 四核 Cortex-A55 |
| 主频 | 650MHz - 800MHz | 2.0GHz |
| 内存 | 256MB - 512MB DDR3 | 1GB - 8GB DDR4/LPDDR4 |
| Flash | NAND/NOR/SPI NOR | eMMC/NAND |
| 典型场景 | 工业控制、边缘计算、HMI | 智能音箱、NAS、AI盒子 |
| 成本 | 较低 | 中等 |
STM32MP157:意法半导体的跨界处理器,特点是低功耗、实时性好。它集成了一个Cortex-M4协处理器,可以跑裸机或RTOS,专门处理实时任务。我做过一个工业数据采集器,就用MP157的M4核处理传感器数据,A7核跑Linux做网络通信,分工明确。
RK3568:瑞芯微的通用SoC,特点是性能强、接口丰富。四核A55,主频2.0GHz,跑个轻量级桌面环境都没问题。适合做需要一定算力的产品,比如智能语音设备、边缘AI盒子。
我个人习惯是:如果产品对实时性要求高、成本敏感,选STM32MP157;如果产品需要跑复杂应用、多媒体处理,选RK3568。两个平台的内核裁剪思路大同小异,但设备树和驱动配置有差异,我们后面都会覆盖到。
1.4 开发板介绍
为了让大家能跟着动手,我建议你准备以下开发板:
- STM32MP157:推荐意法半导体的官方评估板 STM32MP157F-DK2,或者正点原子的 STM32MP157开发板。前者是官方板,资料齐全;后者性价比高,适合个人学习。
- RK3568:推荐 Firefly ROC-RK3568-PC 或 友善 NanoPi R5C。Firefly的板子接口丰富,友善的板子小巧便宜。
另外,你还需要:
- 一张16GB以上的TF卡或eMMC模块(用于烧写系统)
- 一条USB转TTL串口线(调试必备)
- 一个5V/3A的电源适配器
注意:不要买杂牌串口线,我吃过亏。某宝9.9包邮的CH340G线,波特率一高就丢数据,排查问题排查了两天,最后发现是线的问题。建议用FT232或CP2102芯片的,稳定很多。
1.5 本章知识体系总览
下面这张图,把本章的核心逻辑串起来了。你可以看到,OTA需求驱动了Flash分区设计,而Flash空间限制又倒逼内核裁剪。硬件平台则是这一切的基础。
这张图想表达的是:OTA需求 → 双分区设计 → 空间不足 → 内核裁剪(或换Flash)→ 硬件平台落地。我们这门课,走的是「内核裁剪」这条绿色路径,因为这是成本最低、最通用的方案。
1.6 本章小结
好,第一章就到这里。我们聊了:
- OTA为什么是刚需
- Flash分区与内核裁剪的因果关系
- 两个主流硬件平台的特点和选型建议
- 开发板准备清单
下一章,我们会正式开始动手:搭建开发环境,编译第一个内核。嗯,到时候你会看到,一个默认配置的内核有多大,然后我们一步步把它裁小。
准备好了吗?咱们第二章见。