程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> freeldr引導的最後階段

freeldr引導的最後階段

編輯:.NET實例教程
分析環境reactos0.3.1 ]

freeldr簡直就是ntoskrnl的先鋒部隊,他為ntoskrnl做好了充分的環境准備

在freeldr將ntoskrnl.exe,hal.dll和其他相關的引導文件在內存中安置好了以後,freeldr將完成最後的使命,然後將cpu移交給ntoskrnl。

在移交CPU之前由freeldr將分頁機制建立好,也就是說在轉入ntoskrnl執行內核初始化之前,freeldr會先建立好分頁機制,以及將CPU帶入保護模式,看代碼。

位於(srcroot\boot\freeldr\freeldr\arch\i386)目錄的Loader.c文件,該文件中的函數

VOID
NTAPI
FrLdrStartup(ULONG Magic)
{
    /* 關閉中斷*/
    _disable();

    /* Re-initalize EFLAGS */
    Ke386EraseFlags();

    /* 判斷啟動選項是否保護PAE模式 */
    FrLdrGetPaeMode();

    /* 初始化頁目錄*/
    FrLdrSetupPageDirectory();

    /* Initialize Paging, Write-Protection and Load NTOSKRNL */
    FrLdrSetupPae(Magic);
}
 

而同文件中的FrLdrSetupPae(ULONG Magic)函數

則完成將前面設置好的頁表目錄地址寫入CR3寄存器並改變CR0寄存器的控制標志,轉入保護模式,然後進入ntoskrnl的入口函數,進行內核初始化階段。

 今天就看到這裡。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved