blob: fbed3259cb378a051ec24267b51dbfcd5f222cb0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
# RT-Thread Rust 组件
RT-Thread RTOS 的通用 Rust 组件,支持多架构自动检测。
## 特性
- **多架构支持**:自动检测 ARM、AArch64 和 RISC-V 目标架构
- **零配置**:无需手动配置目标平台
- **模块化设计**:核心模块与示例代码清晰分离
- **RT-Thread 集成**:完整访问 RT-Thread 内核 API
## 项目结构
```
rust/
├── README.md # 项目说明文档
├── Kconfig # 配置选项
├── SConscript # 主构建脚本
├── core/ # 核心 Rust 库
│ ├── Cargo.toml # Rust 项目配置
│ ├── SConscript # 核心库构建脚本
│ ├── rust_cmd.c # MSH 命令注册
│ └── src/ # 源代码目录
│ ├── lib.rs # 主库入口
│ ├── init.rs # 组件初始化
│ ├── allocator.rs # 内存分配器
│ ├── panic.rs # Panic 处理
│ ├── bindings/ # RT-Thread API FFI 绑定
│ ├── api/ # RT-Thread API Rust 封装
│ ├── prelude/ # 常用导入
│ ├── thread.rs # 线程操作
│ ├── mutex.rs # 互斥锁
│ ├── sem.rs # 信号量
│ ├── queue.rs # 消息队列
│ ├── time.rs # 时间函数
│ ├── fs.rs # 文件系统
│ ├── libloader.rs # 动态库加载
│ ├── param.rs # 参数传递
│ └── out.rs # 输出函数
├── rt_macros/ # Rust 宏定义库
│ ├── Cargo.toml # 宏库配置
│ └── src/ # 宏源代码
│ ├── lib.rs # 宏库入口
│ └── macros/ # 宏实现
│ ├── mod.rs # 模块定义
│ ├── main.rs # 主函数宏
│ ├── component.rs # 组件导出宏
│ ├── app.rs # 应用导出宏
│ └── cmd.rs # 命令导出宏
├── examples/ # 示例代码
│ ├── Kconfig # 示例配置
│ ├── SConscript # 示例构建脚本
│ ├── application/ # 应用示例
│ ├── component/ # 组件示例
│ └── modules/ # 动态模块示例
├── docs/ # 详细文档
└── tools/ # 构建工具
├── build_support.py # 构建支持函数
├── build_component.py # 组件构建工具
├── build_usrapp.py # 用户应用构建工具
├── feature_config_component.py # 组件特性配置
└── feature_config_examples.py # 示例特性配置
```
## 快速开始
### 前置要求
1. **安装 Rust**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
2. **添加目标平台**(根据您的架构)
```bash
# RISC-V64(软浮点)
rustup target add riscv64imac-unknown-none-elf
# ARM Cortex-M4
rustup target add thumbv7em-none-eabi
# 其他目标请根据实际工具链/ABI 添加对应的 Rust target
```
### 构建
```bash
# 在 menuconfig 中启用 Rust 组件
scons --menuconfig
# 导航至:Rust Component Support → Enable
# 构建
scons
# 清理
scons -c
```
## 支持的架构
| 架构 | 目标 | 自动检测 |
| -------------- | --------------------------------- | -------- |
| Cortex-M3 | thumbv7m-none-eabi | ✓ |
| Cortex-M4/M7 | thumbv7em-none-eabi | ✓ |
| Cortex-M4F/M7F | thumbv7em-none-eabihf | ✓ |
| ARMv7-A | armv7a-none-eabi | ✓ |
| AArch64 | aarch64-unknown-none | ✓ |
| RISC-V32 | riscv32ima[f]c-unknown-none-elf | ✓ |
| RISC-V64 | riscv64[gc/imac]-unknown-none-elf | ✓ |
构建系统会自动从 RT-Thread 配置中检测正确的目标。
## 用户测试 MSH 命令
| 命令 | 描述 |
| ------------------ | ---------------------------------- |
| `rust_param_demo` | 参数传递演示 |
| `rust_thread_demo` | 线程演示 |
| `rust_mutex_demo` | 互斥锁演示 |
| `rust_queue_demo` | 队列演示 |
| `rust_sem_demo` | 信号量演示 |
| `rust_dl_demo` | 动态模块加载演示 |
| `rust_fs_demo` | 文件与日志操作演示(需启用日志组件) |
## 配置选项
通过 `menuconfig` 配置:
- `RT_USING_RUST` - 启用/禁用 Rust 组件
- `RT_RUST_CORE` - 启用/禁用核心支持库
- `RUST_INIT_COMPONENT` - 启动时自动初始化
- `RT_USING_RUST_EXAMPLES`
- `RT_RUST_BUILD_APPLICATIONS`:启用/禁用用户程序
- `RT_RUST_BUILD_COMPONENTS`:启用/禁用组件
- `RT_RUST_BUILD_MODULES`:启用/禁用编译动态模块
- `RUST_DEBUG_BUILD` - 启用/禁用debug模式
## 技术细节
- **No-std**:嵌入式友好的 `#![no_std]` 环境
- **FFI**:无缝的 C/Rust 互操作性
- **静态链接**:生成 `.a` 库文件
- **内存安全**:Rust 的编译时保证
- **零成本**:性能与 C 相当
## 应用场景
Rust 组件特别适合以下场景:
- **安全关键代码**:利用 Rust 的内存安全保证
- **复杂算法**:利用 Rust 的高级抽象能力
- **设备驱动**:类型安全的硬件抽象
- **网络协议栈**:安全的数据包处理
- **加密库**:防止内存泄露的安全实现
## 故障排除
### 链接错误
如果遇到 "can't link double-float modules with soft-float modules" 错误:
- 构建系统应该自动检测正确的 ABI
- 检查编译器的 `-mabi` 标志是否与 Rust 目标匹配
### 目标未安装
如果提示目标未安装:
```bash
rustup target add <目标名称>
```
### 检测失败
如果无法检测目标架构:
- 检查 RT-Thread 配置是否正确
- 查看 rtconfig.py 中的编译器标志
## 许可证
Apache-2.0
## 参考资料
- [Rust 嵌入式编程手册](https://docs.rust-embedded.org/)
- [RT-Thread 文档中心](https://www.rt-thread.org/document/site/)
- [Rust FFI 编程](https://doc.rust-lang.org/nomicon/ffi.html)
- [RISC-V 规范](https://riscv.org/technical/specifications/)
|