[英]Change BIOS settings using the C language
我想知道是否有任何方法可以編寫C程序來更改RAM和GFX卡之間共享的內存量,或者一般如何聯系BIOS設置?
您可以通過I / O端口70h和71h訪問BIOS設置。 (有些芯片組還有72/73或類似的擴展CMOS。)
你用的是什么操作系統? 如果您運行的是Windows,則無法直接從應用程序執行端口I / O,您必須編寫內核模式驅動程序,或使用WinIO等第三方工具包。 在Linux下,您可以使用/ dev / nvram來獲取CMOS設置。 (假設Linux nvram驅動程序支持您的芯片組。否則使用/ dev / port。)
一旦獲得CMOS位,下一個任務就是確定CMOS中的哪個位置對應於視頻存儲器設置。
這是一個(可悲的是不完整的)CMOS內存位置圖: http : //ivs.cs.uni-magdeburg.de/~zbrog/asm/cmos.html
CMOS位置的地圖非常特定於主板,BIOS和BIOS rev。 (當添加/刪除新的菜單選項時,CMOS映射可以在BIOS轉速之間切換。)也許您的主板供應商可以為您提供CMOS映射。 他們有生成這種地圖的工具(它是BIOS編譯過程的一部分),但他們可能不願意分享它。
如果沒有映射,還有其他方法可以確定CMOS中的哪些位代表視頻內存大小。 嘗試轉儲具有各種內存大小的CMOS設置,並找出哪些位發生變化。
其他一些細節:
除了一些“標准”CMOS位之外,其中大多數都是非常依賴平台的,我希望你不打算用它來制作一個通用的應用程序。
CMOS中的某些偏移處有校驗和。 更改CMOS值后,您必須修復校驗和以反映更改。
更改設置后,它將不會生效到下次重新啟動(當BIOS讀取CMOS設置並初始化芯片組時)。
這是英特爾芯片組嗎? 英特爾圖形核心具有稱為動態視頻內存技術(DVMT)的神奇功能,可根據運行應用程序的圖形密集程度調整視頻內存使用量。 http://www.intel.com/support/graphics/sb/cs-010488.htm我不確定其他芯片組供應商是否有類似的技術。
在現代UEFI系統上拋出所有這些,這通常使用BIOS閃存芯片中的非易失性存儲分區進行設置。 (在UEFI系統上填充了一些CMOS位置以實現傳統兼容性。)
簡答:不。
答案很長:不要亂用用戶的BIOS。 這就是為什么沒有API或類似的原因。 我的電腦,我的設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.