osdev

    0熱度

    1回答

    如果你曾經用gcc鏈接過內核,你可能知道參數-lgcc。 該參數重要嗎?它有什麼作用 ?

    1熱度

    1回答

    我目前正在編寫一個基本的操作系統作爲一個學習項目。爲此我使用了gcc 4.9.2交叉編譯器。 當試圖使用存儲器映射的I/O I偶然發現C指針(或可能存儲器映射I/O),我無法理解的行爲。 當通過下面的代碼直接訪問I/O存儲器,I得到預期的結果,這是一個「AB」在黑色背景上的淺灰色字體的左上角。 *((uint16_t *)0xB8000) = 0x0741; *((uint16_t *)0xB8

    3熱度

    1回答

    假設我們有一個單一地址空間的操作系統。爲了保持穩定性,我們需要強制用戶應用程序的內存保護,例如禁止使用'不安全'的關鍵字,除非用戶有特殊的能力。 我們的用戶需要有一種方法來安全地從字節流(例如文件)讀取/寫入任意結構。當然,我們正在討論不包含引用的結構(否則我們會鬆散內存安全性)。 現在我試圖實現這種通用讀卡器功能: #![feature(core)] use std::io; use st

    1熱度

    1回答

    我查詢有關設備驅動程序的開發。 如果我想用真實的方式製作玩具的操作系統,但決定寫一個網絡堆棧/套網絡驅動程序,是否有足夠的空間,這樣做呢?我是否需要像DOS那樣做,並切換到保護模式來完成這樣的事情?

    0熱度

    1回答

    如何在程序集(x86,32位保護模式)中實現隊列結構? 將它實現爲堆棧很簡單,但是當從中取出對象時,我必須將每個項目移動一個地方。鏈接列表也是可能的,但它不是非常有效,也不是很快。 我正在開發我自己的操作系統,所以我不能使用OS功能。

    1熱度

    1回答

    我一直認爲,這是不是這樣的,但是,一個FAQ for a tutorial我最近看過意味着它是: 爲什麼多重引導頭?無論如何,GRUB不會載入純粹的ELF文件嗎? GRUB能夠加載多種格式。但是,在本教程中,我們將創建一個兼容Multiboot的內核,該內核可以由任何其他兼容的引導加載程序加載。爲了實現這一點,多引導頭是強制性的。 我試圖立即Google,沒有任何有用的結果。所以:GRUB是否支持

    1熱度

    2回答

    我正在玩OS的發展,我想用我自己的自定義文件系統。問題是,爲了讓我的操作系統進入硬盤,我要在CD上創建一個安裝程序,我希望使用相同的文件系統創建該程序;這將意味着我不必擔心導航CDFS,我將能夠使用與我的操作系統相同的引導加載程序系統來開發安裝程序(這將是一個單一的二進制文件,其中第一個512字節包含代碼以將文件的其餘部分加載到內存中並執行其中包含的代碼)。所以問題是,這可以通過硬盤模擬來實現嗎?

    3熱度

    1回答

    當操作系統枚舉PCI總線時,它會從每個PCI設備收集信息。我的問題是,操作系統在哪裏存儲這些信息?每個操作系統在運行時都有一個64KB陣列在RAM中?

    6熱度

    2回答

    我正在使用isolinux(syslinux 4.5)作爲引導加載程序,使用組織爲0x200000的多引導頭加載我的內核,從事操作系統項目。 據我所知,內核已經處於32位保護模式。我的問題:有沒有更簡單的方法可以訪問BIOS中斷? (基本上我想要0x10:D) 加載後,我的內核設置了自己的GDT和IDT條目,並進一步重映射IRQ。那麼,是否有可能在內核加載並設置VGA/SVGA模式(VBE 2.0

    -3熱度

    1回答

    我用C代碼中發現的this page: uint16_t* terminal_buffer; 是什麼意思?是否與uint16_t *terminal_buffer;相同? 比可變terminal_buffer是accesed像數組: terminal_buffer[index] = make_vgaentry(' ', terminal_color); 有人可以解釋我是如何工作的? 謝謝。