linux_learn/docs/04-应用层与中间件开发.md

149 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 04-应用层与中间件开发
> 资料源: TL3568-EVM\[3-用户手册](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/)\ (2-2/2-4/2-8/2-10/2-15/2-16/2-17) + `Demo\*`
---
## 一、CAN 通信开发(你的核心需求)
### 1.1 资料位置
| 内容 | 路径 |
|------|------|
| **应用开发手册中的CAN章节** | [2-2-Linux应用开发手册.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-2-Linux应用开发手册.pdf) |
| **Rockchip CAN 驱动文档** | [6-开发参考资料\Rockchip官方参考文档\Common\CAN\](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-开发参考资料/Rockchip官方参考文档/Common/CAN/) (2 PDF) |
| **CAN Demo (Linux)** | [4-软件资料\Demo\base-demos\can_echo\](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/base-demos/can_echo/) |
| **CAN Demo (AMP)** | [4-软件资料\Demo\amp-demos\can_echo\](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/amp-demos/can_echo/) |
### 1.2 API 速查
```c
// socket
int s = socket(PF_CAN, SOCK_RAW, CAN_RAW);
// 绑定到 can0
struct sockaddr_can addr = { .can_family = AF_CAN };
addr.can_ifindex = if_nametoindex("can0");
bind(s, (struct sockaddr*)&addr, sizeof(addr));
// 接收 (阻塞)
struct can_frame frame;
read(s, &frame, sizeof(frame));
// 发送
frame.can_id = 0x123; frame.can_dlc = 8;
frame.data[0] = 0xAA; // ... fill
write(s, &frame, sizeof(frame));
// 硬件过滤
struct can_filter f = { .can_id = 0x100, .can_mask = 0x700 };
setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &f, sizeof(f));
```
### 1.3 你的 CAN 协议栈与 Demo 的对接
创龙的 `can_echo` demo 提供了 **原始 SocketCAN 收发骨架**。你可以直接在此基础上替换为你设计的 XML 配置驱动协议栈:
```
can_echo 原有代码:
while(1) { recv(); send_echo(); }
改造后:
while(1) {
recv() → rx_msg 分发 → 写 signal addr
timer → tx_poll → 从 signal addr 读 → 组装 CAN 帧 → send()
mutation → tx_trigger → send()
}
```
---
## 二、EtherCAT 主站开发
### 2.1 资料位置
| 内容 | 路径 |
|------|------|
| **Acontis EtherCAT** | [2-15-1-Acontis EtherCAT主站开发案例.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-15-1-Acontis%20EtherCAT主站开发案例.pdf) |
| **IgH EtherCAT** | [2-15-2-IgH EtherCAT主站开发案例.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-15-2-IgH%20EtherCAT主站开发案例.pdf) |
| **IgH Demo** | [Demo\base-demos\igh_ethercat_dc_motor\](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/base-demos/igh_ethercat_dc_motor/) |
| **Acontis Demo** | [Demo\base-demos\EcMasterDemoDcMotor\](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/base-demos/EcMasterDemoDcMotor/) |
### 2.2 选型对比
| | IgH EtherCAT | Acontis EC-Master |
|:---|:---|:---|
| 协议栈 | 开源 GPL | 商业授权(创龙板随附试用许可) |
| 实时性 | 依赖 Preempt-RT 内核 | 专业实时层优化 |
| 学习曲线 | 陡(需读源码) | 中(文档齐全) |
| 适合 | 学习、个人项目 | 商业项目 |
**学习建议**:先用 IgH 跑通一个伺服电机,理解 EtherCAT 主站的 SII/PDO/SDO/DC (分布式时钟) 概念。IgH 的命令行工具 `ethercat` 是很好的调试入口:
```bash
ethercat slaves # 扫描从站
ethercat cstruct # 查看 PDO 映射
ethercat upload -p0 0x1000 0x00 # 读 SDO
```
---
## 三、网络与物联网TCP/UDP / MQTT
### 3.1 资料位置
| 内容 | 路径 |
|------|------|
| **TCP/UDP 基础** | [Demo\base-demos\tcp_udp\](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/base-demos/tcp_udp/) |
| **MQTT 协议** | [Demo\mqtt-demos\mqtt_client\](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/mqtt-demos/mqtt_client/) + [mqtt_sinewave_pub\](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/mqtt-demos/mqtt_sinewave_pub/) |
| **MQTT 手册** | [2-16-MQTT通信协议案例.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-16-MQTT通信协议案例.pdf) |
### 3.2 你的 CAN 协议栈 + MQTT
一个常见的工业物联网架构:
```
RK3568 CAN → 协议栈解析 → 数据转为 JSON → MQTT 发布到云端
← 云端 MQTT 下发命令 ← CAN 发送到 ECU
```
MQTT Demo 中的 `mqtt_sinewave_pub` 就是一个"定时采集数据→MQTT发布"的模板。
---
## 四、Qt 图形界面 / 多媒体
| 内容 | 路径 |
|------|------|
| **Qt 开发手册** | [2-4-Qt工程编译说明、GPU核心使用说明.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-4-Qt工程编译说明、GPU核心使用说明.pdf) |
| **Qt Demo** | [Demo\qt-demos\](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/qt-demos/) (LED控制、图片显示、多屏) |
| **视频开发** | [2-8-视频开发案例.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-8-视频开发案例.pdf) |
| **视频 Demo** | [Demo\platform-demos\](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/platform-demos/) (GStreamer、V4L2、RTSP) |
| **三屏异显** | [2-7-三屏同显、异屏方案演示.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-7-三屏同显、异屏方案演示.pdf) |
---
## 五、其他中间件
| 技术 | 资料 | 适用场景 |
|------|------|------|
| **Docker** | [2-10-Docker容器部署方法说明.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-10-Docker容器部署方法说明.pdf) + [Linux\Filesystem\docker\](../TL3568-EVM(Buildroot-2018.02)_V1.8/Linux/Filesystem/docker/) | 用容器隔离 CAN 协议栈和 Web 界面 |
| **PTP 时钟同步** | [2-17-基于PTP的时钟同步测试手册.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-17-基于PTP的时钟同步测试手册.pdf) | 多节点 CAN 数据时间戳对齐 |
| **5G 通信** | [2-6-PCIe 5G通信测试手册.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-6-PCIe%205G通信测试手册.pdf) | CAN 数据上5G |
| **SQLite** | [2-2-Linux应用开发手册.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-2-Linux应用开发手册.pdf) (SQLite章) | CAN 报文本地存储、离线分析 |
| **GDB 调试** | [2-18-GDB程序调试方法说明.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-18-GDB程序调试方法说明.pdf) | 远程 GDB Server 调试 |
---
## 六、你的 CAN 协议栈推荐集成的关键依赖
```
┌──────────────────────────────────────────┐
│ tinyxml2 (已定) → XML 配置解析 │
│ libsocketcan → SocketCAN C API │
│ libpthread → 多线程(收发分离) │
│ libsqlite3 (可选) → 本地报文记录 │
│ libmosquitto (可选) → MQTT 上报 │
└──────────────────────────────────────────┘
```