Skip to content

rcore-os/tg-rcore-tutorial-user

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tg-rcore-tutorial-user

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

设计目标

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

总体架构

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

主要特征

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

功能实现要点

  • _start 负责用户态程序初始化并跳转到 main
  • 通过 tg-rcore-tutorial-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
}
  • 章节内真实用法:
    • tg-rcore-tutorial-ch2/build.rstg-rcore-tutorial-ch8/build.rs 在构建阶段编译并打包 tg-rcore-tutorial-user 程序。
    • tg-rcore-tutorial-ch2/src/main.rs 等通过 tg_linker::AppMeta 加载这些用户程序运行。

与 tg-rcore-tutorial-ch1~tg-rcore-tutorial-ch8 的关系

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

License

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages