Toaruos是X86-64 PC的“完整”操作系统,也是对ARMV8的实验支持。
尽管许多独立,爱好和研究OS的目标是尝试新设计,但Toaruos旨在作为一种教育资源,提供了在主要台式机操作系统中发现的代表性缩影。
操作系统包括一个内核,引导加载程序,动态共享对象链接器,C标准库,其自己的合成窗口系统,动态字节码编译的编程语言,高级代码编辑器以及其他数十个其他实用程序和示例应用程序。
没有外部运行时依赖关系,所有必需的源代码,总计约为100K(主要)C的总和,该存储库中包括了(除了单独使用的Kuroko)。
演示毒素的UI和一些应用。
我已经从事毒事已经十多年了,多年来,我的目标发生了变化。
当我在2010年12月刚开始该项目时,我的目的是“学习” - 通过从头开始学习一个类似Unix的系统。我曾是Compiz的撰稿人,Compiz是X11的首批广泛使用的窗户经理之一,几年前,自然而然地,Toaruos在早期就获得了基于类似概念的GUI。
对于2015年最初的1.0发行版,托亚鲁斯并不是它已成为的“完全从头开始”的操作系统。 Newlib提供了LIBC,GUI建于开罗,Libpng和Freetype上。在2018年中期,我开始了一个新项目,以取代这些第三方组件,该项目最终完成并合并为Toaruos 1.6。
通过该项目,Toaruos还吸引了许多试图将其用作参考的初学者OS开发人员。然而,Toaruos的内核对我来说是一个个人尴尬的根源,在2021年4月,经过长时间的休假,我开始从事新的工作。结果是Misaka:新的64位启用SMP的内核。 Misaka于5月合并,并开始了1.99系列的Beta版本,直到Toaruos 2.0。
dlopen动态链接的用户空间。目前正在进行以下项目:
希望从源构建toaruos的一般用户建议在GitHub上订购存储库,并使用GitHub CI管道。
对于那些希望在适当配置的Linux主机上与Docker一起构建的人,可以使用一个构建容器。可以将toaruos存储库用作/root/misaka和util/build-in-docker.sh可以在此容器中运行以完成汇编过程:
git clone https://github.com/klange/toaruos
cd toaruos
git submodule update --init kuroko
docker pull toaruos/build-tools:1.99.x
docker run -v `pwd`:/root/misaka -w /root/misaka -e LANG=C.UTF-8 -t toaruos/build-tools:1.99.x util/build-in-docker.sh
这样的构建后,您可以运行各种实用目标( make run等)。尝试使用QEMU的串行端口使make shell运行toaruos壳。
Makefile使用kuroko工具auto-dep.krk为用户空间应用程序和库生成其他makefiles,从而根据#include Diactivers自动解决依赖关系。
在不确定的顺序中,构建了C库,内核,用户空间库和应用程序,并将其组合成压缩档案中,以用作Ramdisk,然后包装到ISO9660文件系统映像中。
base/usr/include的C标头,以及合成器和窗口装饰器的图形资源。根文件系统设置如下:
bin :第一方应用程序。cdrom :CD的安装点(如果有)。dev :虚拟设备目录,由内核生成。net :网络接口设备。pex :数据包交换集线器,列出可访问的IPC服务。pts :PTY次要,TTY的端点。etc :配置文件,启动脚本。home :用户目录。lib :第一方图书馆kuroko :KUROKO模块。mod :可加载的内核模块。proc :呈现内核状态的虚拟文件。1等:虚拟文件具有各个流程的状态信息。src :源文件,请参见上面的“项目布局”部分。tmp :以读/写TMPF的正常方式安装。usr :用户空间资源bin :第三方应用程序,通常为空,直到安装包装为止。include :标题文件,包括第三方软件包的潜在文件。lib :第三方图书馆。默认情况下应具有libgcc_s.so 。share :各种资源。bim :文本编辑器的语法突出显示和主题。cursor :鼠标光标精灵。fonts :truetype字体文件。现场CD船与Deja Vu Sans。games :与游戏相关的资源文件(例如Doom Wads)的垃圾场。help :帮助浏览器应用程序的文档文件。icons :PNG图标,按大小分为其他目录。ttk :窗口装饰和小部件库的Spritesheet资源。wallpapers :JPEG壁纸。var :运行时文件,包括软件包管理器清单缓存,PID文件,一些锁定文件等。 在这两种虚拟机中,将具有最佳的最终用户体验,因为Toaruos支持其自动显示大小和绝对鼠标定位。
为“其他” 64位客人设置新的VM,为其提供至少1GIB RAM,附加CD图像,删除或忽略任何硬盘,然后选择一个Intel Gigabit NIC。也建议使用两个或更多CPU。
在VirtualBox中运行的Toaruos。
在VMware工作站播放器中运行的毒素。
默认情况下,Bootloader将将标志传递到VirtualBox设备驱动程序,以禁用“无缝”支持,因为实现具有性能开销。要启用无缝模式,请在启动之前使用Bootloader菜单在启动之前检查“ VirtualBox无缝”选项。如果您遇到此功能问题,则菜单还具有禁用自动访客显示尺寸的选项。
托亚鲁斯的大多数开发都发生在Qemu,因为它为硬件和最佳调试体验提供了最灵活的性能。 Ubuntu 20.04主机中推荐的QEMU命令行是:
qemu-system-x86_64 -enable-kvm -m 1G -device AC97 -cdrom image.iso -smp 2
在没有KVM的主机平台上替换为-ACCEL -enable-kvm或-ACCEL HAXM替换-accel hvm或-accel haxm ,或将其删除以在QEMU的TCG软件仿真下尝试。
请注意,QEMU命令行选项不稳定,这些标志可能会在较新版本中产生警告。
选项-M q35将用较新的PIIX芯片组仿真替换PIIX芯片组的仿真,该模拟具有切换SATA One的IDE控制器的副作用。这可能会导致更快的启动时间,而牺牲了Toaruos在运行时无法阅读自己的CD,直到我开始完成AHCI驱动程序。
Toaruos已在真实硬件上成功测试。如果本机BIOS或EFI加载器无法运行,请尝试使用GRUB启动。 TOARUOS符合“ Multiboot”和“ Multiboot 2”规格,因此可以加载multiboot或multiboot2命令,如下所示:
multiboot2 /path/to/misaka-kernel root=/dev/ram0 migrate vid=auto start=live-session
module2 /path/to/ramdisk.igz
set gfxpayload=keep
Toaruos从ThinkPad T410上的USB棍子本地运行。
Toaruos的所有第一方部分均根据伊利诺伊大学 / NCSA大学许可(BSD式允许许可证)提供。除非另有说明,否则这是本存储库中所有文件的原始和唯一的许可证 - 仅仅因为文件没有版权标题并不意味着它不在此许可下。 Toaruos旨在作为教育参考,我鼓励使用我的代码,但请确保您遵循许可证的要求。您可以根据NCSA许可证重新分配代码,并根据其他条款(例如GPL或专有许可)对代码进行修改,但您必须始终包含许可证中指定的版权通知,并提供许可的完整文本(只有几个段(仅几对夫妇))。
虽然大多数毒素是我自己写的,但请确保在相关的其他作者中包括其他作者,例如与Mike的音频子系统或Dale的字符串功能。
毒素的某些组成部分,例如Kuroko或Bim具有不同但兼容的术语。
托亚鲁斯经常镜像多个git托管站点。
#toaruos on Libera( irc.libera.chat )
可以通过从存储库中安装build-essential Metapackage来构建各个应用程序和库,这将吸引gcc和binutils 。源可在实时CD的/src目录中提供与该存储库相似的布局,并且auto-dep.krk实用程序脚本也可用。
对于构建Ramdisks,最终核或CD图像,目前不可用一些组件。特别是,Ramdisks的构建脚本仍然用Python编写,并取决于其tarfile模块和zlib支持。以前,Toaruos 1.X具有功能强大的编译器工具链,能够构建自己的内核,用户空间,库和引导加载程序,并通过与MakeFile相似的函数的Python脚本将它们变成工作的ISO CD映像。
由于缺乏适当的POSIX壳并实施,Toaruos目前无法建立大多数端口。这些是该项目的最终目标。
不,一点也不。 Toaruos的任何地方都没有代码,也没有将Linux源用作参考材料。
Toaruos是一个完全独立的项目,此存储库中的所有代码 - 这是操作系统的整个代码库,包括其内核,引导加载程序,库和应用程序 - 是原始的,由我自己编写,并且在十年的时间内写下了少数贡献者。完整的来源历史记录可以通过该GIT存储库来跟踪托罗斯何时可以追踪的Baremetal“ Hello World”。
Toaruos是完整的,因为它涵盖了OS的整个功能范围:它不仅仅是“内核”或“只是一个用户空间”。
从“完成”的意义上说,托亚鲁斯并不完整。
尽管我的目标是足够支持POSIX接口以使软件被移植,但严格的标准实现并不是OS的主要目标,甚至可能是不希望的。
Toaruos是一个个人项目,而不是社区项目。应提前讨论代码形式的贡献。但是,在存储库之外的港口和其他工作是帮助的好方法。
您还可以通过为Kuroko做出贡献来提供帮助 - 这是为什么它作为单独存储库保存的部分原因。