架构设计
本文档说明 XSTAR 的系统架构以及核心组件设计,聚焦"是什么/为什么"。
目录
- 整体架构
- 启动流程
- 跨平台抽象层 (XOS)
- 设备驱动框架
- 内核子系统
- 协程系统
- 图形系统
- KOBJ 虚拟文件系统
- 发布订阅系统
- Initcall 机制
- 设备树 (JSON)
- 工具库 (LibX)
- 数据流
整体架构
XSTAR 采用分层架构设计,从底层到上层依次为:
┌──────────────────────────────────────────────────────────────────┐
│ 应用层 (Applications) │
├──────────────────────────────────────────────────────────────────┤
│ 内核子系统 (Kernel Subsystems) │
│ Audio | Command | Core | Font | Graphic | Shell | Time │
│ Vision | Window | XFS │
├──────────────────────────────────────────────────────────────────┤
│ 设备驱动框架 (Driver Framework) │
│ Driver | Device | Class | KOBJ | DTREE (JSON) │
├──────────────────────────────────────────────────────────────────┤
│ 平台抽象层 (XOS) │
│ Memory | DMA | I/O | File | Thread | Mutex | Semaphore │
│ Coroutine | PM | Stdio │
├──────────────────────────────────────────────────────────────────┤
│ 工具库 (LibX) │
│ Algorithm | Data Structure | Crypto | JSON | DTREE | Encoding │
├──────────────────────────────────────────────────────────────────┤
│ 硬件平台 (Hardware Platforms) │
│ ARM32/64 | RISC-V32/64 | x64 (Baremetal/Linux/FreeRTOS) │
└──────────────────────────────────────────────────────────────────┘
分层说明
- 硬件平台层:提供基础的硬件支持,包括 CPU、内存、外设等
- LibX 工具库:提供通用的算法、数据结构、加密、编码等工具函数
- XOS 抽象层:屏蔽底层差异,提供统一的系统调用接口
- 设备驱动框架:管理设备驱动和设备实例,实现驱动的自动探测和注册
- 内核子系统:提供音频、图形、命令、Shell、时间、视觉、窗口、文件系统等核心功能
- 应用层:基于内核子系统构建的上层应用
启动流程
系统入口为 xstar_init()(xstar/xstar.c),平台特定的 main() 调用 xstar_init(&env, json) 完成整个系统初始化:
main() → xstar_init()
├── xos_environ_init(env) 安装平台抽象函数表
├── do_initcalls() 按级别执行所有 initcall (0→9)
├── do_init_romdisk() 注册 romdisk 块设备
├── do_init_dtree(dtree) 解析设备树 JSON,探测所有设备
├── do_init_wallclock() 从 RTC 设备校准墙钟时间
├── do_init_memory() 注册内存信息 KOBJ
├── do_init_logger() 注册日志控制 KOBJ
├── do_init_version() 注册版本信息 KOBJ
├── do_init_copyright() 注册版权验证 KOBJ
├── do_init_random() 初始化随机数生成器
├── do_init_feature() 检测协程/线程支持特性
├── do_init_font() 加载 TrueType 字体
├── do_init_setting() 初始化持久化设置系统
├── do_init_final() 执行 final 级别 initcall
└── do_show_logo() 在帧缓冲上显示启动 Logo
关键步骤说明:
xos_environ_init(env):将平台提供的函数指针安装到全局__xos_environ结构体中,仅覆盖非 NULL 的条目do_initcalls():按级别 0-9 顺序执行链接器段中的初始化函数,驱动注册、子系统初始化、命令注册都在此阶段完成do_init_dtree(dtree):解析设备树 JSON,对每个设备节点匹配驱动并调用probe(),创建设备实例do_init_wallclock():遍历已注册的 RTC 设备,读取有效时间校准墙钟(仅当 RTC 时间合理时采纳)do_init_final():执行final_initcall级别的初始化函数,用于最末阶段的延迟初始化
跨平台抽象层 (XOS)
XOS 是 XSTAR 的核心抽象层,通过函数指针表屏蔽不同平台和运行环境的差异。