bloggerads

2015年12月24日 星期四

x86 spec / Bios 常見術語

[ CPUID ] 
CPUID 是 80486 CPU 新增的一個指令,它的用途在於鑑別 CPU 種類或提供 CPU 特性,讀取方式如下:

void cpuid (DWORD  idx) // idxindex, 不同index得到不同資料
{
    _asm
    {
        mov eax, idx
        cpuid     
    }
    // eax, edx, ecx,...值為CPU相關的資訊
}

Check fingerprint of SSH public key (Linux command)

//
// Check SSH public key fingerprint
//
[root@martin Desktop]# ls /etc/ssh/*key*
/etc/ssh/ssh_host_ecdsa_key      /etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_ecdsa_key.pub  /etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_ed25519_key    /etc/ssh/ssh_host_rsa_key.pub

[root@martin Desktop]# ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub 
2048 99:d1:36:00:44:0a:cb:70:83:c8:21:76:c5:2a:d7:d9   (RSA)   // fingerprint

2015年12月22日 星期二

pscp (putty) : Transfer data between Windows / Linux

Step 1: Install putty, I use pscp command in putty in Windows side (client)


Step 2: Install openssh-server openssh-client in Linux side (server)

sudo apt-get install openssh-server openssh-client

Step 3: Demonstrate a example (The default path in Linux is Home)

# I am in windows (client), trying to copy file e:\MyFile.xxx from / to Linux(server)

My Linux configure --->  IP: 111.111.111.111, 
Admin_Name/Password: MartinLee/8888, 
file at Home/Documents/MyFile.xxx


2015年12月7日 星期一

ACPI: APEI (ACPI Platform Error Interfaces)

ACPI: OS和Bios溝通的介面,APCI定義有3個Runtime元件(ACPI Registers/ACPI Bios/ACPI Tables)



OSPM: 支援ACPI規範的OS
ACPI Bios: 支援ACPI規範的Bios

2015年12月5日 星期六

UEFI : programming notes


UEFI是Intel為了取代傳統的Bios而定義的一個架構並將其open source,而Bios vendor基於Intel release的UEFI原始碼下去增加功能以及維護。晶片廠/系統廠的target則是使用Bios vendor提供微調過的版本來撰寫自己特定功能的DXE driver以及PEI階段晶片的Internal setting, 還有安裝一些特定的SMI handle來處理板子相關的硬體問題。

UEFI一共分成SEC->PEI->DXE->BDS->TSL->RT->AL這幾種階段。
我們會將晶片的一些driving 值寫在PEI stage。DXE階段大部分Bios Vendor都有提供相對應的driver。目前只有碰到為了寫Option Rom或做實驗才針對這個device去寫DXE driver。

焦點回到PEI->DXE這兩個關鍵的階段並列出一些重要的觀念:

1.  在boot時,PEI的階段基本上會有兩條路,一條是正常開機呼叫到的function,另一種則是S3 resume呼叫到的function,而Bios 在S3不做DXE init。因此如果是為了加code來patch 問題,必須知道patch的點

2.  PEI 裡面的程式都是叫做module, PEIM, 這些module有些是有相依性的。PEI和PEI互相溝通的橋梁就是PPI,透過這個interface, (*PeiServices)->LocatePpi(), 可以去呼叫已被安裝的service以及去讀取外部的參數

3.  在PEI到DXE時,會透過HOB, (*PeiServices)->GetHobList去得到由PEI階段pass過來的資料

4. 在x86架構就是使用PCI架構及其定義的三種空間, (CFG space / MMIO / IO space),基本上掌握住這三種空間的access方式,加code就不會太難。在早期legacy Bios + DOS的年代要access就是: MMIO 透過指標,IO及CFG space透過IN/OUT指令就可以完成了。UEFI的架構則最好是透過PEI service/ DXE protocol來做。DXE的部分就是使用 EFI PCI IO PROTOCOL 這個protocol

2015年12月3日 星期四

MSI Capability (0x05) 和 MSIX Capability (0x11)

MSI (Message Signaled Interrupts) :

MSI的優點是透過軟體的方式來產生中斷而非透過HW Interrupt pin,在線路上比較簡單。透過給定MSI Control Register可以依device的能力(bit3:1)決定要使用1,2,4,...,32個中斷(設定6:4),並在所指定的Message Address寫入含有中斷向量資訊的Message就可以完成。



2015年12月1日 星期二

SMBus (System Management Bus)

X86架構下要access SMBus device,可以透過 SMBus Controller (D31:F3)的IO Base address ,Intel定義這個IO位置在PCI configuration space的0x20~0x23


從0x20~0x23得到SMBus IO Base address後,主要是操作下列0~7 offset IO registers就可以完成Byte/Word/Block command的R/W