DADK 0.2.0-0.3.0版本需求

DADK 0.2.0不必与0.1.x兼容,但是文件要添加诸如version等字段,确保后续能够方便的进行迭代升级,保持兼容性。

本次重构负责人:

现状

目前DADK只管理了用户程序的编译与安装。但是随着内核构建的日益复杂,原本的基于Makefile+Shell的构建系统已经不能满足“多样配置”、“自动测试”等的要求。因此打算把DADK添加一些功能,实现:

  • 管理内核编译

  • 管理用户程序编译、安装

  • 管理rootfs打包

  • 管理系统运行

  • 性能profiling

  • 开发辅助:替代cargo check

需求描述

DADK总配置文件

用于管理整个工作区。DragonOS仓库提供多个总配置模版,根据情况在调用dadk的时候,传入配置文件路径。

DADK总配置文件里面要指定好:

  • CPU架构

  • 内核编译配置文件

  • 顶层应用程序清单的路径

  • dadk缓存目录

  • rootfs配置

  • 引导协议(multiboot、dragonStub、pvh)

  • 启动配置

内核编译管理

这玩意是不是写到内核编译相关的库里面更合适?但是肯定要做的。

  • 内核编译配置:提供编译配置文件,描述内核的编译参数

  • 增加对内核feature/常量配置文件的管理:根据模版,生成内核的feature/常量配置文件。由内核kernel_build库去emit出最终的feature.并且生成vscode_settings.json

用户程序编译安装管理

  • 把配置文件改为toml

  • 应用程序清单:提供应用程序清单的模版,dadk根据清单,去编译对应的应用程序。(允许通过不同的清单,生成不同的应用程序,比如测试环境的话就要编译测试程序进去。)并且,一个清单内,可以指定另一个清单(比如A->B,则会安装B清单里面的所有程序)

  • 目录依赖:允许每个配置文件单独放置在一个目录下,目录里面可以配合加一些脚本(prebuild、build和postbuild三个阶段),这样方便做一些处理(比如下完源码包之后,配置一下config,就不用去改源码包了)。

  • 编译缓存优化:检测源文件夹是否有更改,如果有,则运行编译,否则不运行编译。

RootFS打包管理

  • 配置rootfs的文件系统格式

  • 对rootfs进行格式化

  • 安装grub(如果要的话)

  • 把内核、应用程序拷贝到rootfs

  • 如果现有rootfs与配置文件描述的不一致,根据rootfs配置文件的描述,决定是否重新创建rootfs文件

系统运行管理

  • 按照配置文件,运行虚拟机(需要校验配置文件参数的合法性)

  • 提供vsock,创建http api接口,以便在系统运行期间,其他的dadk进程能通过这vsock连接上来,获取比如虚拟机配置、pty路径等的信息。

开发辅助

  • 按照配置文件,辅助启动gdb (感觉必要性不是很大?写个脚本就行)

  • 其他的功能(将来添加比如debug console等)

  • cargo check支持(让cargo check能够获取到正确的内核配置(好像跟内核构建的那个build.rs调用的库关系大一点))

性能profiling

  • 利用gdb的bt以及定时采样的功能,定位内核性能瓶颈,画出火焰图。

开发计划

一期

用户程序编译

  • 独立配置文件数据结构,然后换成toml
  • 编译缓存优化
  • lib化

总配置文件

  • 入参改为从总配置文件传进来。

rootfs打包管理

  • 提供打包配置
  • 可以根据打包配置来创建disk image,并把编译结果copy进去

2024.11.26:一期基本准备完毕,可以准备应用到DragonOS仓库主线进行使用了。本周内会pr上去。chore: bump version to 0.2.0 by fslongjin · Pull Request #93 · DragonOS-Community/DADK · GitHub

3 个赞

用户配置文件改成这样会不会简洁点?

image
这个也snake case吧。
然后我发现一般toml的是build-command这样的比较多,build_command的少点。

1 个赞

我觉得build_command和clean_command可以放在一起,叫command

这是两个完全不同的东西。