1. 课程导论:网关设备在工业物联网中的角色、CAN总线与设备树的关系、本课程的学习目标与前置知识
1.1 网关设备在工业物联网中的核心角色
在工业物联网(IIoT)架构中,网关设备处于感知层与网络层之间的关键枢纽位置。它负责将底层现场总线网络(如 CAN、Modbus、PROFIBUS)的数据协议转换为上层以太网/IP 网络可识别的协议(如 TCP/IP、MQTT、OPC UA)。
网关设备承担以下三大核心职能:
- 协议转换与数据桥接:将 CAN 总线上的原始帧数据解析并封装为应用层协议报文,实现异构网络间的无缝通信。
- 边缘计算与预处理:在靠近数据源的位置执行滤波、聚合、阈值判断等轻量级计算,降低云端负载与网络延迟。
- 设备管理与安全隔离:提供远程固件升级、状态监控、访问控制,并在 OT 网络与 IT 网络之间建立安全边界。
关键认知: 网关不是简单的“协议翻译器”,而是工业数据流的策略执行点。其驱动层的稳定性直接决定整个 IIoT 系统的数据质量与实时性。
1.2 CAN总线与设备树的关系
CAN(Controller Area Network)总线是工业现场最成熟的多主控串行通信协议之一。在嵌入式 Linux 系统中,CAN 驱动通常以内核模块形式存在,而设备树(Device Tree)是描述硬件拓扑与资源配置的标准机制。
设备树与 CAN 驱动的关系可归纳为以下三个层面:
| 层面 | 设备树职责 | CAN 驱动依赖 |
|---|---|---|
| 硬件拓扑描述 | 声明 CAN 控制器外设的基地址、中断号、时钟源 | 通过 platform_device 匹配获取寄存器资源 |
| 引脚与时钟配置 | 指定 CAN_TX/CAN_RX 引脚复用功能、波特率时钟分频 | pinctrl 子系统自动完成引脚配置 |
| 运行时参数 | 定义 CAN 节点属性如采样点、同步跳转宽度、终端电阻使能 | 驱动解析 device_node 中的自定义属性 |
实践要点: 设备树不是“写死”的配置表,而是驱动与硬件之间的契约。修改设备树后无需重新编译内核,只需更新 dtb 文件并重启,这为现场调试提供了极大灵活性。
1.3 本课程的学习目标
完成本课程后,学员应具备以下能力:
- 独立编写 CAN 控制器设备树节点,包括寄存器映射、中断配置、时钟与引脚复用。
- 理解 CAN 驱动核心框架,包括网络设备注册、中断处理、CAN 帧收发流程。
- 掌握设备树与驱动的调试方法,能够通过 /sys/firmware/devicetree 和内核日志定位问题。
- 完成一个真实网关项目的 CAN 驱动集成,从设备树编写到驱动加载验证的全流程。
前置知识要求: 本课程假设学员已具备以下基础:① 嵌入式 Linux 基本操作(内核编译、模块加载);② C 语言编程能力;③ 对 CAN 总线协议有基本了解(帧格式、仲裁机制)。如果对设备树完全陌生,建议先阅读《Linux 设备树入门》相关章节。
1.4 课程内容概览
本课程共分为 30 章,按以下阶段组织:
| 阶段 | 章节范围 | 核心内容 |
|---|---|---|
| 基础篇 | 第 1-8 章 | 设备树语法、CAN 控制器硬件原理、内核 CAN 框架分析 |
| 实践篇 | 第 9-20 章 | 设备树节点编写、驱动 probe 实现、中断与 DMA 配置、调试技巧 |
| 集成篇 | 第 21-28 章 | 多 CAN 通道管理、网关协议转换、实时性优化、安全机制 |
| 总结篇 | 第 29-30 章 | 项目实战复盘、常见问题 FAQ、性能基准测试 |
1.5 开发环境与工具链
本课程所有实验基于以下标准环境,建议学员提前准备:
- 硬件平台:ARM Cortex-A7/A53 开发板(如 STM32MP157、i.MX6ULL),板载至少 1 路 CAN 控制器。
- 内核版本:Linux 5.10 LTS 或更新版本,确保 CAN 子系统(SocketCAN)完整可用。
- 工具链:arm-linux-gnueabihf-gcc 交叉编译器,dtc(设备树编译器),can-utils 测试套件。
- 调试工具:逻辑分析仪或 CAN 分析仪(用于验证物理层信号),串口终端与 NFS 网络文件系统。
推荐学习方式: 每章先阅读理论部分,再动手完成设备树修改与驱动编译实验。遇到问题优先查看内核源码中的 Documentation/devicetree/bindings/net/can/ 目录,那里有官方绑定文档。