我需要为我的操作系统换行,因为每次键入时命令行都需要换行,但我不知道如何操作。 我考虑过只做一堆空格,但这会使下一行间隔得太远。 ...
我需要为我的操作系统换行,因为每次键入时命令行都需要换行,但我不知道如何操作。 我考虑过只做一堆空格,但这会使下一行间隔得太远。 ...
我在 C 中写了一个 kernel,我刚刚在打印 function 上做了一些工作。但问题是它会打印一个作为字符串传递到变量中的参数,而不是直接给定的字符串。char str[] = "foo"; print(str); //works properly print("bar"); //d ...
我正在 AArch64 model 下的 ARM(针对 Raspberry Pi 3b+)编写一个业余操作系统。 在启动过程的早期,我们正在设置堆栈指针以准备跳转到我们的kernel_main function。执行似乎 go很好但是当在 QEMU 下使用 GDB 进行调试时,调试器会在我加载时跳过 ...
我目前正在使用 NASM 构建一个(非常简单的)操作系统。 我正在尝试编写一个程序集 function,它将从作为 function 参数给出的地址读取一个字节,然后返回数据,如下所示:// kernel.c extern int readbyte(); int main(void) { i ...
在我开始之前,我知道可能有与我类似的问题,但我没有看到任何问题可以回答我的问题。 如果你真的认为你看到了一个回答我问题的人,我恭敬地请你在结束我的回答之前在评论中告诉我。 谢谢你。 你好! 我有一个问题 - 在过去的几个小时里,我一直在尝试在我的 C 内核中进行物理内存管理。 C 内核在保护模式 ...
一段时间以来,我一直在用 Rust 从头开始编写内核,并从 8 月开始开源它,同时试图修复一些与 AHCI 驱动程序写入尝试相关的问题。 我似乎根本找不到解决方案的一个问题是: IDT 的长度应该只有 256 个条目。 因此,为什么在条目 302 处需要一个处理函数,它比合法可能的 IDT 条 ...
我正在使用POSIX-UEFI为我的自定义操作系统在UEFI环境中编写一个小引导加载程序。 当尝试使用GetMemoryMap引导服务获取内存映射以计算内存量时,它不仅在每次执行程序时返回不同数量的内存描述符,而且描述符表本身似乎已损坏或其他东西...... 这是获取内存映射的代码: 我也尝试使用s ...
我正在编写一个爱好操作系统。 目前我正在努力向上滚动帧缓冲区。 它只是一个 32 位线性帧缓冲区。 我可以使用一些可能有用的工具: 来自 libc 的一些 mem* 函数: memset 、 memcpy 、 memmove和memcmp 直接访问帧缓冲区所述帧缓冲区的宽度、高度和大小(以字节为单 ...
在我开始之前:不,这个问题不是这个问题的重复。 你好。 我一直在做很多操作系统开发,最近遇到了一个大问题。 当我在 C ( asm volatile ("sti") ) 中执行指令 sti 时,QEMU 三重故障并重新启动。 我做了很多故障排除,但我不知道为什么。 你能帮帮我吗? 这是代码: 主要内 ...
我正在使用 Bochs 并尝试使用 Assembly 和 C 开发一个简单的操作系统。 我选择使用 24bpp 的 1024x768,但我无法写入大部分屏幕,因为 0xa0000 到 0xaffff 没有足够的空间(只有 64 KB)。 我正在尝试将像素写入屏幕,但正如我所说,几乎没有任何内容被写入 ...
我在 QEMU 无法从 memory 正确加载我的 kernel 时遇到问题。 我已经在这个问题上停留了一天多了,我找不到问题的根源。 经过大量调试和研究,我认为问题可能出在 GDT 上。 虽然,当我测试我的 kernel 的最后一个工作版本时,当我包含多个 header 文件时,它也会出现同样的错 ...
我的 i386 kernel 中有一个工作初始页面 map 设置和异常处理程序,大部分情况下一切都进行得很顺利,但是在测试页面错误条件时我注意到访问页面 0 中的任何地方都不会触发页面错误,即使该页面未映射并且“存在”位已清除。 这很奇怪,因为访问任何其他未映射的页面确实会产生预期的页面错误,而不是 ...
我正在开发一个针对 ARM 架构的操作系统,更具体地说,是一个 RaspberryPi 4B。 为此,我已经设法使用“邮箱属性界面”在屏幕上绘制了一些形状。 出于好奇,我想知道是否可以使用 OpenGL(或 OpenGL ES,最好)来渲染未来更复杂的图形。 如果可能,我该怎么做? ...
我正在编写一个操作系统。 我想使用__attribute__((interrupt))来做一些中断支持(我从PonchoOS复制了一堆代码来启动)。但是,只有 Page Fault Detected 和 Double Fault Detected 有效,其他中断不起作用(例如键盘和计时器)。 这是 ...
我正在尝试使用多重引导制作一个简单的 kernel。 我得到了在 NASM 中工作的 multiboot header,但现在我正试图用 GNU AS 语法重写它。 我认为问题是 clang ( as在 MacOS 上)将多重引导 header 放置在不同的地址(超过 8K),但我不知道如何让它与 ...
我正在做一些操作系统开发,并想重组我的源代码存储库,如下所示。 如您所见,我使用 makefile 构建整个东西。 现在出现了奇怪的部分:在文件vga.h和vga.c中有一个 function putstring(size_t posx, size_t posy, const char *str) ...
我正在尝试使用 KVM 将处理器启动到长模式。 我已经能够设置基于这个 lwn 示例派生和构建的小型 KVM 管理程序。 现在,我正在尝试将处理器启动到长模式。 到目前为止,我遵循的顺序是。 使用 KVM,将第一个 eip 初始化为 0x1000,我的代码从这里开始,而不是重置 state。 加载 ...
我以前遇到过这种情况并解决了一段时间,但现在它慢慢变得越来越不可避免,因为现在我需要它们。 由于某些奇怪的原因,当我尝试在我的代码中使用全局变量时,我的 kernel 崩溃了。 这有效: 这不起作用: 我不知道为什么会这样。 由于这里的一些额外资源是我的 linker 脚本: 和我的 makefil ...
我进行了广泛搜索,但找不到我正在寻找的答案,我的问题是我使用outb尝试在我的 64 位操作系统 Z50484C19F1AED39F3D24 中设置我的 VGA 文本模式 cursor 的 position移动。 试图隐藏它也不起作用。 也就是说,我已经尝试预先启用 cursor,但它没有任何改变。 ...
我正在编写我自己的kernel,使用Rust(Loosely基于Phil-Opp的博客, Z5E05E05E56C500A1C4B6AA.71B6AA )用户模式应用程序代码和数据,将裸function映射到虚拟地址0x40000000000,设置堆栈并跳转到代码。 我还有一个使用 syscall/ ...