osdev

    2热度

    1回答

    我正在使用rdtscp指令读取ecx寄存器以检测cpu和numa节点ID(我正在开发OS)。 的代码如下所示 inline static long get(unsigned char *node_id = 0, unsigned char *cpu_id = 0) { unsigned int p; __asm__ __volatile__("rdtscp\n" : "=c"

    0热度

    1回答

    有什么影响?内核是用静态库编译还是内在实现? 此外,根据this,内核代码不能使用任何浮点操作。这是为什么?

    -1热度

    3回答

    我正在构建一个32位操作系统的程序集。 我已经安装了IDT,并通过int指令处理程序interruptus。 如何启用syscall和sysenter指令,以及如何处理它们/返回? 确实syscall指令在英特尔处理器32位中不受支持,因此我无法使用它? 是不是说sysret指令不安全? 做某处存在一个教程吗? 编辑:我的主要问题是如何启用syscall和sysenter说明! (没有重复)

    1热度

    1回答

    我收到此消息如何安装modprobe?我已经使用apt-get安装了kmod。我正在使用Debian 8.谢谢。

    1热度

    1回答

    我正在Rust中编写一个操作系统,需要直接调用我计算的虚拟地址(类型为u32)。我认为这是相对简单的: let code = virtual_address as (extern "C" fn()); (code)(); 但是,这抱怨演员是非原始的。这表明我使用了From特质,但我不明白这可能会有什么帮助(虽然我对Rust比较新,所以可能会漏掉一些东西)。 error[E0605]: non

    -3热度

    1回答

    那么,我试图找到一个汇编指令,将整个指令移动到一个特定地址(与指令大小无关)。如果没有这样的指令,有没有人可以给我一些关于如何在没有系统调用或其他软件的情况下实现多线程的想法?换句话说,让我们假设我正在创建自己的操作系统,如何使用汇编中的高效代码启用多线程?

    0热度

    1回答

    我正在制作一个操作系统,我被困在GDT中。我尝试过不同的教程,例如http://www.osdever.net/bkerndev/Docs/gdt.htm和http://www.jamesmolloy.co.uk/tutorial_html/4.-The%20GDT%20and%20IDT.html,但是我的操作系统总是崩溃。我怎样才能解决这个问题?我使用grub,所以内核已经处于保护模式。 bo

    2热度

    1回答

    当我尝试编译C代码,其中包括另一C头我得到这个错误以前声明: x86_64-uefi/../../libk/string.h:9:10: error: function declared 'ms_abi' here was previously declared without calling convention KABI int memcmp(const void *d1, co

    2热度

    1回答

    这就是问题所在: 当我用C链接到我的脚本,使用LD,当我产生ELF32-I386文件在LD输出格式,把它作为OUTPUT_FORMAT()在ld脚本中,我没有任何错误,但是如果我尝试放入这最后一个OUTPUT_FORMAT()“二进制文件”或尝试输出带.bin扩展名的文件,我会得到如下错误的混合: kernel.o: In function `k_main': kernel.c:(.text+0

    -1热度

    1回答

    我正在编写一个OS程序集(引导程序和内核),我正在使用QEMU调试它。 我想设置一些调试断点来暂停执行,并在执行时只执行一条指令(单步)。我还想在运行时读取和设置寄存器和内存内容。我读到了这样做的一个方法是使用GDB。问题是我在搜索它之前和之后没有使用过GDB我意识到GDB在目标文件中使用由C编译器(gcc)调用的标签,不是吗?但正如我所说我正在汇编(使用NASM),我有一个纯粹的原始二进制文件,