AddddOS
队伍名称:啊对的对的,嗷不对不对
学校名称:华中科技大学
队伍成员:
- 沈明辉
- 孙炜杰
项目构建
注意: 以下所有操作都在根目录下执行
在根目录下执行make qemu-riscv
运行riscv指令架构下的OS,执行make qemu-loongarch
运行龙芯指令架构下的OS;
该命令会编译kernel和user下的文件,并且生成EXT4文件系统镜像文件; 系统镜像的初始文件应该被存储在image/目录下,会在构建镜像文件的时候拷贝到OS的根目录中。
终端测试
首先在一个终端输入make qemu-gdb-riscv
或make qemu-gdb-loongarch
,分别启动riscv和龙芯下的OS,
然后在另一个终端输入make riscv64-unknown-elf-gdb
来启动gdb。
项目清理
要清理项目,可以执行以下命令:make clean
,此命令将会删除所有构建文件和生成的内核文件。
其他命令
项目说明
目录结构
-
kernel
: 内核代码 -
include
: 内核头文件 -
script
: 脚本 -
user
: 用户程序 -
basic
: 测试用例 -
doc
: 开发文档
目录介绍
kernel
目录包含所有的内核代码,根据功能将代码放在不同的文件夹如boot
,fs
,proc
等。
其他目录也按类似结构划分
这样的目录结构设计是为了减少使用预定义宏来区分不同平台的代码,从而使代码更加清晰,更易于维护。
对于双CPU架构的支持对于共用的文件在文件内部通过编译时的预定义宏选择编译,对于RISCV和LOONGARCH 中的特有文件在子目录中设置riscv和loongarch目录,在cmake中选择不同的文件联合编译。
项目启动
kernel\boot
中包含有riscv和龙芯的入口点(entry),启动代码(main),初始化函数(start)等。
在main
初始化文件系统,几个设备等内容后,调用userinit
创建第一个进程,第一个进程执行riscv64-unknown-elf-objcopy -S -O binary bin/initcode user/initcode
构造纯二进制文件initcode
完成操作系统的启动。