现状
现在DragonOS的编译管理是这样的:
- 内核使用Makefile作为编译脚本。把kernel的rust部分编译成静态库,然后再在Makefile里面,把它与其他的.o文件进行链接,最终拷贝到./bin/kernel/kernel.elf下
- 用户程序使用dadk进行编译。
存在的问题
随着内核变得复杂,试想以下场景:
- 我们想指定内核编译、运行配置(通过统一的toml来指定);
- 想在内核链接之后生成vmlinux文件或者bzImage
- 想在链接完成之后修改内核ELF文件的header(direct linux boot需要)
- 要在cicd环境跑测试,每次测试的配置、要安装的软件、执行的命令都不一样
- 不同编译配置的情况下,cargo check也要更新相应的配置。不然的话vscode的提示就有问题。
如果我们使用Makefile去完成上述需求,那么这个编译脚本可能就又臭又长,并且维护起来可能比较麻烦。
因此一种简单的方式就是,写一个命令行程序,提供一些编译配置模版,并且在命令行程序里面对内核编译、系统运行的参数设置进行处理,这样的话能更方便一些。
并且,个人感觉,如果能把dadk进行修改,把dadk的功能整合进来,也许是一种方案。
欢迎大家在这个帖子下面发表自己的想法~