mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-24 13:34:37 +08:00
Adding Rust Language Support for RT-Thread #10910
ToolsCI / Tools (push) Has been cancelled
RT-Thread BSP Static Build Check / 🔍 Summary of Git Diff Changes (push) Has been cancelled
RT-Thread BSP Static Build Check / ${{ matrix.legs.RTT_BSP }} (push) Has been cancelled
RT-Thread BSP Static Build Check / collect-artifacts (push) Has been cancelled
pkgs_test / change (push) Has been cancelled
utest_auto_run / A9 :components/dfs.cfg (push) Has been cancelled
utest_auto_run / A9 :components/lwip.cfg (push) Has been cancelled
utest_auto_run / A9 :components/netdev.cfg (push) Has been cancelled
utest_auto_run / A9 :components/sal.cfg (push) Has been cancelled
utest_auto_run / A9 :cpp11/cpp11.cfg (push) Has been cancelled
utest_auto_run / AARCH64-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64 :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :default.cfg (push) Has been cancelled
utest_auto_run / A9-smp :default.cfg (push) Has been cancelled
utest_auto_run / RISCV :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/mem.cfg (push) Has been cancelled
Weekly CI Scheduler / Trigger and Monitor CIs (push) Has been cancelled
Weekly CI Scheduler / Create Discussion Report (push) Has been cancelled
ToolsCI / Tools (push) Has been cancelled
RT-Thread BSP Static Build Check / 🔍 Summary of Git Diff Changes (push) Has been cancelled
RT-Thread BSP Static Build Check / ${{ matrix.legs.RTT_BSP }} (push) Has been cancelled
RT-Thread BSP Static Build Check / collect-artifacts (push) Has been cancelled
pkgs_test / change (push) Has been cancelled
utest_auto_run / A9 :components/dfs.cfg (push) Has been cancelled
utest_auto_run / A9 :components/lwip.cfg (push) Has been cancelled
utest_auto_run / A9 :components/netdev.cfg (push) Has been cancelled
utest_auto_run / A9 :components/sal.cfg (push) Has been cancelled
utest_auto_run / A9 :cpp11/cpp11.cfg (push) Has been cancelled
utest_auto_run / AARCH64-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64 :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :default.cfg (push) Has been cancelled
utest_auto_run / A9-smp :default.cfg (push) Has been cancelled
utest_auto_run / RISCV :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/mem.cfg (push) Has been cancelled
Weekly CI Scheduler / Trigger and Monitor CIs (push) Has been cancelled
Weekly CI Scheduler / Create Discussion Report (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# Writing a Rust Dynamic Library Usable by RT-Thread
|
||||
|
||||
1. Set up the project
|
||||
Create a new `cargo` project as usual. There are some flags to tell `cargo` to generate a system library instead of a regular Rust target.
|
||||
|
||||
```toml
|
||||
[lib]
|
||||
name = "your_crate"
|
||||
crate-type = ["cdylib"] # generate a dynamic library
|
||||
# crate-type = ["staticlib"] # generate a static library
|
||||
```
|
||||
|
||||
Add the following to `config.toml` to specify the target platform:
|
||||
|
||||
```toml
|
||||
[build]
|
||||
target = "your_target"
|
||||
```
|
||||
|
||||
2. Enable RT-Thread dynamic module loading
|
||||
To load dynamic modules in RT-Thread, enable it in `Kconfig`:
|
||||
```
|
||||
RT-Thread Components → C/C++ and POSIX layer
|
||||
→ POSIX (Portable Operating System Interface) layer
|
||||
→ Enable dynamic module APIs, dlopen()/dlsym()/dlclose() etc
|
||||
```
|
||||
|
||||
3. Enable the filesystem
|
||||
To place dynamic modules into RT-Thread, enable a filesystem in `Kconfig`:
|
||||
```
|
||||
RT-Thread online packages → system packages
|
||||
→ lwext4: an excellent choice of ext2/3/4 filesystem for microcontrollers.
|
||||
```
|
||||
|
||||
## Using the rust library
|
||||
|
||||
Add `rt_rust` dependency in `Cargo.toml`:
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
rt_rust = { path = "PATH/TO/rust/rt-rust" }
|
||||
```
|
||||
|
||||
Currently the macro-main library is not supported because it causes entry detection issues.
|
||||
|
||||
## References
|
||||
- [The Embedded Rust Book](https://xxchang.github.io/book/interoperability/rust-with-c.html#extern-c)
|
||||
@@ -0,0 +1,47 @@
|
||||
# 编写RT-Thread可以使用的rust动态库
|
||||
|
||||
1. 设置项目
|
||||
像往常一样创建一个新的`cargo`项目。有一些标志可以告诉`cargo`去生成一个系统库,而不是常规的rust目标文件。
|
||||
|
||||
```toml
|
||||
[lib]
|
||||
name = "your_crate"
|
||||
crate-type = ["cdylib"] # 生成动态链接库
|
||||
# crate-type = ["staticlib"] # 生成静态链接库
|
||||
```
|
||||
|
||||
在 `config.toml` 中添加以下内容,以指定目标平台
|
||||
|
||||
```toml
|
||||
[build]
|
||||
target = "your_target
|
||||
```
|
||||
|
||||
2. 开启 RT-Thread 加载动态模块功能
|
||||
为了能够在 RT-Thread 中加载动态模块,需要在 `Kconfig` 中开启
|
||||
```
|
||||
RT-Thread Components → C/C++ and POSIX layer
|
||||
→ POSIX (Portable Operating System Interface) layer
|
||||
→ Enable dynamic module APIs, dlopen()/dlsym()/dlclose() etc
|
||||
```
|
||||
|
||||
3. 打开文件系统
|
||||
为了能够将动态模块放入 RT-Thread 中,需要在 `Kconfig` 中开启文件系统。
|
||||
|
||||
```
|
||||
RT-Thread online packages → system packages
|
||||
→ lwext4: an excellent choice of ext2/3/4 filesystem for microcontrollers.
|
||||
```
|
||||
|
||||
## rust库的使用
|
||||
|
||||
在 `Cargo.toml` 中添加 `rt_rust` 依赖
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
rt_rust = { path = "PATH/TO/rust/rt-rust" }
|
||||
```
|
||||
|
||||
目前不支持macro-main库的使用,因为它会导致入口识别错误。
|
||||
## 参考资料
|
||||
- [The Embedded Rust Book](https://xxchang.github.io/book/interoperability/rust-with-c.html#extern-c)
|
||||
Reference in New Issue
Block a user