tg-rcore-tutorial-user 0.4.2-preview.1

User-space apps for rCore Tutorial chapters (subset for ch2).
Documentation

tg-user

本 crate 提供 rCore Tutorial 用户态运行时与示例用户程序集合。

设计目标

  • 提供用户态程序统一入口与基础运行时(_start、堆、打印等)。
  • 封装用户态系统调用调用方式,减少每个示例程序重复代码。
  • ch2~ch8 提供可编译、可打包、可运行的实验用户程序集。

总体架构

  • cases.toml:定义按章节打包的用户程序集合。
  • src/lib.rs
    • 用户态启动入口 _start
    • 控制台输出与常用辅助函数
    • tg-syscall(user) 的再导出/封装
  • src/heap.rs:用户态堆分配支持。
  • src/bin/*.rs:各实验场景用户程序。

主要特征

  • 提供用户态 print! / println!
  • 对常见 syscall 提供便捷封装和重导出。
  • 支持按章节组织的大量测试程序。
  • no_std 用户态运行时支持。

功能实现要点

  • _start 负责用户态程序初始化并跳转到 main
  • 通过 tg-syscalluser 接口执行系统调用。
  • 与章节构建脚本配合,在内核构建期将用户程序编译并打包进镜像。

对外接口

  • 宏:
    • print!
    • println!
  • 函数(示例):
    • getchar()
    • sleep(ms)
    • get_time()
    • pipe_read(...)
    • pipe_write(...)
  • 导出:
    • tg_syscall::*(用户态 syscall 接口)

使用示例

#[macro_use]
extern crate user_lib;

#[unsafe(no_mangle)]
extern "C" fn main() -> i32 {
    println!("Hello, world from user mode program!");
    0
}
  • 章节内真实用法:
    • ch2/build.rsch8/build.rs 在构建阶段编译并打包 tg-user 程序。
    • ch2/src/main.rs 等通过 tg_linker::AppMeta 加载这些用户程序运行。

与 ch1~ch8 的关系

  • 直接依赖章节:通常不是运行时 Cargo 直接依赖,而是构建/打包链路依赖(ch2ch8)。
  • 关键职责:提供用户态测试程序与运行时库,驱动内核 syscall/trap 路径验证。
  • 关键引用文件:
    • ch2/build.rs
    • ch6/build.rs
    • ch8/build.rs
    • tg-user/src/bin/*.rs

License

Licensed under either of MIT license or Apache License, Version 2.0 at your option.