modules.md 1.3 KB

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.

    [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:

[build]
target = "your_target"
  1. 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
    
  2. 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:

[dependencies]
rt_rust = { path = "PATH/TO/rust/rt-rust" }

Currently the macro-main library is not supported because it causes entry detection issues.

References