summaryrefslogtreecommitdiff
path: root/components/rust/docs/4.modules
diff options
context:
space:
mode:
authorzhang san <[email protected]>2025-12-08 18:34:25 +0800
committerGitHub <[email protected]>2025-12-08 18:34:25 +0800
commit69980f8b9d29b38dbd4ddf6373b4b45f3a138409 (patch)
tree21dd9a8ce80e3d30192e9ffa56ea39a199bae309 /components/rust/docs/4.modules
parentcd1d47b87c5d47e131730e5506eb3ad77d357653 (diff)
Adding Rust Language Support for RT-Thread #10910
Diffstat (limited to 'components/rust/docs/4.modules')
-rw-r--r--components/rust/docs/4.modules/modules.md47
-rw-r--r--components/rust/docs/4.modules/modules_cn.md47
2 files changed, 94 insertions, 0 deletions
diff --git a/components/rust/docs/4.modules/modules.md b/components/rust/docs/4.modules/modules.md
new file mode 100644
index 0000000000..501a27215d
--- /dev/null
+++ b/components/rust/docs/4.modules/modules.md
@@ -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) \ No newline at end of file
diff --git a/components/rust/docs/4.modules/modules_cn.md b/components/rust/docs/4.modules/modules_cn.md
new file mode 100644
index 0000000000..f9630d31ad
--- /dev/null
+++ b/components/rust/docs/4.modules/modules_cn.md
@@ -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)