cost 377 ms
打印 function 不能正常使用直接字符串,但可以使用通过变量传递的字符串? - Print function not working properly with direct string, but works with string passed through variable?

我在 C 中写了一个 kernel,我刚刚在打印 function 上做了一些工作。但问题是它会打印一个作为字符串传递到变量中的参数,而不是直接给定的字符串。char str[] = "foo"; print(str); //works properly print("bar"); //d ...

如何使用位于 0x1000 的内核在 C 和 Assembly 中获取内存数据? - How do you get memory data in C and Assembly with a kernel located at 0x1000?

在我开始之前,我知道可能有与我类似的问题,但我没有看到任何问题可以回答我的问题。 如果你真的认为你看到了一个回答我问题的人,我恭敬地请你在结束我的回答之前在评论中告诉我。 谢谢你。 你好! 我有一个问题 - 在过去的几个小时里,我一直在尝试在我的 C 内核中进行物理内存管理。 C 内核在保护模式 ...

为什么期望索引 302 处的 IDT 条目的 `#NP` 错误甚至是可能的? - Why would a `#NP` fault expecting an IDT entry at index 302 even be possible?

一段时间以来,我一直在用 Rust 从头开始编写内核,并从 8 月开始开源它,同时试图修复一些与 AHCI 驱动程序写入尝试相关的问题。 我似乎根本找不到解决方案的一个问题是: IDT 的长度应该只有 256 个条目。 因此,为什么在条目 302 处需要一个处理函数,它比合法可能的 IDT 条 ...

无法使用 uefi 的 GetMemoryMap 函数获取正确的内存映射 - Can't get the right memory map using uefi's GetMemoryMap function

我正在使用POSIX-UEFI为我的自定义操作系统在UEFI环境中编写一个小引导加载程序。 当尝试使用GetMemoryMap引导服务获取内存映射以计算内存量时,它不仅在每次执行程序时返回不同数量的内存描述符,而且描述符表本身似乎已损坏或其他东西...... 这是获取内存映射的代码: 我也尝试使用s ...

C (OSDev) - 如何有效地将 32 位帧缓冲区的内容向上移动? - C (OSDev) - How could I shift the contents of a 32-bit framebuffer upwards efficiently?

我正在编写一个爱好操作系统。 目前我正在努力向上滚动帧缓冲区。 它只是一个 32 位线性帧缓冲区。 我可以使用一些可能有用的工具: 来自 libc 的一些 mem* 函数: memset 、 memcpy 、 memmove和memcmp 直接访问帧缓冲区所述帧缓冲区的宽度、高度和大小(以字节为单 ...

sti 指令上的 QEMU 三重故障 - QEMU triple faulting on sti instruction

在我开始之前:不,这个问题不是这个问题的重复。 你好。 我一直在做很多操作系统开发,最近遇到了一个大问题。 当我在 C ( asm volatile ("sti") ) 中执行指令 sti 时,QEMU 三重故障并重新启动。 我做了很多故障排除,但我不知道为什么。 你能帮帮我吗? 这是代码: 主要内 ...

如何在汇编中做一个线性帧缓冲区 - How to do a linear frame buffer in assembly

我正在使用 Bochs 并尝试使用 Assembly 和 C 开发一个简单的操作系统。 我选择使用 24bpp 的 1024x768,但我无法写入大部分屏幕,因为 0xa0000 到 0xaffff 没有足够的空间(只有 64 KB)。 我正在尝试将像素写入屏幕,但正如我所说,几乎没有任何内容被写入 ...

加载引导加载程序后自定义 Kernel 故障 - Custom Kernel faulting after loading bootloader

我在 QEMU 无法从 memory 正确加载我的 kernel 时遇到问题。 我已经在这个问题上停留了一天多了,我找不到问题的根源。 经过大量调试和研究,我认为问题可能出在 GDT 上。 虽然,当我测试我的 kernel 的最后一个工作版本时,当我包含多个 header 文件时,它也会出现同样的错 ...

访问不存在的页面 0 不会产生页面错误 - No page fault generated by accesses to non-present page 0

我的 i386 kernel 中有一个工作初始页面 map 设置和异常处理程序,大部分情况下一切都进行得很顺利,但是在测试页面错误条件时我注意到访问页面 0 中的任何地方都不会触发页面错误,即使该页面未映射并且“存在”位已清除。 这很奇怪,因为访问任何其他未映射的页面确实会产生预期的页面错误,而不是 ...

如何在自定义 arm 操作系统中实现 OpenGL API - How to implement the OpenGL API in a custom arm os

我正在开发一个针对 ARM 架构的操作系统,更具体地说,是一个 RaspberryPi 4B。 为此,我已经设法使用“邮箱属性界面”在屏幕上绘制了一些形状。 出于好奇,我想知道是否可以使用 OpenGL(或 OpenGL ES,最好)来渲染未来更复杂的图形。 如果可能,我该怎么做? ...

NASM 和 clang/LLVM 生成不同的 object 文件 - NASM and clang/LLVM generating different object files

我正在尝试使用多重引导制作一个简单的 kernel。 我得到了在 NASM 中工作的 multiboot header,但现在我正试图用 GNU AS 语法重写它。 我认为问题是 clang ( as在 MacOS 上)将多重引导 header 放置在不同的地址(超过 8K),但我不知道如何让它与 ...

makefile 中未定义的引用 - Undefined reference in makefile

我正在做一些操作系统开发,并想重组我的源代码存储库,如下所示。 如您所见,我使用 makefile 构建整个东西。 现在出现了奇怪的部分:在文件vga.h和vga.c中有一个 function putstring(size_t posx, size_t posy, const char *str) ...

在 KVM 中使用 wrmsr 指令的引导代码中出现一般保护错误 - General Protection Fault inside boot code with wrmsr instruction inside KVM

我正在尝试使用 KVM 将处理器启动到长模式。 我已经能够设置基于这个 lwn 示例派生和构建的小型 KVM 管理程序。 现在,我正在尝试将处理器启动到长模式。 到目前为止,我遵循的顺序是。 使用 KVM,将第一个 eip 初始化为 0x1000,我的代码从这里开始,而不是重置 state。 加载 ...

当我使用全局变量时,它会使我的 kernel 崩溃 - When I use global variables it crashes my kernel

我以前遇到过这种情况并解决了一段时间,但现在它慢慢变得越来越不可避免,因为现在我需要它们。 由于某些奇怪的原因,当我尝试在我的代码中使用全局变量时,我的 kernel 崩溃了。 这有效: 这不起作用: 我不知道为什么会这样。 由于这里的一些额外资源是我的 linker 脚本: 和我的 makefil ...

VGA文本模式cursor不移动也不隐藏 - The VGA text mode cursor does not move or hide

我进行了广泛搜索,但找不到我正在寻找的答案,我的问题是我使用outb尝试在我的 64 位操作系统 Z50484C19F1AED39F3D24 中设置我的 VGA 文本模式 cursor 的 position移动。 试图隐藏它也不起作用。 也就是说,我已经尝试预先启用 cursor,但它没有任何改变。 ...

当 CPL=3 时发生硬件中断时,仅设置写入位的 x86-64 页面错误的原因是什么 - What causes x86-64 Page Fault with only the Write bit set when a hardware interrupt happens while CPL=3

我正在编写我自己的kernel,使用Rust(Loosely基于Phil-Opp的博客, Z5E05E05E56C500A1C4B6AA.71B6AA )用户模式应用程序代码和数据,将裸function映射到虚拟地址0x40000000000,设置堆栈并跳转到代码。 我还有一个使用 syscall/ ...


 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM