Archive for the BIOS Category

Note: new version DumpSMBIOS for Win7/Win8 , use GetSystemFirmwareTable() API

Posted in BIOS, SMBIOS with tags , on 2014 年 12 月 28 日 by Kun-Yi

多年前, 我剛開始學習BIOS 的相關資訊時, 曾經寫過一個DumpSMBIOS, 程式基本是建立在Legacy BIOS 下面的設定, 所以是從 0xE000 ~ 0xF000 Segments 中去查找相關資訊,

最近因為工作需求, 需要讀取SMBIOS Table 內的相關資訊, 而執行環境又限定在Win7 跟Win 8之上, 所以採用了 GetSystemFirmwareTable() 去讀取, 因為如果是XP SP2 (32bits) 則只能透過WMI介面去讀取了

而GetSystemFiremwareTable MSDN 沒有太多的資訊說明(要自己看memory dump資料判斷), 所以寫了一個測試用的code 放在 github 上, 有需要的人歡迎自取! 基本上是把之前寫的code 稍微改一下就可以用了, 主要是增加 Unicode 的支援, 跟為了相容 VC2013 的型態檢查

下面的資訊是程式在 Win7 32bit/VisualBox 4.3 執行的結果, 也在實機上測試過 Win7/Win8 執行 x64

———————————————————————————————————————————————————–

We need prepare 457 bytes for recevie SMBIOS/DMI Table
SMBIOS version:2.5
DMI Revision:25
Total length: 449
DMI at address aa390
-=======================================================-
========== BIOS information ==========
Vendor: innotek GmbH
Version: VirtualBox
BIOS Starting Segment: 0xE000
Release Date: 12/01/2006
Image Size: 128K
-=======================================================-
========== System information ==========
Manufacturer: innotek GmbH
Product Name: VirtualBox
Version: 1.2
Serial Number: 0
UUID: 0A04CA8F-8B0E-45BD-AB29-F975CACECE29
SKU Number: Null String
Family: Virtual Machine
-=======================================================-
========== Base Board information ==========
Length: 0xF
Manufacturer: Oracle Corporation
Product Name: VirtualBox
Version: 1.2
Serial Number: 0
Asset Tag Number: Null String
Location in Chassis: Null String
-=======================================================-
========== System Enclosure information ==========
Length: 0xD
Manufacturer: Oracle Corporation
Version: Null String
Serial Number: Null String
Asset Tag Number: Null String
-=======================================================-
========== OEM String ==========
OEM String: vboxRev_96996
-=======================================================-
========== BIOS information ==========
Vendor: Null String
Version:
BIOS Starting Segment: 0x6E00
Release Date: i
Image Size: 14080K
System BIOS version: 0.9
EC Firmware version: 0.0

Note: Phoenix & AMI UEFI Bootloader location

Posted in BIOS, EFI/UEFI with tags , on 2012 年 03 月 27 日 by Kun-Yi

在 Phonenix 的 SCT 2.x 中, 會去找 remove device 下的 \EFI\BOOT\Boot(Machine).efi

而 AMI 的Aptio 則是透過 Create a Boot Optional 去指定 Path, Filename

Phoenix 中的 (Machine) 目前已知有 IA32/IA64/IPF , 實際上可以透過 BootManager\Dxe\(Machine)\FileName.H 去 modify Path & Filename

Bookmark: EDK2 with VirtualBox

Posted in BIOS, EFI/UEFI on 2012 年 02 月 23 日 by Kun-Yi

VirtualBox 的codebase 中有一個EDK II 相容的 pakcage, 可以用來產生 支援 VirtualBox 的 EFI Boot Firmware (VBoxEFI32.fd or VBoxEFI64.fd)

詳細說明可以看 該package 的 readme (update: https://www.virtualbox.org/browser/vbox/trunk/src/VBox?order=name#Devices/EFI/Firmware)

等於除了 NT32/DUET 外的又多了另一個可以用來學習的環境!

Note: ACPI 5.0 introduction Hardware-reduced ACPI

Posted in ACPI, ARM, BIOS on 2011 年 12 月 13 日 by Kun-Yi

ACPI 從 5.0 開始支援非 x86 系統, 如現在最熱門的ARM, 為此他必須移除本來x86系統下由Intel 主導的HW相關設計, 如原本的ACPI Controller 的 GPE 區塊, ACPI 規範稱此為 Hardward-reduced ACPI, 可以看出這是Microsoft為了讓 Windows 8 可以跨x86 & ARM 兩種不同平台的努力(由規格中的提案人可得知, MSFT-0001 HW-reduced ACPI, 另外可以該提案後的影響章節直接快速定位到想要了解的部分)

下面是 3.11.1的內容

ACPI offers an alternative platform interface model that removes ACPI hardware requirements for platforms that do not implement the PC Architecture. In the Hardware-reduced ACPI model, the Fixed hardware interface requirements of Chapter 4 are removed, and Generic hardware interfaces are used instead. This provides the level of flexibility needed to innovate and differentiate in low-power hardware designs while enabling support by multiple Operating Systems.

  • UEFI firmware interface for boot (Legacy BIOS is not supported).
  • Boot in ACPI mode only (ACPI Enable, ACPI Disable, SMI_CMD and Legacy mode are not
    supported)
  • No hardware resource sharing between OSPM and other asynchronous operating environments, such as UEFI Runtime Services or System Management Mode. (The Global Lock is not supported)
  • No dependence on OS-support for maintaining cache coherency across processor sleep states (Bus Master Reload and Arbiter Disable are not supported)

由上可以看出 UEFI + ACPI mode only 可以看出已經拋棄x86 PC 相容的包袱(沒有LegacyBIOS ACPI 必須在 E/F Segement的要求, ARM 本身也沒有 SMI的設計),  沒有SM/Runtime Services 主要應該MSFT不想要系統中還有一個可以讓 OS有不知不覺的管理層, 這樣對MSFT來說增加了被Rookit的風險, 最後應該可以有更理想的電源管理方式

Hardward-reduced ACPI 主要影響的章節

  • 3.11.x,
  • 4, 4.1.x, 4.3.7,
  • 5.2.9, 5.2.9.1,
  • 6.4.2.1, 6.4.3.6,
  • 7.2.11, 7.3.4,
  • 9.6,
  • 12, 12.1, 12.6, 12.11, 12.11.1,
  • 15, 15.1.x, 15.3, 15.3.1.x,
  • 18.5.55, 18.5.57

Note: Phoenix SCT 2, Setup build environment

Posted in BIOS on 2011 年 10 月 06 日 by Kun-Yi

Need the following components, suggest Host use x86 OS

  • VC2008 SP1 Redistrbutation package
  • .NET Framework v3.5 Sp1
  • Install .NET Framework v4
  • Install Windows SDK v7.1 to get VC2010
  • Install VC2010 Sp1 for Windows SDK v7.1
  • Run Windows SDK v7.1 Command Prompt
  • Run SetEnv.exe /RELEASE /X86 /XP
  • SET VCINSTALLDIR=C:\Program Files\Microsoft Visual Studio 10.0\VC

Note: About Integrated USB Device & System Fund 0200 WHQL item

Posted in ACPI, BIOS, WHQL on 2011 年 09 月 22 日 by Kun-Yi

Win7 有個測試項目 Single computer Display Object item (SystemFund-0200) , 專門測試系統內建的周邊是否有正確報告. 整合式的周邊因為不能被使用者任意移除所以不會出現在 Device & Printer 的ICON 列表中, 或者是出現在可以安全移除的裝置中!

一般BIOS 工程師會遇到的是 SATA & USB port, SATA 會有對應的控制 bit  可以設定, USB  則要透過 ACPI 去宣告 port 的屬性

Microsoft 已經提供有下列一些文件解釋

要補註的是 ACPI Spec. 應該要參考 4.x (Page 362 at 4.0a), 主要差異在於3.x中提到的 Integrated HUB 的Device Object 已經移除, 如果ASL code中有這一層, 實際上測試是錯誤的
非正式的做法是 _UPC 傳回的是 unconnectable
目前正式做法就是同時透過 _UPC & _PLD 宣告成 connectable, 與 invisiable, Microsoft 有提供下圖的流程解釋
Ref: Container IDs Generated from a Bus-Specific Unique ID

Note: Disable builtin HDMI Audio codec of Oaktrail Platfrom

Posted in BIOS on 2011 年 09 月 21 日 by Kun-Yi

Just set bit 22 of LPE Shim register(the regsiter at 0xFFAE8000 in MMIO spaces)

update: should after fill codec verb table.