docs.rs failed to build ostool-server-0.1.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
ostool
🌐 Language | 语言
English | 简体中文 (当前 | Current)
📖 项目简介
ostool 是一个专为操作系统开发而设计的 Rust 工具集,旨在为 OS 开发者提供便捷的构建、配置和启动环境。它特别适合嵌入式系统开发,支持通过 Qemu 虚拟机和 U-Boot 引导程序进行系统测试和调试。
✨ 核心特性
- 🔧 一体化工具链 - 集构建、配置、运行于一体的完整解决方案
- 🖥️ 现代化 TUI - 基于终端的用户界面,提供直观的配置编辑体验
- ⚙️ 智能配置管理 - JSON Schema 驱动的配置验证和编辑
- 🚀 多种启动方式 - 支持 Qemu 虚拟机和 U-Boot 硬件启动
- 🌐 跨平台支持 - Linux、Windows 等多平台兼容
- 📦 模块化架构 - 可扩展的组件设计,便于定制和集成
🏗️ 项目架构
ostool 采用 Rust 工作空间架构,包含以下核心模块:
核心组件
| 组件 | 功能描述 | 主要用途 |
|---|---|---|
| ostool | 主要工具包 | CLI 工具,构建和运行系统 |
| jkconfig | 配置编辑器 | TUI 配置编辑界面 |
| fitimage | FIT 镜像构建 | U-Boot 兼容的启动镜像生成 |
| uboot-shell | U-Boot 通信 | 串口通信和命令执行 |
技术栈
- Rust - 核心开发语言,提供内存安全和性能
- Cursive - 现代化 TUI 框架
- JSON Schema - 配置验证和类型安全
- Tokio - 异步运行时
- Serialport - 串口通信
- Clap - 命令行参数解析
🚀 快速开始
安装
# 从 crates.io 安装
# 或从源码构建
基本使用
1. 查看帮助
# 查看主帮助
# 查看构建帮助
# 查看运行帮助
# 查看配置帮助
2. 配置管理
# 使用 TUI 编辑构建配置
# 配置 QEMU 运行参数
# 配置 U-Boot 运行参数
3. 构建系统
# 构建项目(使用默认配置文件 .build.toml)
# 指定配置文件构建
# 在指定工作目录中构建
4. 运行系统
# 使用 Qemu 运行
# 使用 Qemu 运行并启用调试
# 使用 Qemu 运行并转储 DTB 文件
# 指定 Qemu 配置文件运行
# 使用 U-Boot 运行
# 指定 U-Boot 配置文件运行
交互退出:在串口终端(如
ostool run uboot)中,按下Ctrl+A后再按x,工具会检测到该序列并优雅退出,不会将按键发送到目标设备。 更多键盘快捷键映射可参考源码ostool/src/sterm/mod.rs。
⚙️ 配置文件
ostool 使用多个独立的 TOML 配置文件,每个文件负责不同的功能模块:
构建配置 (.build.toml)
构建配置文件定义了如何编译你的操作系统内核。
Cargo 构建系统示例
[]
# 使用 Cargo 构建系统
= "Cargo"
[]
# 目标三元组
= "aarch64-unknown-none"
# 包名称
= "my-os-kernel"
# 启用的特性
= ["page-alloc-4g"]
# 日志级别
= "Info"
# 环境变量
= { = "-C link-arg=-Tlinker.ld" }
# 额外的 cargo 参数
= ["--release"]
# 构建前执行的命令
= ["make prepare"]
# 构建后执行的命令
= ["make post-process"]
# 是否输出为二进制文件
= true
自定义构建系统示例
[]
# 使用自定义构建系统
= "Custom"
[]
# 构建命令
= "make ARCH=aarch64 A=examples/helloworld"
# 生成的 ELF 文件路径
= "examples/helloworld/helloworld_aarch64-qemu-virt.elf"
# 是否输出为二进制文件
= true
QEMU 配置 (.qemu.toml)
QEMU 配置文件定义了虚拟机的启动参数。
# QEMU 启动参数
= ["-machine", "virt", "-cpu", "cortex-a57", "-nographic"]
# 启用 UEFI 引导
= false
# 输出为二进制文件
= true
# 成功运行的正则表达式(用于自动检测)
= ["Hello from my OS", "Kernel booted successfully"]
# 失败运行的正则表达式(用于自动检测)
= ["panic", "error", "failed"]
U-Boot 配置 (.uboot.toml)
U-Boot 配置文件定义了硬件启动参数。
# 串口设备
= "/dev/ttyUSB0"
# 波特率
= "115200"
# 设备树文件(可选)
= "tools/device_tree.dtb"
# 内核加载地址(可选)
= "0x80080000"
# 网络启动配置(可选)
[]
= "eth0"
= "192.168.1.100"
# 板子重置命令(可选)
= "reset"
# 板子断电命令(可选)
= "poweroff"
# 成功启动的正则表达式
= ["Starting kernel", "Boot successful"]
# 失败启动的正则表达式
= ["Boot failed", "Error loading kernel"]
环境变量支持
配置文件支持环境变量替换,使用 ${env:VAR_NAME:-default} 格式:
# .uboot.toml 示例
= "${env:SERIAL_DEVICE:-/dev/ttyUSB0}"
= "${env:BAUD_RATE:-115200}"
🛠️ 子项目详解
JKConfig - 智能配置编辑器
JKConfig 是一个基于 JSON Schema 的 TUI 配置编辑器,提供以下功能:
主要特性
- 🎯 智能界面生成 - 自动从 JSON Schema 生成编辑界面
- 🔒 类型安全 - 支持复杂数据类型和验证规则
- 📝 多格式支持 - TOML、JSON 格式读写
- 💾 自动备份 - 保存时自动创建备份文件
- ⌨️ 快捷键支持 - Vim 风格的键盘操作
使用方法
# 安装
# 编辑配置
# 自动检测 schema
键盘快捷键
导航:
↑/↓ 或 j/k - 上下移动
Enter - 编辑项目
Esc - 返回上级
操作:
S - 保存并退出
Q - 不保存退出
C - 清除当前值
M - 切换菜单状态
Tab - 切换选项
~ - 调试控制台
FitImage - FIT 镜像构建工具
FitImage 是用于创建 U-Boot 兼容的 FIT (Flattened Image Tree) 镜像的专业工具:
主要特性
- 🏗️ 标准 FIT 格式 - 完全符合 U-Boot FIT 规范
- 📦 多组件支持 - 内核、设备树、ramdisk 等
- 🗜️ 压缩功能 - gzip 压缩减少镜像大小
- 🔐 校验支持 - CRC32、SHA1 等多种校验算法
- 🎯 架构兼容 - ARM、ARM64 等多种架构
使用示例
use ;
// 创建 FIT 镜像配置
let config = new
.with_kernel
.with_fdt;
// 构建镜像
let mut builder = new;
let fit_data = builder.build?;
// 保存文件
write?;
🎯 使用场景
1. 本地开发工作流
# 1. 初始化项目
# 2. 使用 menuconfig 配置构建参数
# 3. 配置 QEMU 运行参数
# 4. 构建项目
# 5. 使用 Qemu 运行
# 6. 启用调试模式运行
2. 远程构建和硬件测试
# 1. 使用 menuconfig 配置自定义构建
# 2. 配置 U-Boot 运行参数
# 3. 执行构建
# 4. 通过 U-Boot 启动到硬件
# 5. 指定自定义 U-Boot 配置
3. 嵌入式系统开发
- 🎯 多架构支持 - ARM64、RISC-V64 等多种架构
- 🔧 设备树管理 - 自动处理 DTB 文件和设备树配置
- 📡 网络启动 - 支持 TFTP 网络启动和远程加载
- 🖥️ 串口调试 - 实时串口监控和调试信息输出
- 🔐 FIT 镜像 - 创建 U-Boot 兼容的 FIT 启动镜像
- ⚡ 自动化构建 - 支持构建前后脚本和自定义命令
4. 高级调试场景
# 启用详细日志
RUST_LOG=debug
# 转储 DTB 文件用于调试
# 在指定工作目录中操作
🔧 高级配置
U-Boot 网络启动设置
# TFTP 需要 root 权限绑定 69 端口
调试配置
[]
= "-s -S" # 启用 GDB 调试
[]
# 启用详细日志
= "debug"
🐛 故障排除
常见问题
Q: U-Boot 启动失败? A: 检查以下几点:
- 串口设备路径是否正确(
/dev/ttyUSB0或其他) - 串口权限是否足够(可能需要
sudo usermod -a -G dialout $USER) - 波特率设置是否与硬件匹配
- 设备树文件路径是否正确
Q: Qemu 无法启动? A: 检查以下几点:
- 构建生成的内核文件是否存在
- QEMU 配置中的架构参数是否正确
- 是否安装了对应架构的 QEMU(如
qemu-system-aarch64)
Q: 构建失败? A: 检查以下几点:
- 构建配置文件格式是否正确
- 自定义构建命令是否能在终端中执行
- 目标架构的交叉编译工具链是否安装
Q: 配置文件格式错误? A: 检查以下几点:
- TOML 语法是否正确(使用在线 TOML 验证器)
- 配置文件是否使用了正确的字段名
- 数组和字符串格式是否符合规范
Q: menuconfig 无法启动? A: 检查以下几点:
- 终端是否支持 TUI 界面
- 是否安装了必要的依赖(如 ncurses)
- 配置文件权限是否正确
调试技巧
# 启用详细日志
RUST_LOG=debug
# 查看完整的命令行帮助
# 检查配置文件是否被正确加载
RUST_LOG=debug |
# 在指定工作目录中调试
权限问题解决
# 将用户添加到 dialout 组以访问串口设备
# 重新登录或重启使权限生效
# 或者临时使用 sudo 运行
🤝 贡献指南
我们欢迎社区贡献!请遵循以下步骤:
- Fork 本仓库
- 创建 特性分支 (
git checkout -b feature/amazing-feature) - 提交 更改 (
git commit -m 'Add some amazing feature') - 推送 到分支 (
git push origin feature/amazing-feature) - 创建 Pull Request
开发环境设置
📄 许可证
本项目采用双重许可证:
🔗 相关链接
🙏 致谢
感谢所有为 ostool 项目做出贡献的开发者和用户!