|
| 1 | +# RT-Thread Rust组件目录结构建议 |
| 2 | + |
| 3 | +## 一、目录结构 |
| 4 | + |
| 5 | + `rust/` 为以下结构: |
| 6 | + |
| 7 | +``` |
| 8 | +rust/ |
| 9 | +├── Kconfig # 组件配置 |
| 10 | +├── SConscript # 构建脚本 |
| 11 | +├── README.md # 组件说明 |
| 12 | +├── docs/ # 文档 |
| 13 | +│ ├── api_reference.md |
| 14 | +│ ├── abi_compatibility.md |
| 15 | +│ └── performance_report.md |
| 16 | +├── core/ # 核心支持库 |
| 17 | +│ ├── Cargo.toml |
| 18 | +│ ├── src/ |
| 19 | +│ │ ├── lib.rs |
| 20 | +│ │ ├── bindings/ # C接口绑定 |
| 21 | +│ │ │ ├── kernel.rs # 内核API |
| 22 | +│ │ │ ├── thread.rs # 线程API |
| 23 | +│ │ │ ├── ipc.rs # IPC机制 |
| 24 | +│ │ │ ├── memory.rs # 内存管理 |
| 25 | +│ │ │ └── device.rs # 设备API |
| 26 | +│ │ ├── rt_prelude.rs # 预导入模块 |
| 27 | +│ │ ├── allocator.rs # 内存分配器 |
| 28 | +│ │ ├── panic.rs # panic处理 |
| 29 | +│ │ └── macros/ # 宏支持 |
| 30 | +│ │ ├── thread_entry.rs # 线程入口宏 |
| 31 | +│ │ └── msh_export.rs # Shell命令导出宏 |
| 32 | +├── runtime/ # 运行时支持 |
| 33 | +│ ├── Cargo.toml |
| 34 | +│ ├── src/ |
| 35 | +│ │ ├── no_std_support.rs # no_std模式 |
| 36 | +│ │ ├── start.rs # 启动代码 |
| 37 | +│ │ └── lang_items.rs # 语言项 |
| 38 | +│ └── linker/ |
| 39 | +│ └── rust_module.ld # 链接脚本 |
| 40 | +├── shell/ # Shell命令支持 |
| 41 | +│ ├── Cargo.toml |
| 42 | +│ └── src/ |
| 43 | +│ └── commands.rs |
| 44 | +├── examples/ # 示例代码 |
| 45 | +│ ├── README.md |
| 46 | +│ ├── applications/ # 应用示例 |
| 47 | +│ │ ├── hello_world/ |
| 48 | +│ │ ├── thread_sync/ |
| 49 | +│ │ └── device_io/ |
| 50 | +│ ├── components/ # 组件示例 |
| 51 | +│ │ ├── logger/ |
| 52 | +│ │ ├── sensor_driver/ |
| 53 | +│ │ └── protocol_stack/ |
| 54 | +│ └── modules/ # 内核模块示例 |
| 55 | +│ ├── simple_module/ |
| 56 | +│ └── device_module/ |
| 57 | +├── tools/ # 工具脚本 |
| 58 | +│ ├── build_rust.py |
| 59 | +│ ├── gen_bindings.sh |
| 60 | +│ └── cargo_wrapper.py |
| 61 | +└── tests/ # 测试 |
| 62 | + ├── integration/ |
| 63 | + └── unit/ |
| 64 | +``` |
| 65 | + |
| 66 | +## 二、各部分功能说明 |
| 67 | + |
| 68 | +### 2.1 核心支持库 (core/) |
| 69 | + |
| 70 | +**提供Rust本身的基础支持和RT-Thread系统服务绑定:** |
| 71 | + |
| 72 | +1. **bindings/** - C接口的安全封装 |
| 73 | + - 按功能模块划分(kernel、thread、ipc、memory、device) |
| 74 | + - 使用bindgen自动生成或手工编写 |
| 75 | + - 提供类型安全的Rust接口 |
| 76 | + |
| 77 | +2. **rt_prelude.rs** - 预导入模块 |
| 78 | + - 类似std::prelude,导入常用类型和trait |
| 79 | + - 简化Rust代码编写 |
| 80 | + |
| 81 | +3. **allocator.rs** - 全局内存分配器 |
| 82 | + - 实现`GlobalAlloc` trait |
| 83 | + - 对接RT-Thread的内存管理系统 |
| 84 | + |
| 85 | +4. **macros/** - 宏定义 |
| 86 | + - `rt_thread_main!` - 程序入口宏,标记Rust的main函数 |
| 87 | + - `rt_component_export!` - 导出组件初始化入口的宏 |
| 88 | + - `rt_app_export!` - 导出应用初始化入口的宏 |
| 89 | + - `msh_cmd_export!` - 导出shell命令的宏 |
| 90 | + - 简化在no_std模式下的开发 |
| 91 | + |
| 92 | +### 2.2 运行时支持 (runtime/) |
| 93 | + |
| 94 | +**解决no_std模式下的运行时问题:** |
| 95 | + |
| 96 | +- **no_std_support.rs** - no_std环境支持 |
| 97 | +- **start.rs** - 启动代码,处理main函数到RT-Thread线程的转换 |
| 98 | +- **lang_items.rs** - 必要的语言项实现 |
| 99 | +- **linker/** - 链接脚本,用于模块加载 |
| 100 | + |
| 101 | +### 2.3 Shell命令支持 (shell/) |
| 102 | + |
| 103 | +**导出Rust命令到RT-Thread shell:** |
| 104 | + |
| 105 | +- 提供`MSH_CMD_EXPORT`宏的Rust版本 |
| 106 | +- 自动处理参数解析 |
| 107 | +- 与finsh组件集成 |
| 108 | + |
| 109 | +### 2.4 示例代码 (examples/) |
| 110 | + |
| 111 | +**包含三类示例:** |
| 112 | + |
| 113 | +1. **applications/** - 使用Rust编写应用 |
| 114 | + - `hello_world/` - 基础示例 |
| 115 | + - `thread_sync/` - 线程同步示例 |
| 116 | + - `device_io/` - 设备IO示例 |
| 117 | + |
| 118 | +2. **components/** - 使用Rust编写组件/软件包 |
| 119 | + - `logger/` - 日志组件 |
| 120 | + - `sensor_driver/` - 传感器驱动 |
| 121 | + - `protocol_stack/` - 协议栈 |
| 122 | + |
| 123 | +3. **modules/** - 使用Rust编写内核动态模块 |
| 124 | + - `simple_module/` - 简单模块示例 |
| 125 | + - `device_module/` - 设备驱动模块示例 |
| 126 | + |
| 127 | +## 三、构建系统集成 |
| 128 | + |
| 129 | +### 3.1 Kconfig配置示例 |
| 130 | + |
| 131 | +```kconfig |
| 132 | +menuconfig RT_USING_RUST |
| 133 | + bool "Rust Language Support" |
| 134 | + default n |
| 135 | +if RT_USING_RUST |
| 136 | + config RT_RUST_CORE |
| 137 | + bool "Enable Rust Core Library" |
| 138 | + default y |
| 139 | + config RT_RUST_RUNTIME |
| 140 | + bool "Enable Rust Runtime Support" |
| 141 | + default y |
| 142 | + select RT_RUST_CORE |
| 143 | + config RT_RUST_MSH_SUPPORT |
| 144 | + bool "Enable Rust MSH Command Support" |
| 145 | + default y |
| 146 | + depends on RT_USING_FINSH |
| 147 | + menu "Rust Examples" |
| 148 | + config RT_RUST_EXAMPLES_APPS |
| 149 | + bool "Build Application Examples" |
| 150 | + default n |
| 151 | + config RT_RUST_EXAMPLES_COMPONENTS |
| 152 | + bool "Build Component Examples" |
| 153 | + default n |
| 154 | + config RT_RUST_EXAMPLES_MODULES |
| 155 | + bool "Build Module Examples" |
| 156 | + default n |
| 157 | + depends on RT_USING_LWP && RT_USING_MODULE |
| 158 | + endmenu |
| 159 | +endif |
| 160 | +``` |
0 commit comments