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