ESC
输入关键词搜索文章标题和内容

机器人嵌入式Linux开发指南:RK平台核心技术全解

本文由 linuxROS 整理发布,首发于 linuxros.cn,转载请注明出处。

机器人嵌入式Linux开发指南:RK平台核心技术全解

导读:做机器人产品,芯片怎么选、系统怎么搭、实时性怎么保障、安全怎么过认证?RK3506B覆盖ARM Cortex-A35+Cortex-M3双核,Linux+RTOS混合架构,配套完整的安全和实时方案。本文基于Rockchip官方SDK文档和开源社区,整理机器人嵌入式开发的完整技术体系。


一、原理简析

1.1 RK3506B芯片架构

RK3506B是Rockchip面向机器人/工业控制推出的SoC,采用ARM Cortex-A35 + Cortex-M3双核架构:

核心 定位 操作系统 适用场景
Cortex-A35 应用处理器 Linux 视觉处理、网络通信、ROS2
Cortex-M3 实时MCU RT-Thread / FreeRTOS 电机控制、传感器采集、实时通信

这种架构是AMP(异步多处理)的典型实现:A核跑Linux做"大脑",M核跑RTOS做"小脑",各司其职。

1.2 为什么机器人需要实时系统?

机器人控制要求毫秒甚至微秒级响应:
- 工业机械臂:运动插补周期1-2ms
- 电机PID控制:采样周期0.1-1ms
- 力控响应:需要<1ms的硬实时

Linux是分时系统,调度延迟不可控。机器人需要在Linux上叠加实时方案,主流有三种:

方案 原理 实时性 复杂度 适用场景
PREEMPT_RT Linux内核补丁,把更多内核代码变成可抢占 软实时(百微秒级) 低 工业自动化、传感器采集
Xenomai 双内核,在Linux下跑一个RTOS 硬实时(十微秒级) 高 运动控制、伺服驱动
Dovetail 新一代双内核框架,替代Xenomai 硬实时 中 新项目推荐

1.3 机器人安全体系

机器人产品需要过安全认证(CE/FCC/UL等),核心是Secure Boot + TEE:

  • Secure Boot:从芯片RomBL开始,层层签名验证,确保固件不被篡改
  • TEE:可信执行环境,保护算法、密钥、证书不被窃取
  • OTP:一次性编程,烧录芯片级唯一密钥

二、核心架构图

2.1 系统软件架构

flowchart TB subgraph 应用层["应用层"] APP1[ROS2节点] APP2[AI推理] APP3[Web服务] end subgraph A核Linux["Cortex-A35 Linux"] subgraph 用户空间["用户空间"] WRT[Weston显示] WPA[wpa_supplicant] ROS2[ROS2 Core] end subgraph 内核空间["内核空间"] NET[网络协议栈] V4L2[Camera V4L2] DRM[显示DRM] end subgraph 实时层["实时增强"] PREEMPT[PREEMPT_RT] XENO[Xenomai] end end subgraph M核RTOS["Cortex-M3 RTOS"] subgraph 传感器["传感器驱动"] IMU[IMU采集] ENC[编码器] end subgraph 控制["运动控制"] PID[PID控制器] CAN[CAN总线] PWM[PWM输出] end end subgraph 安全层["安全子系统"] TEE[TEE OS] OTP[OTP存储] CRYPTO[硬件加密] end subgraph 硬件["RK3506B硬件"] NPU[6TOPS NPU] VPU[视频编解码] RGA[2D图形加速] end APP1 --> ROS2 APP2 --> NPU APP3 --> NET ROS2 --> PREEMPT NET --> V4L2 WRT --> DRM PREEMPT --> XENO XENO --> PWM CAN --> PID IMU --> PID TEE --> OTP CRYPTO --> TEE style 应用层 fill:#FFF8E1,stroke:#F57C00 style A核Linux fill:#E3F2FD,stroke:#1976D2 style M核RTOS fill:#E8F5E9,stroke:#388E3C style 安全层 fill:#FFEBEE,stroke:#D32F2F style 硬件 fill:#F3E5F5,stroke:#7B1FA2

2.2 启动流程与安全验证

flowchart TB A["上电"] --> B["RomBL<br/>芯片内固化"] B --> C{"Secure Boot<br/>启动?"} C -->|"开启"| D["Rockchip bootloader<br/>RK3588_loader"] C -->|"关闭"| E["U-Boot直接启动"] D --> F["TEE OS<br/>OP-TEE"] F --> G["ATF<br/>ARM Trusted Firmware"] G --> H["U-Boot"] H --> I["Trust<br/>安全服务"] E --> I I --> J["Linux Kernel"] J --> K["RT-Thread<br/>通过RPMsg通信"] style B fill:#FFCDD2,stroke:#D32F2F style D fill:#FFECB3,stroke:#FFA000 style F fill:#FFCDD2,stroke:#D32F2F style I fill:#C8E6C9,stroke:#388E3C style K fill:#C8E6C9,stroke:#388E3C

三、实时性能方案

3.1 PREEMPT_RT配置

PREEMPT_RT是Linux官方实时补丁,Rockchip提供适配好的内核和配置:

内核版本 RT补丁 特性
4.19.232 rt104 稳定版
5.10.160/198/209 rt89 LTS版本
6.1.75/84 rt16 新内核支持

核心配置:

# RK提供的RT配置
CONFIG_PREEMPT=y              #  Voluntary Preemption
CONFIG_PREEMPT_RT=y           #  Fully Preemptible Kernel
CONFIG_HZ_1000=y              #  1ms定时器
CONFIG_NO_HZ_FULL=y           #  空闲CPU关闭定时器
CONFIG_CPU_ISOLATION=y         #  CPU隔离

延迟优化技巧:
- 开启CONFIG_CPU_IDLE=y和CONFIG_HOTPLUG_CPU=y,让实时任务独占特定CPU
- 使用chrt -f 99设置FIFO调度
- 通过/proc/interrupts分析中断分布

3.2 Xenomai双内核方案

Xenomai通过I-pipe(中断管道)实现双内核,实时任务运行在独立内核上:

flowchart TB subgraph 硬件["硬件"] CPU["CPU Core"] end subgraph Linux["Linux内核"] LIN_INT["中断处理"] KERNEL["通用驱动"] USER["用户空间"] end subgraph Xenomai["Xenomai内核"] XENO_INT["中断管道<br/>I-pipe"] XENO_CORE["Cobalt内核<br/>实时调度"] RT_DRIVER["实时驱动"] RT_TASK["实时任务"] end LIN_INT -->|"屏蔽中断"| XENO_INT CPU --> XENO_INT XENO_INT --> XENO_CORE XENO_CORE --> RT_TASK XENO_CORE --> RT_DRIVER RT_DRIVER --> KERNEL style Xenomai fill:#E8F5E9,stroke:#388E3C

RK平台支持:
- Dovetail是Xenomai的继任者,接口兼容但维护更活跃
- RK3506B通过Dovetail对接Xenomai 3.2.4

3.3 AMP核间通信

A核Linux和M核RTOS需要通信,Rockchip使用RPMsg框架:

# Linux端查看核间通信
ls /sys/class/remoteproc/
# └── remoteproc0
#     ├── state          # 运行状态
#     ├── firmware        # 固件名称
#     └── resource_table  # 资源表

# 启动M核
echo "rproc_m3_fw.elf" > /sys/class/remoteproc/remoteproc0/firmware
echo "start" > /sys/class/remoteproc/remoteproc0/state

四、安全体系

4.1 Secure Boot流程

Secure Boot确保只有签名正确的固件才能运行:

flowchart TB A["芯片RomBL"] -->|"烧录RSA公钥"| B["OTP/eFUSE"] A -->|"验证签名"| C["Rockchip bootloader<br/>RK3588_loader"] C -->|"验证签名"| D["U-Boot"] D -->|"验证签名"| E["Trust固件"] E -->|"验证签名"| F["ATF"] F -->|"验证签名"| G["Linux内核"] G -->|"验证签名"| H["根文件系统"] style A fill:#FFCDD2,stroke:#D32F2F style B fill:#FFCDD2,stroke:#D32F2F style C fill:#FFECB3,stroke:#FFA000 style D fill:#FFECB3,stroke:#FFA000 style E fill:#C8E6C9,stroke:#388E3C style F fill:#C8E6C9,stroke:#388E3C style G fill:#BBDEFB,stroke:#1976D2

关键点:
- 根密钥烧录在OTP,不可修改
- 每级签名验证失败则停止启动
- Android AVB(Android Verified Boot)兼容

来自 linuxros.cn · linuxROS

4.2 TEE可信执行环境

TEE提供安全隔离的运行环境:

TEE实现 说明
OP-TEE ARM推荐,开源,Rockchip主推
TrustZone ARM硬件隔离技术

典型应用:
- 保护AI模型权重
- 存储设备密钥
- 数字版权管理(DRM)

4.3 硬件加密引擎

RK3506B集成硬件加密引擎:

引擎 支持算法
Crypto Core AES/SM4/DES、RAS/SM2/ECC、SHA/HMAC
HWRNG 硬件随机数生成
# Linux查看加密设备
ls /dev/crypto
# cryptodev-linux驱动

# 测试随机数
cat /dev/hwrng | od -A x -t x1 | head

4.4 OTP一次性编程

OTP用于存储芯片级唯一信息和密钥:

  • 烧录后不可修改
  • 存储Secure Boot根密钥
  • 存储芯片UUID用于防伪

五、通信接口

5.1 机器人通信概览

接口 速率 典型应用
CAN FD 8Mbps 工业机器人、电机驱动
EtherCAT 100Mbps+ 工业以太网运动控制
GMAC (Ethernet) 1Gbps 工业以太网、ROS2
USB 3.0 5Gbps 高速数据传输
UART 115200-6Mbps 调试、传感器
SPI 数十MHz Flash、传感器
I2C 400kHz-1MHz IMU、OLED、编码器

5.2 CAN FD工业总线

CAN FD是CAN的升级版,机器人控制的工业标准:

# 查看CAN设备
ip link show can0

# 配置CAN FD(1Mbps数据段 + 8Mbps)
ip link set can0 type can bitrate 1000000 dbitrate 8000000 fd on
ip link set can0 up

# 发送测试帧
cansend can0 123#01.02.03.04.05.06.07.08

# 接收帧
candump can0

5.3 EtherCAT工业以太网

Rockchip支持IgH EtherCAT主站:

# 安装IgH主站(参考RT-Thread文档)
./scripts/feeds update -a
./scripts/feeds install ethercat

# 配置从站
ethercat slaves

5.4 GMAC以太网配置

# 查看网卡
ip link show eth0

# RGMII时序调整(高速率必需)
# 修改DTS配置delayline
&gmac0 {
    clock_in_out = <1>;
    tx_delay = <0x30>;  # 调整范围0x00-0x7F
    rx_delay = <0x10>;
};

六、RT-Thread机器人RTOS

6.1 为什么机器人要用RT-Thread?

RT-Thread是国产开源RTOS,在机器人领域广泛应用:

优势 说明
国产可控 完全自主,代码自主可控
资源占用小 最小可至3KB RAM
生态完善 软件包丰富(CAN、Modbus等)
商业支持 完整的IDE和调试工具

6.2 RK平台RT-Thread支持

Rockchip官方适配了RT-Thread,支持:

外设驱动 协议栈
CAN/CANFD LWIP网络
I2C Modbus RTU
SPI MQTT客户端
UART 文件系统
// RT-Thread CAN示例
#include <rtdevice.h>

#define CAN_DEV_NAME "can0"

static void can_rx_thread(void *parameter)
{
    struct rt_can_msg rxmsg;
    rt_size_t size;

    while (1)
    {
        size = rt_device_read(can_dev, 0, &rxmsg, sizeof(rxmsg));
        if (size == sizeof(rxmsg))
        {
            rt_kprintf("CAN receive: ID=0x%03X\n", rxmsg.id);
        }
        rt_thread_mdelay(1);
    }
}

6.3 Linux与RT-Thread通信

核间通信通过RPMsg实现:

flowchart LR subgraph Linux["Linux (A核)"] RPMSG_L["RPMsg字符设备<br/>/dev/rpmsg_ctrl"] APP_L["应用程序"] end subgraph RTOS["RT-Thread (M核)"] RPMSG_R["RPMsg驱动"] APP_R["控制算法"] end RPMSG_L <-->|"共享内存"| RPMSG_R APP_L --> RPMSG_L RPMSG_R --> APP_R

七、ROS/ROS2机器人软件框架

7.1 ROS2在RK平台的部署

Rockchip提供ROS2适配指南:

# 安装ROS2(基于Debian)
apt install ros-humble-ros-base

# RK平台优化项
# 1. 使用DDS-SHM共享内存传输(降低延迟)
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export CYCLONEDDS_URI='<CycloneDDS><Domain><SharedMemory><Enable>true</Enable></SharedMemory></Domain></CycloneDDS>'

# 2. 开启实时优化
echo 1 > /proc/sys/kernel/preempt

7.2 机器人典型软件架构

flowchart TB subgraph 感知层["感知"] CAM[相机] LIDAR[激光雷达] IMU[IMU惯性测量] end subgraph 决策层["决策 (A核Linux)"] ROS2[ROS2 Core] AI[AI推理<br/>NPU] NAV[导航规划] end subgraph 控制层["控制 (M核RTOS)"] MOTOR[电机控制] PID[PID闭环] CAN[CAN总线] end CAM -->|"V4L2"| ROS2 LIDAR -->|"Ethernet"| ROS2 IMU -->|"I2C/SPI"| ROS2 ROS2 --> AI AI --> NAV NAV -->|"RPMsg"| MOTOR MOTOR --> PID PID --> CAN CAN --> MOTOR style 感知层 fill:#FFF8E1,stroke:#F57C00 style 决策层 fill:#E3F2FD,stroke:#1976D2 style 控制层 fill:#E8F5E9,stroke:#388E3C

八、AI加速(NPU)

8.1 RK NPU架构

RK3506B集成6TOPS NPU,支持主流AI框架:

框架 支持
TensorFlow ✅
PyTorch ✅
ONNX ✅
Caffe ✅
Darknet ✅

8.2 RKNN工具链

RKNN是Rockchip的模型转换和部署工具:

# 模型转换示例
from rknn.api import RKNN

rknn = RKNN()

# 加载ONNX模型
rknn.config(mean_values=[[123.675, 116.28, 103.53]],
            std_values=[[58.395, 57.12, 57.375]])
rknn.load_onnx(model='./model.onnx')

# 量化
rknn.build(do_quantization=True, dataset='./dataset.txt')

# 导出
rknn.export_rknn('./model.rknn')
// RKNN推理
#include "rknn_api.h"

rknn_context ctx;
rknn_input inputs[1];
rknn_output outputs[1];

// 初始化
rknn_init(&ctx, "model.rknn", 0, 0);

// 设置输入
inputs[0].index = 0;
inputs[0].buf = image_data;
inputs[0].size = width * height * 3;
rknn_inputs_set(ctx, 1, inputs);

// 推理
rknn_run(ctx, NULL);

// 获取输出
rknn_outputs_get(ctx, 1, outputs, NULL);

九、存储与文件系统

9.1 存储类型对比

存储 容量 速度 寿命 适用场景
eMMC 8-256GB 400MB/s 高 主存储
UFS 64GB-1TB 1.5GB/s 高 高性能
SD卡 8GB-1TB 100MB/s 中 扩展存储
SPI Flash 8-128MB 50MB/s 高 NOR启动

9.2 推荐文件系统

场景 文件系统 说明
根文件系统 squashfs + overlay 只读系统+可写层,防篡改
数据分区 ext4 标准日志文件系统
裸块设备 UBIFS NAND专用
RAM盘 tmpfs 临时文件

9.3 OTA升级

机器人产品需要支持远程升级:

方案 实现 特点
整包升级 全量镜像烧录 可靠但耗流量
A/B双分区 双系统分区切换 升级失败可回滚
差分升级 只传输差异部分 省流量但复杂

十、调试与开发工具

10.1 常用调试工具

工具 用途
GDB 源码级调试
DS-5 ARM官方IDE,图形化调试
JTAG 硬件级调试(FT232H转接板)
Serial UART串口日志
perf 性能分析
ftrace 内核函数追踪

10.2 内核调试配置

# 启用内核调试
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_INFO=y
CONFIG_KGDB=y
CONFIG_MAGIC_SYSRQ=y

# 串口调试输出
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y

10.3 性能分析

# perf采样
perf record -a -g sleep 10
perf report

# 函数耗时
perf top -a

# 延迟分析
trace-cmd record -e sched_switch -e sched_wakeup
trace-cmd report

十一、常见问题速查

11.1 实时性相关

问题 原因 解决
中断延迟大 中断堆积 开启CPU隔离,绑定中断到特定CPU
调度延迟 抢占有锁 使用RT-Mutex,减少内核锁
定时器抖动 HZ设置不当 设为1000Hz,开启NO_HZ
内存分配延迟 动态分配 启动时预分配内存池

11.2 通信相关

问题 原因 解决
CAN收发失败 终端电阻缺失 并联120Ω终端电阻
以太网丢包 RGMII时序问题 调整delayline参数
USB枚举失败 供电不足 检查VBUS电路
I2C挂死 时钟拉伸 降低I2C速率

11.3 安全相关

问题 原因 解决
Secure Boot失败 签名错误 检查RSA密钥和签名流程
TEE无法启动 ATF配置错误 检查BL31固件
OTP烧录失败 权限不足 使用Rockchip工具

十二、选型与总结

12.1 RK3506B vs RK3568 vs RK3588

参数 RK3506B RK3568 RK3588
CPU A35×4 + M3 A55×4 A76×4 + A55×4
NPU 6TOPS 6TOPS 6TOPS
实时核 内置M3 需外挂 需外挂
封装 BGA BGA BGA
适用 机器人控制 边缘计算 AI服务器

12.2 一句话总结

需求 推荐方案
简单控制 Linux + PREEMPT_RT
运动控制 Linux + Xenomai/Dovetail
双核协作 Linux (A核) + RT-Thread (M核)
安全认证 Secure Boot + TEE
AI推理 RKNN + NPU
工业通信 CAN FD / EtherCAT

12.3 开发路线图

flowchart LR A["硬件评估"] --> B["BSP移植"] B --> C["驱动开发"] C --> D["实时优化"] D --> E["安全集成"] E --> F["应用开发"] F --> G["OTA部署"] style A fill:#FFF8E1 style B fill:#FFF8E1 style C fill:#E3F2FD style D fill:#E3F2FD style E fill:#FFCDD2 style F fill:#E8F5E9 style G fill:#E8F5E9

做机器人产品,技术选型比埋头开发更重要。选对芯片、用对方案、过得了认证,才能真正出货。

版权声明

作者linuxROS
协议本作品采用 CC BY-NC-SA 4.0 许可协议:署名-非商业性使用-相同方式共享
关注欢迎关注微信公众号 linuxROS,获取更多机器人 / 嵌入式 / Linux 干货
返回首页