9得票1回答
在64位模式下,使用MOV指令将SS设置为0x0000会导致#GP(0)故障吗?

这个问题是受到 r/osdev Reddit问题的启发,不同之处在于这个问题集中在SS寄存器上。有人可能会说RTFM(MOV的ISA入口),但当这个问题出现时,即使在操作系统开发人员中也可能得到不同的答案。 问题: 在64位模式下,使用MOV指令将SS设置为0x0000会导致通用保护故障...

17得票2回答
传统 BIOS 引导程序可引导第二阶段的实模式代码

我正在编写自己的操作系统。到目前为止,我的代码已经超过了512字节,这太大了,无法适应简单的引导扇区。 我知道现在必须编写一个引导程序来读取任意长度的代码,可能大于单个512字节扇区。 引导程序需要: 作为启动记录,在磁盘签名0xaa55下运行。 从LBA 1(LBA 0是引导扇区)开...

14得票2回答
使用iret切换到用户模式

我正在编写一个小型操作系统,将在用户模式(特权级别3)下执行一些代码。从该用户级别的代码中,我想调用一个中断返回到操作系统并打印消息。目前,我并不真正关心我的中断处理程序如何获取参数之类的信息,我只是想要一个中断处理程序来通知我(用户)代码已经执行。 我的问题是:如何在用户模式下运行代码?我...

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

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

14得票3回答
更改BIOS代码/刷新BIOS

我花费了很多时间开发操作系统并在低级别引导加载程序上工作。但现在我想在不离开低级环境的情况下,花些时间做一些与安全相关的事情。 所以我选择构建自己的标准密码实用程序,遵循预启动身份验证方案。由于我希望软件至少有一点可移植性,因此我希望它尽可能少地使用外部支持。我认为如果我在运行真实模式OS内...

32得票6回答
LibC操作系统存在吗?

我记得听说过一种可以嵌入的操作系统,它本质上只是libc(也许它支持c ++)。它没有内核、管道或其他你从操作系统中期望的东西。我试图在维基百科上查找,但我没有看到它被列出。 这样的操作系统存在吗?是否有一种操作系统支持仅终端或C/C++ + (tcp)套接字以与VM之外的环境进行通信?对我...

9得票2回答
设置中断请求映射

我正在学习一些教程和参考资料,试图设置我的内核。在一个教程中,我遇到了一些不熟悉的代码,而且教程并没有解释它。我被告知这段代码将 16个IRQ(0-15)映射到ISR位置32-47: void irq_remap(void) { outportb(0x20, 0x11); o...

7得票1回答
高半部分内核初始化

在初始化内核时,有几件事情需要发生:1)需要开启分页机制,2)物理内存管理器需要解析来自grub的内存映射,3)各种启动代码需要访问数据以便于后续使用(例如GDT、IDT、内存管理结构)。 这些步骤之间的依赖关系让我感到很烦恼。在高半部分内核中,内核在其虚拟地址处链接,因此我想出的选项包括:...

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

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

12得票2回答
使GRUB自动从内核引导系统

我正在开发一个操作系统的内核。为了执行它,我决定使用GRUB。目前,我已经将一个脚本和GRUB的stage1、stage2、一个pad文件以及内核组合在一起,使其可启动。唯一的问题是,当我运行它时,你必须手动告诉GRUB内核在哪里以及它有多大,然后才能启动它,像这样: kernel 200+...