小華的部落格: Memory Access

搜尋此網誌

網頁

星期二, 7月 27, 2010

Memory Access

前陣子在幫同事看一個BUG,他的問題是由 ASL code 透過我們BIOS端的所提供的 ACPI NVS buffer傳遞資料,然後在SMI callback的Function內我們透過一個Data structure指標去存取資料,但是位址會偏移兩個Byte.

他原來的Data Structure定義如下:
UINT16;
UINT32;
UINT8;

當他存取UINT8欄位時,資料位址卻偏移了!

後來發現,OS的ASL code內在存取記憶體時是Byte為單位,也就是有做過記憶體對齊!
因此,在我們EFI code內,我們就必須透過 #pragma pack(1) 來做相對應的事情,不然你在存取記憶體內容時會讀到錯誤的值。


2 則留言:

talee16 提到...

小华,不知道你有没有在OS使用AcpiNvs,和BIOSSW SMI 沟通的范例和指南?

我手上有P公司的UEFI bios code

talee16 提到...

小华,不知道你有没有在OS使用AcpiNvs,和BIOSSW SMI 沟通的范例和指南?

我手上有P公司的UEFI bios code