osdev

    6熱度

    1回答

    我正在研究一個小操作系統,它將爲每個進程使用單獨的本地描述符表。我知道我需要使用lldt指令從我的GDT加載LDT段。我已經使用有效的GDT在保護模式下運行我的內核,但我無法弄清楚我的LDT的GDT條目應該是什麼樣子。我知道它的基地址應該指向我的LDT,但我不知道特權級別和其他屬性應該是什麼。下面是表示我的GDT內的LDT條目的NASM代碼: localTable equ $-gdt ; GD

    3熱度

    3回答

    我正在用C++開發一個內核。但我不想寫一個stdlib;爲此我已經下載STLporthttp://www.stlport.org/,但我不知道如何安裝和使用它。 我正在使用Linux構建我的內核。 如何在我的內核中使用C++標準庫? 而且我不想從STLport中移植所有庫。我如何排除選擇的庫?像std::string,std::vector等

    10熱度

    2回答

    我正在編寫一個小的操作系統,它將在用戶模式下執行一些代碼(特權級別3)。從該用戶級別的代碼中,我想調用一個打印消息的操作系統的中斷。現在我並不關心我的中斷處理程序如何接受參數或類似的東西,我真的只想讓一箇中斷處理程序通知我(用戶)代碼已經執行。 我的問題是:如何在用戶模式下運行代碼?我有一個函數用代碼段和數據段(都具有用戶模式特權)設置本地描述符表。我不明白的是我應該如何將這些段加載到cs,ss和

    4熱度

    1回答

    我目前正在開發一個業餘操作系統,特別是ATA驅動程序。我遇到了一些PIO數據輸入命令與中斷問題。我正嘗試執行READ MULTIPLE命令,以便逐塊讀取驅動器中的多個扇區,併爲每個塊啓動中斷。 如果我請求讀取4個塊(每塊1個扇區)。我期望得到4箇中斷,每個數據塊一箇中斷。在收到第四個中斷後,我可以確定我已經傳輸了所有數據並相應地更新了我的請求結構。但是,在VirtualBox中,我發現在最後一個數

    1熱度

    2回答

    我正在使用Atom-32位板(AT & T組件),此主板上還沒有軟件。 我需要構建GDT來構建/使用IDT嗎? 這個想法只是使用帶APIC定時器的ISR。 /*Change the address of idt_entries table */ fill_interrupt(ISR_Nbr,(unsigned int) isr33, 0x08, 0x8E); static void fil

    0熱度

    1回答

    我有一個文件叫做idt.c,在這個文件中,我需要從彙編中調用函數idt_load。現在,這將工作得很好,除了我需要訪問變量,idtp從程序集文件,變量聲明在idt.c 這不會工作,因爲鏈接器會告訴我,要麼idt_load未定義或idtp未定義。我怎樣才能使這個工作? idt.c的相關部分 struct idt_entry { unsigned short base_lo; u

    4熱度

    1回答

    最近我試圖弄清楚引導程序如何工作。 我在nasm彙編程序中編寫我的加載程序,並用bochs和軟盤映像進行測試。 第1階段和第2階段的已編譯二進制文件通過複製加入到一個圖像中。 這張圖片就像我想要的一樣。 512Bytes stage1代碼(包含magicnumber,它加載得很好)以及第二扇區中的512階段2代碼。 但我認爲我的問題是將該部門加載到內存中並跳入內存中。我的代碼有問題嗎? Stage

    2熱度

    1回答

    我需要在啓動時分配一些內存。我需要它的物理地址,而不是虛擬地址。另外,我不希望它來自DMA區域,那不是我的目的。 我試過alloc_bootmem(),alloc_bootmem_pages()但他們返回虛擬地址。 我也看着alloc_low_page()...沒有按預期工作。 事情是,我需要某種RAM中的保留區域..不必由內核映射..我將嘗試自己管理該區域。我需要在每次啓動時都使用相同的物理區域

    5熱度

    1回答

    我正在爲我的業餘操作系統開發CPU檢測和一般環境檢測代碼。是否曾經有過多次需要調用CPUID的情況?這就是說,如果系統有多個內核,操作系統是否需要在每個內核上調用CPUID? NUMA相同。 這兩個AMD和Intel CPUID手冊目前尚不清楚。有一篇關於osdev wiki的文章,提到調用CPUID爲Detecting CPU Topology,但我的閱讀不清楚CPUID需要被調用的時間和次數。

    3熱度

    2回答

    我正在寫一個運行在保護模式下的小型操作系統。我來到了我想要加載自定義中斷描述符表的地方,我不知道從哪裏開始。我已閱讀the OS Dev wiki上的一些內容,但有幾個問題需要我解答。 在OS Dev wiki上,它說the first 32 (0-31) interrupts are reserved and used by the CPU, as exceptions, so don't us