我打算为x86架构开发一个操作系统。 我有哪些编程语言的选项? 有哪些类型的编译器可用,最好在Windows环境下? 是否有任何好的资源可以帮助我了解操作系统开发? 是在虚拟机上测试我的操作系统还是在物理硬件上测试更好? 有什么建议吗?
我正在使用Rust编写操作系统,需要直接调用我正在计算的虚拟地址(u32类型)。我本以为这会相对简单:let code = virtual_address as (extern "C" fn ()); (code)(); 然而,这抱怨说这个强制类型转换是非原始类型。它建议我...
据我所知,gcc内联汇编中使用的约束条件告诉gcc输入和输出变量必须放在何处(或必须放置在哪里)以生成有效的汇编代码。正如Fine手册所说,“操作数放置的约束条件”。 这是一个特定的、可工作的例子来自教程。 static inline uint8_t inb(uint16_t port) ...
这是一个低级系统问题。 我需要混合32位和16位代码,因为我正在尝试从保护模式返回到实模式。作为背景信息,我的代码在GRUB引导后执行,所以没有任何麻烦的操作系统告诉我可以做什么和不能做什么。 无论如何,我使用[BITS 32]和[BITS 16]来告诉nasm应该使用哪种类型的操作,但是...
在我的操作系统课上,我们打算用C语言修改Linux内核,加入一些简单的系统调用。 哪个发行版适合这个目的呢?我们不需要任何花哨的东西,没有图形界面,只要一个原始的内核等等。基本的越简单越好。
我已经有一段时间对编写操作系统很感兴趣。在浏览了几个不同的网站之后,我发现了一个有趣的概念(简单概括一下):如果你从#include开始编写引导程序,那么你已经犯了致命的错误。 我学习了K&R,整本书在每个课程中都包含了它。在学习C时使用了它,但是我不知道自己学到了什么可以不使用st...
想象一台32位x86计算机,内存不到3GB,CPU设置为禁用分页和平面段描述符(基地址为0x0,数据和代码的有效限制均为0xffffffff)。 当ring0中的指令尝试使用mov指令引用未被任何内存地址支持的物理地址时会发生什么? QEMU仿真会出现错误,如“fatal: Trying ...
我正在学习汇编语言。我写了一个简单的引导程序。在测试后,它没有起作用。以下是我的代码: [bits 16] [org 0x7c00] jmp start data: wolf_wel_msg db 'Welcome to Bootloader!!!',0x0D,0x0A,0 wolf_k...
在我看来,程序员(特别是计算机科学毕业生)最常尝试着去完成的过于雄心勃勃的项目是构建自己的操作系统。(尝试创建自己的编程语言+编译器可能更为普遍,但远没有这么雄心勃勃。) 对于那些像我一样愚蠢地尝试的人:除了纯粹的规模以外,在从头开始创建你自己的操作系统时,你遇到的最大陷阱或意料之外的障碍是...