toaruos
toaruos是X86-64 PC的“完整”操作系统,也是对ARMV8的实验支持。
尽管许多独立,爱好和研究OS的目标是尝试新设计,但toaruos旨在作为一种教育资源,提供了在主要台式机操作系统中发现的代表性缩影。
操作系统包括一个内核,引导加载程序,动态共享对象链接器,C标准库,其自己的合成窗口系统,动态字节码编译的编程语言,高级代码编辑器以及其他数十个其他实用程序和示例应用程序。
没有外部运行时依赖关系,所有必需的源代码,总计约为100K(主要)C的总和,该存储库中包括了(除了单独使用的Kuroko)。
展示了toaruos的UI和一些应用。
历史
我已经从事toaruos已经十多年了,多年来,我的目标发生了变化。
当我在2010年12月刚开始该项目时,我的目的是“学习” – 通过从头开始学习一个类似Unix的系统。我曾是Compiz的撰稿人,Compiz是X11的首批广泛使用的窗户经理之一,几年前,自然而然地, toaruos在早期就获得了基于类似概念的GUI。
对于2015年最初的1.0发行版, toaruos并不是它已成为的“完全从头开始”的操作系统。 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动态链接的用户空间。 - 具有软件加速度和2000年代后期设计灵感的合成图形UI 。
- 在VirtualBox和VMware工作站中的绝对鼠标和自动显示大小的VM集成。
- Unix样终端接口,包括富特征终端模拟器和几个熟悉的实用程序。
- 可选的第三方端口,包括GCC 10.3,Binutils,SDL1.2,地震等。
著名的组件
- Misaka (内核),内核/,混合模块化内核和操作系统的核心。
- Yutani (窗口复合符),Apps/Compositor.c,管理窗口缓冲区,布局和输入路由。
- BIM (文本编辑器),Apps/bim.c是具有语法突出显示的VIM启发的编辑器。
- 终端,应用程序/终端,XTERM风格的终端模拟器,具有24位颜色支持。
- LD.SO (动态链接器/加载程序),Linker/Linker.c,加载动态连接的精灵二进制文件。
- ESH (Shell),Apps/esh.c,支持管道,重定向,变量等。
- Kuroko (口译),Kuroko/,一种动态字节码编译的编程语言。
当前的目标
目前正在进行以下项目:
- 重写网络堆栈以获得更大的吞吐量,稳定性和服务器支持。
- 通过更好的调度和更智能的用户空间同步功能来提高SMP性能。
- 使用新的设备驱动程序为AHCI,USB,VIRTIO设备等支持更多硬件。
- 带回toaruos “ Legacy”的港口,例如Mupdf和Mesa。
- 改善POSIX的覆盖范围,尤其是在信号,同步原语以及提供更常见的公用事业方面。
- 继续改善与Newlib相比仍然不完整的C库,这是带回旧港口的主要问题。
- 替换第三方开发工具,将OS到达自我托管的状态,仅加入C编译器。
- 在Toarucc中实现C编译器工具链。
建筑物 /安装
与Docker建造
希望从源构建toaruos一般用户建议在GitHub上订购存储库,并使用GitHub CI管道。
对于那些希望在适当配置的Linux主机上与Docker一起构建的人,可以使用一个构建容器。可以将toaruos存储库用作/root/misaka和util/build-in-docker.sh可以在此容器中运行以完成汇编过程:
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\”>
git clone https://**gi*thub.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文件系统映像中。
项目布局
- 应用程序– 用户空间应用程序,都是第一方。
-
基础-Ramdisk根文件系统登台目录。包括
base/usr/include的C标头,以及合成器和窗口装饰器的图形资源。 - 引导– 带交互式菜单的BIOS和EFI加载器。
- 构建– 平台端口的辅助构建脚本。
- 内核– Misaka内核。
- KUROKO- KUROKO解释器的suppoule结帐。
- lib-用户空间库。
- LIBC -C标准库实施。
- 链接器– 用户空间动态链接器/加载程序,实现共享库支持。
- 模块– 内核的可加载驱动器模块。
- UTIL-实用脚本,工具链(Binutils/GCC)的登台目录。
- .make-生成的makefiles。
文件系统布局
根文件系统设置如下:
-
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
VirtualBox和VMware工作站
在这两种虚拟机中,将具有最佳的toaruos用户体验,因为toaruos支持其自动显示大小和绝对鼠标定位。
为“其他” 64位客人设置新的VM,为其提供至少1GIB RAM,附加CD图像,删除或忽略任何硬盘,然后选择一个Intel Gigabit NIC。也建议使用两个或更多CPU。
在VirtualBox中运行的toaruos 。
在VMware工作站播放器中运行的toaruos 。
默认情况下,Bootloader将将标志传递到VirtualBox设备驱动程序,以禁用“无缝”支持,因为实现具有性能开销。要启用无缝模式,请在启动之前使用Bootloader菜单在启动之前检查“ VirtualBox无缝”选项。如果您遇到此功能问题,则菜单还具有禁用自动访客显示尺寸的选项。
Qemu
toaruos的大多数开发都发生在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或专有许可)对代码进行修改,但您必须始终包含许可证中指定的版权通知,并提供许可的完整文本(只有几个段(仅几对夫妇))。
虽然大多数toaruos是我自己写的,但请确保在相关的其他作者中包括其他作者,例如与Mike的音频子系统或Dale的字符串功能。
toaruos的某些组成部分,例如Kuroko或Bim具有不同但兼容的术语。
社区
镜子
toaruos经常镜像多个git托管站点。
- gitlab: toaruos / toaruos
- github:klange/ toaruos
- Bitbucket:klange/ toaruos
- toaruos .org:klange/ toaruos
IRC
# toaruos on Libera( irc.libera.chat )
常见问题解答
toaruos是自我托管吗?
可以通过从存储库中安装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的任何地方都没有代码,也没有将Linux源用作参考材料。
toaruos是一个完全独立的项目,此存储库中的所有代码 – 这是操作系统的整个代码库,包括其内核,引导加载程序,库和应用程序 – 是原始的,由我自己编写,并且在十年的时间内写下了少数贡献者。完整的来源历史记录可以通过该GIT存储库来跟踪toaruos何时可以追踪的Baremetal“ Hello World”。
当您说“完整” …
toaruos是完整的,因为它涵盖了OS的整个功能范围:它不仅仅是“内核”或“只是一个用户空间”。
从“完成”的意义上说, toaruos并不完整。
toaruos符合POSIX的含量吗?
尽管我的目标是足够支持POSIX接口以使软件被移植,但严格的标准实现并不是OS的主要目标,甚至可能是不希望的。
接受捐款吗?
toaruos是一个个人项目,而不是社区项目。应提前讨论代码形式的贡献。但是,在存储库之外的港口和其他工作是帮助的好方法。
您还可以通过为Kuroko做出贡献来提供帮助 – 这是为什么它作为单独存储库保存的部分原因。
