项目介绍
基于libos架构的操作系统核心库及构建工具
项目详情
TenonOS:简化复杂性,释放创新力,重塑操作系统的开发模式
TenonOS是一款基于LibOS架构的操作系统,旨在提升操作系统扩展、裁剪、移植效率,基于丰富的微库组件池,实现跨场景、跨行业、跨领域的快速能力复用,灵活生成与场景最契合的OS实体。
架构
与传统宏内核、微内核架构的操作系统不同,Tenon采用微库解耦架构,借鉴Unikraft的实现方式,将kernel、驱动、服务进一步拆分封装成接口解耦、功能独立的微库,使用Kconfig进行微库配置和依赖关系管理。Tenon不约束操作系统或内核必须由哪些部件组成,用户可以根据自己的需求选择TenonOS社区或UK社区提供的微库,甚至可以基于框架提供的API封装实现自己的调度器、内存分配器、线程池、同步锁、特定系统调用等微库,达到任意裁剪、新增、优化操作系统功能的目的,使软硬件性能、资源利用率达到极致。
目前Tenon的构建代码和基础框架使用Unikraft V0.16.0版本作为基线,并增加以下平台和主要特性:
支持的平台
| 平台 | CPU架构 | 启动协议 | 状态 |
|---|---|---|---|
| 树莓派 | arm64 | Linux 64-bit boot protocol | 已支持 |
| rk3568 | arm64 | Linux 64-bit boot protocol | 已支持 |
| kvm | arm64 | Linux 64-bit boot protocol | 已支持 |
| d9 | arm64 | Linux 64-bit boot protocol | 已支持 |
关键特性
- 支持嵌入式平台:plat-raspi、plat-rk3568
- posix接口兼容 -- 持续更新
- 调试工具:openocd+gdb
- 调试工具:NS8250串口驱动
- 实时微库:支持抢占式调度
- 实时微库:支持中断抢占、中断嵌套
- 同步微库:支持自旋锁、互斥锁、信号量、消息队列
- 支持虚拟文件系统
- 网络微库:netdev框架
- SMP:支持多核启动和跨核调度
- 网络微库:rk3568网卡驱动
示例应用
如何使用
代码结构
除Tenon框架API和核心微库外,TenonOS社区主仓还提供了用于编译构建的板级支持包仓库、以app为前缀的应用仓库、以lib为前缀的外部微库、以driver为前缀的外部驱动微库、以plat为前缀的外部平台仓库。这些微库会在后续逐步开源。构建时工作目录结构如下
.
├── apps /*此目录用于维护运行在os之上的app,下为示例*/
│ ├── app-busybox
│ ├── app-elfloader
│ ├── app-helloworld
│ ├── app-helloworld-cpp
│ └── app-tflite
├── board-support-package /*此目录用于维护板级支持包,包括设备树、bootloader等。下为示例*/
│ ├── kvm
│ └── raspberry-pi-3b+
├── drivers /*此目录用于维护外部驱动,“外部”指不在tenon核心仓维护的代码仓*/
├── libs /*此目录用于维护外部微库,下为示例*/
│ ├── lib-libcxx
│ └── lib-tflite-micro
├── plats /*此目录用于维护外部平台,包含对应平台的os初始化代码。下为示例*/
│ ├── plat-raspi
│ └── plat-rk3568
└── tenon /*tenon核心仓库,用于维护API框架和内部微库*/
├── arch /*cpu架构相关代码*/
├── build /*保存构建出的镜像和中间产物*/
├── drivers /*用于维护内部驱动*/
├── include /*跨微库共用的宏定义、结构体定义等*/
├── lib /*用于维护框架微库和内部微库*/
├── plat /*用于维护内部平台,如kvm*/
└── support /*编译构建脚本*/使用指导
Tenon使用make完成编译构建,当前支持kvm、树莓派3b+、rk3568等平台,使用指导请参考quick_start
社区贡献
Tenon欢迎各方以个人、组织、企业形式参与到社区贡献当中,贡献指导请参考Contributing
License
Tenon采用Apache-2.0开源许可协议。当前代码仓中仍有部分unikraft代码,unikraft采用BSD-3-Clause开源许可协议。当前开发过程中,若要修改uk原有微库的代码,请保留文件中原有LICENSE说明,新增微库或特性请使用Apache-2.0协议。后续开源进程中我们将逐步移除对uk代码的依赖。


