一个基于单片内核的微型32位X86 PC操作系统,具有一些类似于Unix的特征,并以C ++子集编写。
请注意:此元文件仍在进行中:-)
一个具有UNIX式功能的小桌面操作系统,该操作系统是在Hogeschool Utrecht的一年级TI学生中写成的,它可以在教育环境中使用。
在可能的情况下,牺牲性能和特征以降低复杂性并提高可读性。这应该有助于该软件在教育环境中更容易理解。然而,应实施来自霍格斯学校的OS-Courses的重要主题。
尽管它应该在真实硬件上启动,但考虑使用仿真器或虚拟机,Rikaios是为了简单起见而有意限制了受支持的硬件。
强制性免责声明:操作系统可能会融化您的主板,并在使用真实硬件,无担保,Yada Yada时食用宠物鼠标,请在您的家庭计算机上运行此之前,请阅读许可证文件中的免责声明。
请参阅./aux目录。虽然不要期望任何浮华 - 目前都是串行终端捕获!
及其当前功能集的操作系统是在2019年2月至7月的大约6个月内开发的。
Rikaios还不是完整的Linux替代品;-)
有一些需要工作或目前正在处理的功能(另请参见贡献部分):
grep -ERn 'TODO|FIXME|XXX' src/kernel/src src/kernel/include src/user/请注意,Rikaios的目标是保持较小:例如,网络堆栈或USB驱动程序可能不会考虑实施。
您需要安装此软件(在Linux-ish主机上)来构建和运行Rikaios:
版本号应该是最新的,尤其是对于Clang,LLVM和LLD。提供了一个Arch Linux Dockerfile(感谢@peikos),其中包括上述依赖项的兼容版本。
如果您需要的话,您可以使用GCC而不是Clang/LLVM,前提是您对i686-Elf有GCC交叉链链。有关如何切换工具链的详细信息,请参见src/kernel/Makefile 。
| 目录 | 描述 |
|---|---|
/src/boot | 引导加载程序(Bootsector和Stage2) |
/src/boot/utils | 引导加载程序安装程序 |
/src/kernel | 内核代码 |
/src/kernel/include | 内核标题暴露于Userland |
/src/kernel/include/os-std | OS标准库(数学,容器等) |
/src/user | Userland软件 |
/src/user/libsys | Userland C ++系统库 |
/src/disk | (FAT32)可用于操作系统的文件系统 |
| makefile | 描述 |
/src/Makefile | 构建所有内容,创建启动磁盘并运行模拟器 |
/src/boot/Makefile | 构建引导程序和安装程序 |
/src/kernel/Makefile | 构建内核 |
/src/user/Makefile | 建立用户世界 |
上面的每个makefile都包含(如果有),则在同一目录中使用Makefile.local文件。这使您可以覆盖任何工具链可执行的名称和路径,并可以选择添加其他目标。
不要忘记通过-j 4 (或更高)以提高多核心系统的构建性能。
这将构建内核和引导加载程序,并创建使用QEMU虚拟机 /仿真器运行的引导磁盘。与操作系统的串行连接在您运行make命令的终端中打开。
制作磁盘&&进行运行
当前,OS Shell和TTY驱动程序没有复杂的线条编辑功能和命令行历史的支持。为了方便起见,您可以将Qemu与rlwrap包裹起来,以利用事物主机侧的线条编辑设施(强烈建议):
制作磁盘&& rlwrap -a进行运行
为了在VirtualBox中运行,请执行以下操作:
vdi目标制作磁盘:做VDI
然后:
disk.vdi文件添加为IDE磁盘现在,您应该能够通过VirtualBox启动VM。
请注意,串行I/O可能很难上班。默认情况下,当前的OS版本与屏幕和键盘/鼠标的交互不多。
系统启动并运行系统后,您应该在串行终端中看到一个提示(如果您连接了一个显示器,则可能会出现飞溅屏幕)。您可以使用串行终端与OS进行交互。首先,尝试help命令。
磁盘上提供了许多实用程序。通过键入ls bin来查看安装程序(假设您仍在/disk0p1目录中)。 /disk0p1/bin中的所有ELF程序都可以作为命令执行,而无需键入完整路径(将其视为隐式$PATH目录)。同样,工作目录中的任何ELF文件(例如forth.elf )都可以通过键入其名称来运行。
要查看实用程序的工作原理或添加您自己的工作方式,请参阅此存储库的src/user目录中的REDME文件。
按下键盘上的ESC(在视频窗口中而不是串行终端)将启用内置调试实用程序内核外壳。这可用于打印有关运行过程和内存的各种统计信息和信息(在KSHELL中,请参见help命令)。
您可以使用Qemu或Bochs调试内核:
有关启动选项,请参见./src/gdbrc(您可以在Makefile.local中覆盖此文件路径)。
制作磁盘&&进行调试
有关配置选项,请参见./src/bochsrc(您可以在Makefile.local中覆盖此文件路径)。
制作磁盘&&制作玻璃
ld.lld:错误:无法找到库-LClang_RT.Builtins -I386
locate clang_rt.builtins )kernel/Makefile.local ,带有内容: LD_BUILTIN_DIR += /the/directory/containing/the/clang/lib 我知道目前公开可用的文档是有限的,因此请不要犹豫,打开问题或发送电子邮件。
请打开一个github / gitlab问题,以便我们可以确保任何重复的努力:-)
应在接下来的几周内对此进行正式化的过程 - 肯定可以在难度 /大小的情况下进行一些开放的问题 /功能。我将很快记录下来。
该项目是根据Apache许可证2.0许可的。有关更多信息,请参见/license。
该操作系统是从头开始写的,只有以下例外: