综合应用实战(基于 qemu_cortex_a53)

在完成 环境搭建 与 CMake、Kconfig 与 Devicetree 基础 后,开发者参考章节分别介绍了 内核、设备驱动 和 子系统 的单项接口。

本专栏承接上述基础知识,以 64 位 ARMv8-A 模拟目标板 ``qemu_cortex_a53``**(``qemu-system-aarch64``)为实验平台,通过一个分 4 步递进演进的完整工程 **``smart_node``(智能监测终端),演示如何把多个子系统与内核机制组装成工业级固件。

为什么用 qemu_cortex_a53 进行综合演练?

  1. 零硬件依赖,100% 可复现:使用本机 qemu-system-aarch64 即可验证 GICv3 中断控制器、ARM 架构定时器和 PL011 串口。

  2. 用仿真驱动打通外设与存储:qemu_cortex_a53 默认仅提供基础 CPU 与串口。我们通过编写 app.overlay 挂载官方内置的 GPIO 仿真器(``zephyr,gpio-emul``) 与 Flash 模拟器(``zephyr,sim-flash``),使应用层能够以与真实开发板完全一致的 gpio_dt_spec 和 nvs_fs API 完成外设中断与掉电存储实验。

  3. 天然支持双核 SMP:在实战四中只需将构建目标切换为 qemu_cortex_a53/qemu_cortex_a53/smp,即可验证双核对称多处理。

Smart Node 四步演进路线

阶段

核心实训内容

串联的参考章节

实战一:可观测性与交互——自定义配置、分级日志与 Shell 命令

自定义应用 Kconfig、多文件模块、分级日志(Logging)与交互式 Shell 命令(node info / node threshold)

应用构建、Kconfig 与 Devicetree、日志系统使用指南、Shell 系统使用指南

实战二:外设中断与下半部处理——GPIO 仿真、按键中断与工作队列

app.overlay 挂载虚拟 LED/按键、gpio_dt_spec 硬件中断回调、k_timer 与 k_work_delayable 下半部消抖处理

GPIO 驱动模型与中断接口、系统线程、工作队列

实战三:多任务并发架构——生产者-消费者线程、消息队列与互斥保护

多线程生产者-消费者架构:K_THREAD_DEFINE、k_msgq 传递采样包、k_mutex 保护阈值、k_sem 外部立即唤醒

选择同步对象、信号量、互斥量、消息队列

实战四:参数掉电保存与多核运行——Flash 分区、NVS 存储与双核 SMP

zephyr,sim-flash 分区定义、flash_map 与 NVS 参数掉电保存(兼容 3.7 LTS 与 4.x),以及双核 SMP 运行验证

Flash 驱动模型与公共接口、Flash Map 与分区、NVS 非易失键值存储