我尝试在装配式插件中制作操作系统。我失败了。代码是硬皮。我猜这是我的第二次尝试。
我将使用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代码设置。
不要在没有测试并确保它们工作的情况下推动任何提交。
如果基本功能正常使用,请推动您的提交。我不希望您在推动之前预见所有安全漏洞并修补它。
稍后,我可能会添加一个预算检查脚本,以确保您的代码遵循这些标准。