35得票13回答
开发一款针对x86架构的操作系统

我打算为x86架构开发一个操作系统。 我有哪些编程语言的选项? 有哪些类型的编译器可用,最好在Windows环境下? 是否有任何好的资源可以帮助我了解操作系统开发? 是在虚拟机上测试我的操作系统还是在物理硬件上测试更好? 有什么建议吗?

14得票1回答
如何从Rust中调用原始地址?

我正在使用Rust编写操作系统,需要直接调用我正在计算的虚拟地址(u32类型)。我本以为这会相对简单:let code = virtual_address as (extern "C" fn ()); (code)(); 然而,这抱怨说这个强制类型转换是非原始类型。它建议我...

7得票1回答
需要在汇编/编译/链接时构建静态IDT和GDT的解决方案

这个问题源于多年来许多人遇到的问题,特别是在x86操作系统开发中。最近有一个相关NASM问题被编辑推上来了。在那种情况下,使用NASM的人在汇编时会出现以下错误: shift operator may only be applied to scalar values 另一个相关问题询问...

8得票1回答
gcc的内联汇编约束如何解释i386架构中的IN、OUT指令?

据我所知,gcc内联汇编中使用的约束条件告诉gcc输入和输出变量必须放在何处(或必须放置在哪里)以生成有效的汇编代码。正如Fine手册所说,“操作数放置的约束条件”。 这是一个特定的、可工作的例子来自教程。 static inline uint8_t inb(uint16_t port) ...

7得票4回答
使用nasm混合32位和16位代码

这是一个低级系统问题。 我需要混合32位和16位代码,因为我正在尝试从保护模式返回到实模式。作为背景信息,我的代码在GRUB引导后执行,所以没有任何麻烦的操作系统告诉我可以做什么和不能做什么。 无论如何,我使用[BITS 32]和[BITS 16]来告诉nasm应该使用哪种类型的操作,但是...

9得票11回答
哪个适合初学者内核开发的轻量级Linux发行版最好?

在我的操作系统课上,我们打算用C语言修改Linux内核,加入一些简单的系统调用。 哪个发行版适合这个目的呢?我们不需要任何花哨的东西,没有图形界面,只要一个原始的内核等等。基本的越简单越好。

7得票5回答
没有使用stdio的C语言,有哪些可能性?

我已经有一段时间对编写操作系统很感兴趣。在浏览了几个不同的网站之后,我发现了一个有趣的概念(简单概括一下):如果你从#include开始编写引导程序,那么你已经犯了致命的错误。 我学习了K&R,整本书在每个课程中都包含了它。在学习C时使用了它,但是我不知道自己学到了什么可以不使用st...

9得票2回答
当处理器尝试访问不存在的物理地址时会发生什么?

想象一台32位x86计算机,内存不到3GB,CPU设置为禁用分页和平面段描述符(基地址为0x0,数据和代码的有效限制均为0xffffffff)。 当ring0中的指令尝试使用mov指令引用未被任何内存地址支持的物理地址时会发生什么? QEMU仿真会出现错误,如“fatal: Trying ...

7得票1回答
使引导加载程序可以加载USB的第二个扇区。

我正在学习汇编语言。我写了一个简单的引导程序。在测试后,它没有起作用。以下是我的代码: [bits 16] [org 0x7c00] jmp start data: wolf_wel_msg db 'Welcome to Bootloader!!!',0x0D,0x0A,0 wolf_k...

19得票6回答
创建自定义操作系统的障碍

在我看来,程序员(特别是计算机科学毕业生)最常尝试着去完成的过于雄心勃勃的项目是构建自己的操作系统。(尝试创建自己的编程语言+编译器可能更为普遍,但远没有这么雄心勃勃。) 对于那些像我一样愚蠢地尝试的人:除了纯粹的规模以外,在从头开始创建你自己的操作系统时,你遇到的最大陷阱或意料之外的障碍是...