第2-3章 物联网操作系统的关键技术
这章内容比较多,本质上是在回答一个核心问题:物联网操作系统为什么不同于普通嵌入式操作系统,它需要哪些关键技术来支撑物联网设备运行?
一、本章总体框架
主要讲了以下内容:
- 物联网操作系统概述 包括发展历史、定义、发展路径、发展要求和特征。
- 物联网操作系统体系结构 包括内核、外围功能组件、协同框架、智能引擎、集成开发环境、安全框架等。
- 物联网操作系统内核关键技术 包括线程管理、线程同步、线程通信、内存管理、时钟管理、中断管理。
- 外围功能组件 包括文件系统、电源管理、网络协议栈、远程升级、GUI、XML 解析等。
- 嵌入式开发相关基础 包括交叉开发环境、交叉编译、GCC 编译过程、AT 指令等。
考试重点一般在:
物联网操作系统的特点、体系结构、内核功能、线程通信、内存管理、中断机制、交叉编译、AT 指令。
二、物联网操作系统是什么?
1. 定义
物联网操作系统可以理解为:
运行在物联网设备上的操作系统,它向上承接应用,向下衔接硬件平台,并提供网络协议栈、设备管理、安全管理、功耗管理等功能。
也就是说,物联网操作系统不是单纯的“任务调度器”,它还要支持:
- 设备联网;
- 低功耗运行;
- 远程升级;
- 安全通信;
- 多设备协同;
- 软硬件裁剪;
- 适配不同硬件平台。
上一章讲过,普通嵌入式系统重点是控制设备,而物联网操作系统还要进一步支持“联网”和“协同”。
所以可以这样理解:
嵌入式操作系统解决“设备怎么运行”; 物联网操作系统进一步解决“设备怎么联网、怎么协同、怎么安全运行”。
三、物联网操作系统的发展历史
典型物联网操作系统,例如:
- TinyOS
- Contiki
- RIOT
- ARM Mbed OS
- MiCO OS
- LiteOS
- Android Things
- Zephyr
- AliOS Things
- Amazon FreeRTOS
- Azure Sphere OS
- Azure IoT Edge
- ThreadX
这些系统说明一个问题:
物联网操作系统发展非常活跃,但目前还没有一个绝对统一、占压倒优势的系统。
总结:
精彩纷呈,群雄逐鹿,并没有统一的具有压倒优势的系统出现。
这句话可以作为简答题中的背景描述。
四、物联网操作系统的三条发展路径
三条技术路径。
1. 基于 Android、iOS 等系统裁剪定制
这种方式是把原来面向手机、平板等智能终端的操作系统进行裁剪,使它适应物联网设备。
代表:
- Android Things
- Windows 10 IoT Core
适合对象:
- 计算能力较强;
- 存储空间较大;
- 功能复杂;
- 类似智能终端的物联网设备。
缺点是系统体积较大,不适合极低功耗、资源很小的传感器节点。
2. 基于传统嵌入式操作系统或 RTOS 扩展联网功能
这种方式是在传统嵌入式实时操作系统基础上,增加网络协议栈、设备联网、远程管理等功能。
代表:
- RT-Thread
- FreeRTOS
- LiteOS
- μC/OS-II
适合对象:
- MCU 设备;
- 低功耗终端;
- 传感器节点;
- 工业控制设备。
这是物联网课程中最重要的一类,因为它和单片机、嵌入式开发关系最密切。
3. 面向物联网产生的新型操作系统
这种系统从设计之初就面向物联网场景,强调低功耗、连接、安全、协同和云端接入。
这类系统更重视:
- 物联网协议;
- 云平台连接;
- 设备管理;
- 安全可信;
- 动态升级。
五、物联网设备的两大类型
物联网设备按计算资源和存储能力大体可分为两类。
1. 运算和存储能力较强的嵌入式设备
这类设备资源比较充足,可以运行较复杂的操作系统。
例如:
- 智能网关;
- 智能摄像头;
- 车载终端;
- 工业控制主机;
- 边缘计算设备。
对应操作系统可能是:
- Android Things;
- Windows 10 IoT;
- 嵌入式 Linux。
2. 对功耗、存储、计算资源限制严格的终端设备
这类设备资源很少,通常要求低功耗、小体积、低成本。
例如:
- 温湿度传感器;
- 智能水表;
- 烟雾报警器;
- 远程监测节点;
- 可穿戴设备。
对应操作系统一般是轻量级物联网操作系统,例如:
- LiteOS;
- FreeRTOS;
- RT-Thread Nano;
- Contiki;
- TinyOS。
LiteOS 内核可精简到约 10KB 左右,说明它适合资源受限设备。
六、物联网操作系统的发展要求
五个要求:
- 能力伸缩要求;
- 互连互通要求;
- 运行安全要求;
- 功耗管理要求;
- 动态升级要求。
1. 能力伸缩要求
物联网设备非常碎片化,不同设备的硬件能力差别很大。
例如:
- 有的设备只有几十 KB 内存;
- 有的设备可以运行 Linux;
- 有的只需要采集温度;
- 有的需要视频识别;
- 有的需要长期电池供电;
- 有的可以接入电源。
所以物联网操作系统必须能够根据不同场景进行裁剪和配置。
这就是所谓的:
能力伸缩。
简单来说:
需要什么功能就保留什么功能,不需要的功能就裁剪掉。
例如一个简单传感器节点可能只需要:
- 内核;
- 任务调度;
- 简单通信协议;
- 低功耗管理。
而一个智能网关可能需要:
- 文件系统;
- TCP/IP 协议栈;
- 安全组件;
- 远程升级;
- 数据库;
- GUI;
- 云平台接入。
2. 互连互通要求
物联网的核心之一是“连”。
物联网系统中存在各种不同网络:
- 传感网;
- 通信网;
- 互联网;
- 蓝牙网络;
- Wi-Fi 网络;
- ZigBee 网络;
- NB-IoT 网络。
物联网操作系统需要支持这些网络之间的连接和数据交换。
互连互通要解决的问题包括:
- 传感网之间如何互联;
- 传感网与通信网如何互联;
- 传感网与互联网如何互联;
- 不同设备和协议之间如何通信。
所以物联网操作系统要内置或支持多种通信协议栈。
3. 运行安全要求
物联网设备数量庞大,很多部署在开放环境中,容易受到攻击。
安全问题包括:
- 感知层设备被伪造;
- 数据传输被窃听;
- 设备被非法控制;
- 云平台数据泄露;
- 恶意固件升级;
- 非授权访问。
因此物联网操作系统必须支持安全机制,例如:
- 身份认证;
- 数据加密;
- 访问控制;
- 安全启动;
- 安全升级;
- 内存保护;
- 异常管理。
复习时可以记:
物联网安全涉及感知层安全、网络传输安全、应用数据安全和核心网络安全。
4. 功耗管理要求
很多物联网设备依靠电池供电,而且安装位置偏远,不方便频繁更换电池。
例如:
- 智能水表;
- 环境监测节点;
- 农业传感器;
- 物流追踪标签。
因此物联网操作系统必须具备低功耗管理能力。
低功耗可以从三个方面入手:
- 调度机制;
- 传输机制;
- 电源管理。
具体方法包括:
- 动态调整 CPU 频率;
- 空闲时进入低功耗模式;
- 关闭不用的外设;
- 降低总线频率;
- 减少无线通信次数;
- 优化任务调度。
一句话总结:
物联网操作系统不仅要让设备能运行,还要让设备尽可能省电地运行。
5. 动态升级要求
物联网终端数量多,部署位置分散,有些设备安装后很难拆卸。
例如:
- 高处的传感器;
- 地下水表;
- 野外监测设备;
- 工业现场终端。
如果软件有 bug 或功能需要更新,不能每次都人工拆下来烧录程序。
所以物联网操作系统需要支持:
- 远程升级;
- 动态升级;
- 在线配置;
- 自适应;
- 容错;
- 高健壮性。
这就是 OTA 的思想,即 Over-The-Air,空中升级。
考试可以答:
动态升级能力可以提高系统可维护性,降低现场维护成本,保证大规模物联网终端长期可靠运行。
七、物联网操作系统的五大特征
五大特征:
- 硬件驱动和操作系统内核可分离性;
- 可配置剪裁性;
- 协同互用性;
- 自动与智能化;
- 安全可信性。
1. 硬件驱动和操作系统内核可分离性
物联网硬件平台差异很大。
如果驱动和内核强绑定,每换一块硬件就要大改系统,开发成本很高。
所以物联网操作系统要尽量把硬件驱动和操作系统内核分离,使系统更容易移植。
2. 可配置剪裁性
这是最重要的特征之一。
不同设备只保留需要的功能模块。
例如:
- 小型传感器:只保留内核 + 简单协议栈;
- 智能网关:保留文件系统、网络协议、安全组件、远程管理等;
- 智能终端:可能还需要 GUI 和数据库。
3. 协同互用性
物联网不是单设备运行,而是大量设备协同工作。
所以操作系统要支持:
- 设备与设备协同;
- 设备与云平台协同;
- 设备与手机 App 协同;
- 多协议互通。
4. 自动与智能化
物联网设备数量庞大,不可能全部依赖人工管理。
所以系统要具备一定自动化能力,例如:
- 自动发现设备;
- 自动配置;
- 自动连接云平台;
- 自动告警;
- 自动诊断;
- 智能调度。
5. 安全可信性
物联网设备涉及生活、工业、交通、医疗等场景,安全问题非常重要。
所以物联网操作系统必须保证:
- 设备可信;
- 数据可信;
- 通信可信;
- 升级可信;
- 访问可信。
八、物联网操作系统与传统嵌入式操作系统的区别
表格总结如下:
| 对比项 | 物联网操作系统 | 传统嵌入式操作系统 |
|---|---|---|
| 专用性 | 较高 | 高 |
| 可配置剪裁性 | 高 | 较低 |
| 协同互用性 | 高 | 较低 |
| 驱动与内核可分离性 | 高 | 较低 |
| 自动与智能化 | 高 | 较低 |
| 安全可信性 | 高 | 较低 |
传统嵌入式系统更关注单个设备内部控制。 物联网操作系统除了控制设备,还要关注联网、协同、安全、低功耗和远程维护。
可以这样背:
传统嵌入式操作系统强调“专用控制”;物联网操作系统强调“连接、协同、裁剪、安全和智能”。
九、物联网操作系统的发展趋势
五个趋势:
- 面向新型智能化终端,提升软硬件支撑能力;
- 开源为主、闭源并存;
- 围绕操作系统和物联网平台建立生态;
- 解决物联网安全问题;
- 云端人工智能技术与物联网操作系统结合。
这里重点理解两个趋势:
1. 操作系统与云平台结合
未来物联网设备不仅是本地运行,还会连接云平台。
例如:
- 数据上传云端;
- 云端分析;
- 远程控制;
- 远程升级;
- 设备管理。
所以物联网操作系统会和物联网平台深度结合。
2. AI 与物联网结合
未来物联网不仅采集数据,还会结合 AI 进行智能分析。
例如:
- 智能摄像头识别异常行为;
- 工业设备预测性维护;
- 智能家居自动学习用户习惯;
- 可穿戴设备分析健康状态。
这就是 AIoT,即人工智能 + 物联网。
十、物联网操作系统体系结构
体系结构包括:
- 操作系统内核;
- 外围功能组件;
- 物联网协同框架;
- 通用智能引擎;
- 集成开发环境;
- 安全框架。
这些模块不是所有系统都必须完整具备,可以根据应用场景裁剪。
1. 操作系统内核
内核是最核心部分,负责:
- 线程/任务管理;
- 调度;
- 内存管理;
- 同步机制;
- 中断管理;
- 时钟管理;
- 安全与异常管理。
没有内核,系统无法管理任务和硬件资源。
2. 外围功能组件
外围功能组件包括:
- 文件系统;
- TCP/IP 协议栈;
- 无线通信协议;
- 数据库;
- GUI;
- XML 解析;
- 远程升级;
- 远程诊断;
- 远程配置。
它们不是内核本身,但为实际应用提供重要支撑。
3. 物联网协同框架
协同框架用于实现不同设备、平台、终端之间的协同。
例如:
- 设备与设备协同;
- 设备与云平台协同;
- 设备与手机协同;
- 终端与网关协同。
如果一个应用只需要简单连接,可能不需要完整协同框架。 如果需要多个设备配合工作,就需要协同框架支持。
4. 通用智能引擎
智能引擎用于支持更复杂的智能化应用。
例如:
- 数据分析;
- 智能决策;
- 模式识别;
- AI 推理;
- 自动控制。
小型传感器节点未必需要智能引擎,但边缘计算设备或智能终端可能需要。
5. 集成开发环境
集成开发环境用于支持开发者编写、编译、下载和调试程序。
后面会讲到交叉开发环境,就是开发物联网操作系统和嵌入式软件时常用的模式。
6. 安全框架
安全框架负责保证设备、数据、通信和升级的安全。
包括:
- 加密;
- 认证;
- 权限控制;
- 安全启动;
- 安全升级;
- 异常隔离。
十一、物联网操作系统内核特点
物联网操作系统内核应该具备五个特点。
1. 内核尺寸伸缩性强
不同设备资源不同,内核必须能大能小。
实现方式有两种:
重新编译
根据应用需求选择功能模块,然后重新编译内核。
适合小型系统。
二进制模块选择加载
内核初始化后,根据配置文件加载需要的二进制模块。
适合内核较大、功能模块较复杂的系统。
2. 实时性强
物联网设备很多都涉及实时控制。
例如:
- 工业控制;
- 电机控制;
- 报警系统;
- 医疗监测;
- 智能交通。
实时性主要体现在:
- 中断响应实时性;
- 线程或任务调度实时性。
也就是说,外部事件发生后,系统要能及时响应;高优先级任务要能及时执行。
3. 内核架构可扩展性强
物联网硬件变化快,新的传感器、新的通信模块、新的外设会不断出现。
所以内核要设计成框架式结构,通过接口和规范支持扩展。
例如:
- 增加新的设备驱动;
- 增加新的通信协议;
- 增加新的文件系统;
- 动态加载核心模块。
4. 安全可靠
很多物联网设备需要长期无人值守运行。
因此内核必须可靠,不能频繁死机。
同时需要支持:
- 内存保护;
- 异常管理;
- 错误隔离;
- 安全机制。
5. 节能省电
内核应根据系统状态切换运行模式。
例如:
- 正常运行模式;
- 空闲模式;
- 睡眠模式;
- 深度睡眠模式。
系统空闲时降低功耗,有任务时再唤醒执行。
十二、线程管理,也叫任务管理
线程是实现任务的载体,是物联网操作系统中最基本的调度单位。
在 RTOS 中,经常把线程叫作任务 Task。
一个复杂应用可以拆成多个任务。
例如智能家居设备可以拆成:
- 传感器采集任务;
- 网络通信任务;
- 按键扫描任务;
- 显示任务;
- 控制任务;
- 低功耗管理任务。
操作系统调度器负责决定哪个任务先运行、哪个任务后运行。
为什么需要任务管理?
因为物联网设备通常要同时处理多个事情。
例如智能手环要同时:
- 检测心率;
- 记录步数;
- 显示时间;
- 接收手机消息;
- 管理蓝牙连接;
- 控制电量消耗。
如果用裸机 while 循环写,会很混乱。 用 RTOS 之后,每个功能可以变成独立任务,结构更清晰。
十三、线程间同步
多线程系统中,不同线程经常需要协调执行。
1. 线程同步是什么?
线程同步是指:
多个线程通过某种机制控制执行顺序,保证任务之间按照正确关系执行。
常见机制包括:
- 互斥量;
- 事件对象;
- 临界区;
- 信号量。
2. 临界资源
临界资源是:
一次只能被一个线程访问的资源。
例如:
- 串口;
- I2C 总线;
- 共享变量;
- 文件;
- 显示屏;
- 网络缓冲区。
如果多个线程同时访问同一个资源,可能会出错。
3. 临界区
临界区是:
线程中访问临界资源的那段代码。
例如两个任务都要修改同一个全局变量,那么修改这个变量的代码就属于临界区。
为了避免冲突,需要加锁或使用互斥量。
4. 举例理解
假设任务 A 和任务 B 都要通过串口发送数据。
如果没有同步机制:
- A 发送一半;
- B 插进来也发送;
- 最终串口数据混乱。
如果使用互斥量:
- A 先获得串口使用权;
- B 等待;
- A 发送完释放;
- B 再发送。
这就是线程同步的作用。
十四、线程间通信
线程同步强调“执行顺序控制”,线程通信强调“信息传递”。
常见方式:
- 消息队列;
- 信号。
1. 消息队列
消息队列是一种异步通信方式。
它可以接收来自:
- 线程;
- 中断服务程序。
发送方把消息放入队列,接收方从队列中取消息。
如果队列为空,接收线程可以挂起等待。 当有新消息到达时,系统会唤醒该线程。
2. 消息队列举例
例如温度采集任务采集到数据后,把数据放入消息队列。
网络上传任务从消息队列中读取温度数据,然后上传到云端。
这样两个任务之间不需要直接调用彼此,只通过消息队列传递数据。
优点:
- 降低耦合;
- 支持异步通信;
- 适合生产者-消费者模型。
3. 信号
信号称为软中断信号,它在软件层面模拟中断机制。
一个线程收到信号,就像 CPU 收到中断请求一样,需要进行相应处理。
信号适合用于通知事件发生。
例如:
- 网络断开;
- 数据到达;
- 按键触发;
- 定时器超时。
十五、内存管理
内存管理是操作系统内核中非常重要的子系统。
PPT中提到,内存管理主要包括:
- 内存的分配和回收;
- 地址转换;
- 内存扩充;
- 内存共享与保护。
1. 为什么需要内存管理?
程序运行时,变量和中间数据存放在 RAM 中。 操作系统需要决定:
- 哪块内存分给哪个任务;
- 用完后如何回收;
- 多个任务是否可以共享;
- 如何防止任务越界访问。
2. 嵌入式内存管理的特点
三个特点:
第一,实时性要求高
实时系统中,内存分配时间最好是确定的。
如果一次内存分配有时很快、有时很慢,就会影响实时性。
第二,容易产生内存碎片
随着不断申请和释放内存,空闲内存可能被切割成很多小块。
这就是内存碎片。
即使总空闲内存很多,也可能因为没有连续大块空间而分配失败。
第三,不同资源环境使用不同算法
小型 MCU 和大型嵌入式 Linux 系统资源不同,所以内存管理算法也不同。
3. 小内存管理算法
小内存管理算法。
它的基本思想是:
- 把内存区域划分为若干内存块;
- 每个内存块带有管理信息;
- 管理信息记录该块是否被分配;
- 分配时寻找合适空闲块;
- 释放时检查相邻空闲块并合并。
这种方法适合内存资源有限的系统。
4. slab 和 memheap
其他方法:
- slab;
- memheap。
slab
slab 是 Linux 中常见的内存分配机制,适合频繁分配固定大小对象。
优点是效率较高,可以减少碎片。
memheap
memheap 是一种堆内存管理方式,用于管理动态内存分配。
考试不一定要求展开,但要知道它们属于内存管理算法或机制。
十六、时钟管理
操作系统通过时间来规范任务执行。
操作系统中最小的时间单位是时钟节拍。
时钟节拍可以理解为系统心跳。
它来自周期性中断。
例如系统每 1ms 产生一次时钟中断,那么 RTOS 就可以根据这些时钟节拍进行:
- 任务延时;
- 超时判断;
- 时间片轮转;
- 定时器处理;
- 系统时间维护。
所以时钟管理是任务调度和时间控制的基础。
十七、中断管理
中断是嵌入式系统非常重要的概念。
1. 什么是中断?
定义可以理解为:
CPU 正在执行当前程序时,外部发生紧急事件,要求 CPU 暂停当前工作,转去处理该事件。处理完后,再回到原来的位置继续执行,这个过程叫中断。
例如:
- 按键被按下;
- 串口收到数据;
- 定时器到期;
- 传感器触发报警;
- 网络模块产生事件。
这些都可以通过中断通知 CPU。
2. 中断系统的硬件组成
PPT中讲了三个部分:
- 设备;
- 中断控制器;
- CPU。
设备
设备是中断源。
例如串口、定时器、GPIO、传感器等。
当设备需要 CPU 服务时,就发出中断信号。
中断控制器
中断控制器负责收集中断源发出的中断请求,并进行管理。
它可以控制:
- 中断优先级;
- 中断类型;
- 中断打开或关闭。
在 ARM Cortex-M 中,常见中断控制器是 NVIC。
CPU
CPU 是最终响应中断的部件。
CPU 接收到中断后,暂停当前程序,跳转到对应中断服务程序执行。
3. IRQ 编号(中断源的唯一编号)
系统中每个注册的中断源都有唯一编号,叫 IRQ 编号。
IRQ 编号用于区分不同中断源。
例如:
- 定时器中断有自己的 IRQ;
- 串口中断有自己的 IRQ;
- 外部按键中断有自己的 IRQ。
4. 中断向量表
PPT中说:
中断向量表是所有中断处理程序的入口。
可以这样理解:
中断向量表是一张表,里面存放了不同中断对应的处理函数地址。
当某个中断发生时,CPU 根据中断号查表,找到对应的中断服务程序,然后跳转执行。
5. Cortex-M 中断处理过程
PPT中大意是:
- 中断触发;
- 中断控制器判断中断源;
- 将中断源转换为中断号;
- 查找中断向量表;
- 找到对应中断服务程序;
- CPU 跳转执行;
- 执行完后返回原程序。
6. 异常/中断响应步骤
PPT列出四步:
- 保护断点;
- 寻找中断入口;
- 执行中断处理程序;
- 中断返回。
可以这样记:
保存现场 → 查找入口 → 执行服务程序 → 恢复现场。
十八、外围功能组件
物联网操作系统除了内核外,还需要很多外围组件。
PPT把这些组件称为:
- 外围功能组件;
- 中间件;
- 组件与服务。
它们可以根据应用场景裁剪。
外围组件包括哪些?
PPT中列了很多:
- 远程升级;
- 文件系统;
- 外部存储;
- 远程配置;
- 远程诊断;
- 远程管理;
- 网络功能;
- 无线通信支持;
- XML 文件解析;
- GUI 图形用户界面;
- 动态加载应用程序。
这些组件不是每个物联网设备都必须有。
例如一个简单温度传感器可能不需要 GUI,也不需要数据库。 但一个智能网关可能需要文件系统、网络协议栈、远程管理和安全组件。
十九、文件系统
1. 文件系统是什么?
文件系统是一种系统软件,用来管理文件和存储设备。
它负责:
- 文件存储;
- 文件访问;
- 目录组织;
- 数据缓冲;
- 文件权限;
- 数据保护;
- 文件共享。
2. 文件系统主要功能
PPT中提到:
- 管理存储设备空间;
- 记录空闲区和占用区;
- 支持文件创建、修改、删除;
- 支持文件和目录按名访问;
- 支持分层目录结构;
- 支持数据保护;
- 支持文件共享。
3. 物联网操作系统文件系统与嵌入式文件系统的关系
由于物联网终端和网关本质上是嵌入式系统,所以物联网操作系统文件系统和嵌入式文件系统关系密切。
很多物联网操作系统直接使用或改造嵌入式 Linux 文件系统。
4. Flash 存储器
PPT专门讲了 Flash。
Flash 的特点:
- 非易失;
- 可靠性高;
- 存储密度高;
- 价格低;
- 可擦写。
Flash 的擦除和读写特点:
- 擦除以块为单位;
- 读写以页为单位。
5. Nor Flash 与 Nand Flash
| 类型 | 特点 | 适用场景 |
|---|---|---|
| Nor Flash | 容量小,可直接运行代码,访问方便,但擦写慢 | 存储程序代码 |
| Nand Flash | 容量大,改写速度快,适合大量数据存储 | U盘、存储卡、数据存储 |
考试中可以这样答:
Nor Flash 适合存储小体积代码,支持代码直接运行;Nand Flash 容量大、改写快,适合大量数据存储。
二十、电源管理
电源管理是物联网操作系统的重要功能。
PPT中提到,可以通过以下方式降低能耗:
- 调整主控时钟频率;
- 改变工作电压;
- 调整总线频率;
- 关闭不用的总线;
- 关闭外设工作时钟;
- 让 CPU 进入低功耗模式。
低功耗管理分为三类:
1. 处理器电源管理
主要方式:
- 动态调整 CPU 频率;
- 系统空闲时调整工作模式。
例如 CPU 不忙时降低频率,甚至进入睡眠模式。
2. 设备电源管理
主要方式:
- 关闭闲置外设。
例如暂时不用 Wi-Fi,就关闭 Wi-Fi 模块;不用显示屏,就关闭背光。
3. 系统平台电源管理
针对特定平台进行定制优化。
例如某些开发板有特殊电源芯片、特殊传感器、特殊总线,需要专门管理。
二十一、交叉开发环境
这部分属于嵌入式开发基础。
1. 为什么需要交叉开发?
嵌入式设备资源有限,通常不能直接在设备上写代码、编译代码。
例如一个 MCU 开发板没有屏幕、键盘,也没有完整编译器。
所以需要用 PC 作为开发主机,在 PC 上编写和编译程序,然后下载到目标板运行。
2. 主机-目标机模式
交叉开发环境由两部分组成:
| 名称 | 含义 |
|---|---|
| 主机 | 开发用 PC |
| 目标机 | 嵌入式开发板或实际设备 |
开发流程是:
- 在主机上编辑代码;
- 使用交叉编译工具链编译;
- 生成目标机可执行代码;
- 下载到目标机;
- 在目标机上运行和调试。
3. 什么是交叉编译?
交叉编译是:
在一个平台上生成另一个平台可以执行的代码。
例如:
在 Windows 或 Linux PC 上编译生成 ARM 开发板可以运行的程序。
这就是交叉编译。
4. 交叉编译环境组成
PPT中提到,交叉编译环境由以下工具组成:
- 编译器;
- 连接器;
- 解释器。
更广义地说,交叉工具链还包括:
- 预处理器;
- 编译器;
- 汇编器;
- 链接器;
- 调试器;
- 库文件。
二十二、GCC 编译过程
PPT中讲了 GCC。
GCC 是 GNU Compiler Collection,是 Linux 平台常用编译工具。
GCC 编译一个 C 程序通常经历四个步骤:
- 预处理;
- 编译;
- 汇编;
- 链接。
1. 预处理
预处理主要处理:
- 头文件包含;
- 宏定义;
- 条件编译;
- 注释删除。
输入:
file.c输出:
file.i2. 编译
编译阶段检查代码语法,并把 C 代码翻译成汇编代码。
输入:
file.i输出:
file.s3. 汇编
汇编阶段把汇编代码转换成机器相关的目标文件。
输入:
file.s输出:
file.o4. 链接
链接阶段把目标文件和库文件连接起来,生成可执行文件。
输入:
file.o输出:
hello5. 静态库和动态库
PPT中讲了两种库。
静态库
特点:
- 编译链接时把库代码全部加入可执行文件;
- 可执行文件较大;
- 运行时不再需要库文件;
- 后缀一般是
.a。
动态库
特点:
- 编译链接时不把库代码全部加入可执行文件;
- 程序运行时再加载库;
- 可执行文件较小;
- 可以节省系统开销。
二十三、AT 组件
AT 指令在物联网通信模块中非常常见。
例如:
- ESP8266 Wi-Fi 模块;
- 4G 模块;
- NB-IoT 模块;
- 蓝牙模块。
1. AT 指令是什么?
AT Commands 是 AT 服务器和 AT 客户端之间进行设备连接与数据通信的命令集。
通信方式可以是:
- UART;
- SPI 等。
通常 MCU 作为 AT Client,通信模块作为 AT Server。
2. AT Client 和 AT Server
AT Client
负责:
- 发送命令;
- 等待响应;
- 解析响应数据;
- 获取模块状态。
AT Server
负责:
- 接收命令;
- 判断命令格式;
- 执行对应操作;
- 返回响应数据;
- 必要时主动上报数据。
3. AT 指令组成
AT 指令一般由三部分组成:
- 前缀;
- 主体;
- 结束符。
格式类似:
AT+命令=参数\r\n
其中:
- 前缀一般是
AT; - 主体包括命令、参数和数据;
- 结束符通常是
<CR><LF>,也就是\r\n。
4. AT Server 发给 AT Client 的数据
PPT中分成两类:
响应数据
这是 AT Client 发送命令后,AT Server 返回的数据。
例如:
OK
ERROR
URC 数据
URC 是 AT Server 主动发送的数据。
例如:
- Wi-Fi 断开;
- TCP 收到数据;
- 网络状态变化;
- 模块异常。
URC 不一定是因为 Client 刚刚发了命令,而是模块主动通知。
5. ESP8266 基础 AT 指令
PPT列举了几个基础指令:
AT
功能:
测试 AT 指令功能是否正常。
AT+GMR
功能:
查询模组固件版本信息。
AT+RST
功能:
软复位模组。
这些指令很基础,但考试可能会考“AT 指令的组成”或者“AT 数据分为哪两种”。
二十四、本章重点背诵版
下面是适合考前背诵的内容。
1. 物联网操作系统定义
物联网操作系统是运行在物联网设备上的操作系统,向上承接应用,向下衔接硬件平台,并提供网络协议栈、设备管理、安全管理、功耗管理、远程升级和多设备协同等功能。
2. 物联网操作系统的发展要求
物联网操作系统的发展要求包括:
- 能力伸缩要求;
- 互连互通要求;
- 运行安全要求;
- 功耗管理要求;
- 动态升级要求。
3. 物联网操作系统的五大特征
物联网操作系统的五大特征是:
- 硬件驱动和操作系统内核可分离性;
- 可配置剪裁性;
- 协同互用性;
- 自动与智能化;
- 安全可信性。
4. 物联网操作系统体系结构
物联网操作系统由以下几个子系统组成:
- 操作系统内核;
- 外围功能组件;
- 物联网协同框架;
- 通用智能引擎;
- 集成开发环境;
- 安全框架。
其中内核是核心,外围组件和协同框架根据应用需求进行裁剪。
5. 物联网操作系统内核功能
内核主要功能包括:
- 线程/任务管理;
- 线程同步;
- 线程通信;
- 内存管理;
- 时钟管理;
- 中断管理;
- 安全与异常管理;
- 电源管理相关支持。
6. 线程同步
线程同步是多个线程通过互斥量、事件对象、临界区等机制控制执行顺序,防止多个线程同时访问临界资源。
关键词:
- 临界资源:一次只能被一个线程访问的资源;
- 临界区:访问临界资源的代码段。
7. 线程通信
常见线程间通信方式包括:
- 消息队列;
- 信号。
消息队列是一种异步通信方式,可以缓存消息;信号类似软件层面的中断机制,用于通知事件发生。
8. 内存管理
内存管理主要包括:
- 内存分配和回收;
- 地址转换;
- 内存扩充;
- 内存共享与保护。
特点:
- 实时系统要求内存分配时间确定;
- 动态分配容易产生内存碎片;
- 不同资源环境采用不同内存分配算法。
常见方法:
- 小内存管理算法;
- slab;
- memheap。
9. 中断处理过程
中断处理一般包括:
- 保护断点;
- 寻找中断入口;
- 执行中断处理程序;
- 中断返回。
也可以背成:
保存现场 → 查找入口 → 执行服务程序 → 恢复现场。
10. 交叉编译
交叉编译是在一个平台上生成另一个平台可执行代码的过程。
嵌入式开发通常采用主机-目标机模式:
- 主机:PC,用于编辑、编译、调试;
- 目标机:嵌入式开发板,用于运行程序。
11. GCC 编译四步骤
GCC 编译过程包括:
- 预处理;
- 编译;
- 汇编;
- 链接。
对应文件变化:
file.c → file.i → file.s → file.o → 可执行文件
12. AT 指令
AT 指令由三部分组成:
- 前缀 AT;
- 主体,即命令、参数和数据;
- 结束符,一般为
\r\n。
AT Server 向 AT Client 发送的数据包括:
- 响应数据;
- URC 主动上报数据。
二十五、考试可能这样问
题目1:物联网操作系统的特点是什么?
答:
物联网操作系统的特点包括硬件驱动和操作系统内核可分离、可配置剪裁、协同互用、自动与智能化、安全可信。由于物联网设备具有碎片化、异构化和资源受限等特点,物联网操作系统必须能够根据不同硬件和应用场景进行裁剪配置,并支持设备联网、低功耗、安全运行和远程维护。
题目2:物联网操作系统有哪些发展趋势?
答:
物联网操作系统的发展趋势包括:面向新型智能化终端提升软硬件支撑能力;开源为主、闭源并存;围绕操作系统和物联网平台建立生态;加强物联网安全解决方案;云端人工智能技术与物联网操作系统结合。
题目3:简述物联网操作系统体系结构。
答:
物联网操作系统通常由操作系统内核、外围功能组件、物联网协同框架、通用智能引擎、集成开发环境和安全框架组成。其中内核负责任务管理、内存管理、同步通信、时钟和中断管理;外围功能组件提供文件系统、网络协议栈、远程升级等功能;协同框架支持设备、平台和终端之间互联互通;安全框架保障系统安全可信。
题目4:物联网操作系统内核具有哪些功能?
答:
物联网操作系统内核主要具有线程或任务管理、线程同步、线程间通信、内存管理、时钟管理、中断管理、安全与异常管理等功能。同时,物联网操作系统内核还需要具备尺寸可伸缩、实时性强、架构可扩展、安全可靠和节能省电等特点。
题目5:线程间通信一般采用哪些方式?
答:
线程间通信常见方式有消息队列和信号。消息队列可以接收线程或中断服务程序发送的消息,并将消息缓存在队列中,接收线程可以异步读取;信号是在软件层面对中断机制的模拟,用于通知线程某个事件已经发生。
题目6:内存管理一般有哪些算法或机制?
答:
内存管理常见算法或机制包括小内存管理算法、slab 分配机制和 memheap 管理算法。小内存管理算法适合资源受限环境,通过内存块管理实现分配和释放;slab 常用于 Linux 系统,适合固定大小对象的高效分配;memheap 用于堆内存动态管理。
二十六、本章一句话总结
这章可以用一句话概括:
物联网操作系统是在嵌入式操作系统基础上,面向物联网设备的连接、协同、安全、低功耗、动态升级和智能化需求发展起来的系统软件,其核心由内核、外围组件、协同框架、智能引擎、开发环境和安全框架组成。