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做出貢獻來提供幫助 - 這是為什麼它作為單獨存儲庫保存的部分原因。