我嘗試在裝配式插件中製作操作系統。我失敗了。代碼是硬皮。我猜這是我的第二次嘗試。
我將使用Stivale協議的Limine Bootloader使用。
由於此存儲庫將limine用作subsodule,因此您必須遞歸使用以下方式克隆此回購。
git clone --recursive https://github.com/soumitradev/BruhOS.git
如果要編譯此項目,則強烈建議您設置交叉編譯器。此存儲庫的根部包含一個基本的toolchain.sh文件,該文件安裝了用於ELF文件的X86_64平台的交叉編譯器。
安裝交叉編譯器後,您可以運行make run以在QEMU中運行OS。
截至目前,可以使用以下命令:
make all :為操作系統製作.hdd文件。就是這樣。make disk :為操作系統製作.hdd文件。就是這樣。make run :製作OS的.HDD文件並在QEMU中運行。make log :製作OS的.hdd文件,運行它,然後讓QEMU生成日誌。make logs :為OS製作.hdd文件,運行它,然後讓QEMU生成日誌。make debug :製作OS的.HDD文件,運行它,然後將其連接到GDB進行調試。make clean :清潔工作目錄並刪除所有構建人工製品。運行toolchain.sh腳本將在~/.local/bin/cross_compiler/x86_64/中安裝交叉編譯器。它包括GCC,GDB和Binutils。交叉編譯器的二進製文件具有前綴x86-64-elf- 。因此,例如,要運行gcc ,您必須運行~/.local/bin/cross_compiler/x86_64/bin/x86-64-elf-gcc 。請注意,如何將前綴添加到我們要運行的二進製文件。
注意:要使此過程更快,您必須將線程數設置為變量,通常比計算機具有的線程數高1個。我的計算機有8個線程,因此我將THREADS變量設置為toolchain.sh中的線程變量。 SH腳本為9。請檢查您擁有的線程數,並相應地更改toolchain.sh鏈中的該變量。
截至寫作時,最新的GCC,GDB和Binutils版本分別為10.2.0、9.2和2.35。如果需要其他版本,請在同一toolchain.sh腳本中替換BINUTILSVERSION , GCCVERSION和GDBVERSION變量。
注意:不要將此腳本作為超級用戶運行。運行腳本需要穩定的互聯網連接和一杯咖啡,因為需要一段時間;)
Limine是有史以來最史詩般的引導加載程序。
QWord,Rock和Dripos非常有幫助。此代碼幾乎是其代碼的集群。他們的代碼寫得很好,易於理解,總的來說是開始學習Osdev的好地方。
Osdev Discord Server也是學習,提出問題的好地方,通常是一個很棒的社區。
屏幕截圖是因為這只是不值得花費時間來測試半完成內核的時間。


所有文件均使用C ++ 17標準,除了LIBGCC以外,不要使用任何標準庫(顯然是OS/內核開發)。在使用make clean或手動刪除文件提交之前,應清潔所有對象文件和內核構建文件。 Gitignore包含一些基本過濾器,但請務必仔細檢查您沒有承諾任何構建人工製品。
除makefile以外的所有文件都縮進了2個空格的縮進。是的,我喜歡4個空間,但是有一些以前的經驗,這可以產生像結構這樣的巨大樹,並且具有2個空間凹痕看起來更乾淨。 MakeFile需要按定義的標籤縮進。格式化它將導致它破裂。
確保您使用的是Google格式化指南。可以用VS代碼設置。
不要在沒有測試並確保它們工作的情況下推動任何提交。
如果基本功能正常使用,請推動您的提交。我不希望您在推動之前預見所有安全漏洞並修補它。
稍後,我可能會添加一個預算檢查腳本,以確保您的代碼遵循這些標準。