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-syscall的user接口执行系统调用。 - 与章节构建脚本配合,在内核构建期将用户程序编译并打包进镜像。
对外接口
- 宏:
print!println!
- 函数(示例):
getchar()sleep(ms)get_time()pipe_read(...)pipe_write(...)
- 导出:
tg_syscall::*(用户态 syscall 接口)
使用示例
extern crate user_lib;
extern "C"
- 章节内真实用法:
ch2/build.rs到ch8/build.rs在构建阶段编译并打包tg-user程序。ch2/src/main.rs等通过tg_linker::AppMeta加载这些用户程序运行。
与 ch1~ch8 的关系
- 直接依赖章节:通常不是运行时 Cargo 直接依赖,而是构建/打包链路依赖(
ch2到ch8)。 - 关键职责:提供用户态测试程序与运行时库,驱动内核 syscall/trap 路径验证。
- 关键引用文件:
ch2/build.rsch6/build.rsch8/build.rstg-user/src/bin/*.rs
License
Licensed under either of MIT license or Apache License, Version 2.0 at your option.