Windows内核HAL相关学习
1 硬件抽象層HAL
硬件抽象層是系統(tǒng)可移植的關(guān)鍵。HAL是一個可加載的,內(nèi)模式模塊提供了windows當前運行平臺的低層接口。它隱藏了與
硬件相關(guān)的細節(jié),如I/O接口,中斷控制器,以及多處理器通信機制等,體系結(jié)構(gòu)或者機器相關(guān)的功能。
windows內(nèi)部組件以及用戶編寫的設(shè)備驅(qū)動并不直接訪問硬件,當它們需要獲得與平臺相關(guān)的信息時,它們可以通過調(diào)用
HAL例程來保存可移植性。DDK中能找到很多有關(guān)HAL在驅(qū)動中的用法。(DDK,驅(qū)動開發(fā)包)
雖然windows帶了幾個HAL,但是安裝時只能有一個被選中,并且copy到系統(tǒng)磁盤,其文件名為hal.dll。
2 Win7系統(tǒng)提示“hal.dll損壞或丟失”導(dǎo)致windows無法啟動的解決
? ? win7系統(tǒng)電腦經(jīng)常彈出提示“hal.dll損壞或丟失”導(dǎo)致windows無法啟動。
? ? 導(dǎo)致win7 64位系統(tǒng)提示“hal.dll損壞或丟失”的原因有很多種。
故障原因:
a GHOST系統(tǒng)引起,GHOST原封裝的系統(tǒng)文件與品牌主機分區(qū)類型不一起引起(品牌電腦大多數(shù)有隱藏分區(qū));
b 偶然的系統(tǒng)非正常關(guān)機后,開機就無法啟動,使用系統(tǒng)修復(fù)盤修復(fù)提示system32\\hal.dll這個文件損壞或丟失;
c 超頻也可能導(dǎo)致系統(tǒng)文件損壞,提示system32\\hal.dll損壞或丟失;
? ? d 是內(nèi)存的故障,把內(nèi)存條拔下來擦下金手指上的污垢,檢查下是否插緊再試試,或者找一條確保正常的內(nèi)存條安裝
上先測試下,排除到底是不是內(nèi)存條的問題;
解決方法:
a 無法啟動提示hal.dll損壞或丟失,實際上可能該文件并不一定說在系統(tǒng)中不存在,而按照系統(tǒng)提示要求,拷個一個
hal.dll文件到system32里,根本是不可以解決的;
? ? b 出現(xiàn)這個錯誤的原因關(guān)鍵是boot.ini文件出錯,導(dǎo)致引導(dǎo)不了電腦從指定的路徑啟動,那樣系統(tǒng)會搜索其他的路徑,
而其他路徑不存在或根本就沒有hal.dll文件,所以就會提示這個錯誤;
? ? c 舉例說明,系統(tǒng)一盤都安裝到C盤,如果C盤根目錄下的boot.ini文件格式不完整非法,系統(tǒng)默認從C:\Windows啟動
,但又由于boot.ini文件格式不完整非法,系統(tǒng)會判定你的Windows XP沒有安裝在C盤,所以系統(tǒng)提示找不到HAL.DLL文件
。導(dǎo)致啟動失敗。解決方法是重新編輯Boot.ini文件;
? ? d 使用DOS啟動盤啟動,進入DOS界面,使用DOS工具EDIT.EXE命令編輯這個文件。啟動EDIT.EXE以后,打開Boot.ini,
以正確的格式編輯Boot.ini文件的內(nèi)容,再保存為Boot.ini文件即可;
? ? e 使用故障恢復(fù)控制臺里面的bootcfg命令。使用WINDOWS故障恢復(fù)控制臺,用fixboot命令修復(fù)boot.ini,若失敗就用
bootcfg /add 來重建boot.ini ;
? ? f 如果對DOS命令界面不感冒,還可以在別的電腦上創(chuàng)建好正確的boot.ini以后,再拷貝到故障電腦的C盤根目錄上覆
蓋源文件即可。
? ? g 怎么COPY呢?還是會用到DOS。你不可能將故障電腦的硬盤拆下來,掛在另外一臺電腦時行COPY吧,最好的方法是從
別的電腦中編輯好boot.ini,用個u盤boot.ini拷貝,再拷一個 hal.dll文件。
? ? h 然后插在故障電腦上,使用啟動盤并加載U盤驅(qū)動支持,進入DOS界面。進入U盤目錄看到hal.dll與boot.ini文件了
吧,然后使用DOS命令
? ? copy hal.dll c:\windows\system32\hal.dll
? ? copy boot.ini c:\
注冊
? ? 打開開始--運行 注冊一下 ? regsvr32 ? hal.dll
3 Windows 內(nèi)核模式 HAL 庫
? ? Windows 在個人計算機的許多不同配置上運行。 每個配置都需要一個在硬件和其余操作系統(tǒng)之間進行交互的軟件層。
由于此層抽象 (隱藏了驅(qū)動程序和操作系統(tǒng)) 低級別硬件詳細信息,因此它被稱為硬件抽象層 (HAL) 。
不鼓勵開發(fā)人員編寫自己的 HAL。 如果需要對硬件進行訪問,HAL 庫將提供可用于此目的的例程。 與 HAL 直接交互的例
程以字母 "HAL" 作為前綴;有關(guān) HAL 例程的列表,
函數(shù) ? ? ? ?描述
HalAllocateCommonBuffer?? ?
HalAssignSlotResources?? ?
HalFreeCommonBuffer?? ?
HalGetAdapter?? ?
HalGetBusData?? ?
HalGetBusDataByOffset?? ?
HalGetDmaAlignmentRequirement?? ?
HalGetInterruptVector?? ?
HalReadDmaCounter?? ?
HalSetBusData?? ?
HalSetBusDataByOffset?? ?
HalTranslateBusAddress
總結(jié)
以上是生活随笔為你收集整理的Windows内核HAL相关学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# mschart 控件的基本使用和图
- 下一篇: Windows 驱动开发头文件wdfch