问题标签 [hobby-os]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1051 浏览

operating-system - 装配 OUTB 功能如何导致三重故障?

在我的系统编程课上,我们正在研究一个小型、简单的爱好操作系统。我个人一直在研究 ATA 硬盘驱动程序。我发现一行代码似乎会导致错误,然后立即重新启动系统。有问题的代码位于我的 IDE 中断中断服务程序的末尾。由于我使用的是 IDE 通道,因此它们是通过从 PIC(通过主 PIC 级联)发送的。最初我的代码只是将中断结束字节发送到从站,但后来我的教授告诉我,我也应该将它发送到主 PIC。

所以这是我的问题,当我取消注释将 EOI 字节发送到主 PIC 的行时,系统会出现三重故障,然后重新启动。同样,如果我留下评论,系统将继续运行。

在没有看到系统的其余部分的情况下,是否有人可以解释这里可能发生的事情?

注意:就像在黑暗中拍摄一样,我用另一个 _outb() 调用替换了 _outb() 调用,这只是确保为 IDE 控制器启用了中断,但是,生成的程序集几乎是相同的。这并没有导致故障。

*_outb() 是 x86 OUTB 指令的包装器。

我将 EOI 发送给主 PIC 的功能有什么特别之处,这是一个问题?

我意识到如果没有看到代码,这可能无法回答,但感谢您的关注!

0 投票
1 回答
656 浏览

x86 - 为什么主 PIC 的中断结束会导致三重故障(重启)?

好的,在学校我们正在开发一个操作系统。我的项目一直是开发一个 ATA 硬盘驱动程序。当我的教授指出我只是向从 PIC 发送中断结束命令而不是主 PIC 时,我认为我的中断服务程序运行良好。

我的问题是,每当我向主 PIC 发送中断结束时,它会导致三重故障,然后导致我的系统重新启动。现在我已经取消/注释了一堆行,似乎每当将中断结束发送到主 PIC 的函数留在代码中时,我都会遇到三重错误。

现在我很确定以下几点:

  1. 进入我的 ISR 时中断被禁用
  2. 我正在正确发送中断结束字节(经过类测试)
  3. 我没有重新确认相同的中断

这引起了巨大的挫败感,所以我希望有人可以在不需要查看我们的代码的情况下给我一些指导。

谢谢!

0 投票
1 回答
984 浏览

filesystems - ext2 目录条目名称是否保证在有效文件系统上以空结尾?

我认为这将是一个简单的问题,但我找不到答案。我主要一直在阅读这些规格:

http://www.nongnu.org/ext2-doc/ext2.html

它似乎没有提到目录条目的名称是否应该以空值结尾。我认为它是未定义的。有一个 name_len 字段,因此无论如何您都可以轻松打印名称。

ext2 目录名称是否保证以空字符结尾?

我问是因为在我的爱好操作系统上测试我的 ext2 驱动程序时,我注意到当我打印一些目录名称时,最后会出现一些垃圾字符。如果我只是打印 name_len 个字符,一切都很好,尽管如果它是空终止的会很好。

谢谢!

0 投票
4 回答
2888 浏览

c - 将 GNU C 库移植到最小的爱好操作系统

所以我有一个没有太多功能的最小操作系统。有一个引导加载程序,它以 32 位保护模式加载基本的 C 内核。如何移植到 C 库中,以便可以使用类似的东西printf?我正在寻找使用 GNU C 库。任何地方都有教程吗?

0 投票
2 回答
3410 浏览

assembly - 在空的虚拟机实例中运行程序集?

如何在空的虚拟机(virtualbox、vmware)实例中运行汇编代码?

我想尝试编写一个简单的引导加载程序。我的目标是为一个爱好操作系统工作。

0 投票
2 回答
3003 浏览

assembly - 一个操作系统在实模式下能有多好?

x86 CPU 有真实模式和非真实模式,与保护模式相反。BIOS 提供了访问硬件的基本驱动程序。操作系统可以使用这些驱动程序吗?

当然 MS-DOS 是那种操作系统,但它也有内存限制问题。

维基百科说操作系统也必须处于实模式才能使用 BIOS 驱动程序,因为 BIOS 是实模式程序。也有系统维护模式,但它是否连接到 BIOS 驱动程序?

基本思想是使用 BIOS 驱动程序来拥有一个极小的操作系统。这当然是一种爱好(拥有自己的小型操作系统只是一个令人兴奋的前景)。

任何人都可以解释这是可能的,也可以访问整个内存吗?

实模式似乎因 CPU 而异,也许最新的处理器为这种模式提供了更多功能。

大多数操作系统都是在保护模式下编写的,因为实模式不能进行多任务处理和分离权限。但对我来说,没有多任务也没有特权是可以的,我说的是爱好操作系统。重要的是重用 BIOS 驱动程序,因为编写驱动程序是 OS 开发中最困难的部分。

如果整个操作系统是基于解释器的,则可以“模拟”多任务处理。

所以总结一下,请从磁盘、图形、内存、CPU资源和整体方面分析编写x86 Real Mode OS的可能性。

0 投票
0 回答
262 浏览

c# - 在 Cosmos 中,如何正确使用插头?

我正在使用 Cosmos 创建自己的操作系统,但我遇到了问题。

我需要关于插头的帮助!到目前为止,我已经设法使用不需要插件的代码编写我的操作系统。但这使我的操作系统非常有限。我什至不能让它显示时间!此外,在我编写的一个名为 Math-Man 的程序中,我几乎无法让它做任何事情。例如,当我编写 Math.Pow... 时,我收到构建错误“遇到本机代码。需要插入。”

我不太明白如何在 Cosmos 中“使用”插件。

如果有人能告诉我如何让 Math.Pow 工作,我非常确定我可以弄清楚如何让其他被破坏的代码(比如获得时间和东西的代码位)也能工作。

0 投票
1 回答
1016 浏览

audio - 如何使用直接写入模式为爱好 OS 编写简单的 Soundblaster 16 驱动程序?

我正在开发一个 32 位、保护模式的爱好操作系统。目前,我正在寻找添加简单的声音支持。为此,我希望使用 Sound blaster 16 并使用直接模式写入 DAC(我想不惜一切代价避免 DMA)。但是,当我向 DAC 输出一个简单的方波(使用命令 0x10)时,我的计算机扬声器没有声音输出。我正在寻找解决这个问题的方法。

我正在尝试使用以下算法来产生声音:

这是我的代码:

rtc_write 将 rtc 频率设置为几百赫兹,而 rct_read 使程序在 rtc 上等待(这两个程序都可以正常工作)。dsp_reset 也可以正常工作,因为从 DSP 读取输出时,会返回 0xAA(这表明存在 soundblaster 16)。

目前我正在使用 Windows 10 64 位来运行模拟操作系统的 Qemu。我正在运行带有“-soundhw all”选项集的 qemu。我不确定是否因为我编写的代码而无法听到声音,或者 Qemu 是否有问题。我的问题是,问题可能是什么,我可以采取哪些步骤来解决这个问题?此外,与 sb 16 相关的文档和教程将不胜感激。