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),我有一個純粹的原始二進制文件,