2014年8月7日 星期四

新手村的BIOS任務 ─ GOP Driver VS vBIOS

vBIOS = video BIOS

是Intel為了影像輸出所包好的一顆binary檔,修改時必須使用到bmp tool,最後在build BIOS image時包進去。因為它是個獨立的檔案,BIOS在讀取的時候並不會知道該如何去呼叫包在裡面的function,在這種情況下就必須靠中斷(INT10)來與之溝通。


  • GOP 與 vBIOS 的簡易比較:
  1. 有 64 KB 的限制
  2. 16 位元執行環境
  3. UEFI 系統韌體需要搭配 CSM。效能表現不如 GOP3
  4. 2位元與 64 位元架構都可以使用 VBIOS。
========================================================================

GOP = Graphic Output Protocol 

在UEFI底下的一支driver,主要的目的是用來取代傳統的legacy vBIOS。

簡而言之,換成UEFI GOP的優點:
  1. 讓系統可以完全UEFI化,不需要CSM,達成快速開機。
  2. GOP空間無限制(64KB),可以放較多的東西在裡面(例如顯示卡開機畫面,甚至一些當地化的語言資料等等)
  3. 在與系統劃分資源時,不於Int10h中斷中繪製畫面(也就是進入OS載入顯卡DRIVER前),而是可以直接讓UEFI韌體顯示更高更漂亮解析度的畫面

  • GOP 與 vBIOS 的簡易比較:
  1. 無 64 KB 的限制
  2. 32 位元保護模式
  3. 不需要 CSM
  4. 速度最佳化
========================================================================



從小華大大的部落格轉過來參考的:

VBIOS若壞,螢幕是黑ㄟ
VBIOS若好,螢幕是彩色ㄟ

一般而言,BIOS會在POST時 locate 3 devices:
- Input device(Ex. Keyboard)
- Output device(Ex. Display device)
- IPL(Initial Program Load, Ex. HDD)

其中的Display device,即 VGA !

在PCI_SCAN之後,BIOS會在記憶體中建立一個data structure,代表整個系統的 PCI architecture.
Ex. Ponter-> NB->P2P->SB->IDE->AUDIO->LAN->USB 2.0->USB 1.1->...->VGA->...->End

在VGA_init的階段,BIOS會去 go-through this list,一個個的問:"有沒有人需要shadow Option ROM的 ?"

-------------------------------
*1 在此,先break,並說明一些觀念:
1. Option ROM是 for H/W的 firmware;像BIOS一樣是包在BIOS image中
2. 有Option ROM的 H/W可能有: VGA card、LAN card, RAID card...etc.
3. VGA's Option ROM 也就是 VBIOS ! 專門處理 screen I/O INT10h)
4. VGA "shadow" 即代表: 將 VBIOS copy 到 shadow RAM, Ex. C0000h~C7FFFh處(32K)
5. VGA init這個階段只 consider "VGA device" ! for 其他 device,之後再考慮其 shadow的事宜
-------------------------------

(承接前面的 flow):此時,VGA device會舉手說:"我要" !此時,BIOS會去尋找VGA device's Option ROM(即VBIOS)在哪裡;此時,VBIOS有可能在card上 or "當初" 被包在 BIOS image中(*2)

一但找到,則會先 作一些 checks:Ex.
  • Option ROM signature is 0xAA55 ?
  • 比較 Option ROM內的 Vendor ID/Device ID = H/W's IDs ?
  • class code and sub-class code correct ?
  • length = 0 ?
  • etc...

若都符合,則視它為 VGA Option ROM(VBIOS) ! 之後,利用 memory2memory copy將之 copy到 shadow memory,從 C0000h處開始存放...

複製完後,再 check "checksum"是否正確;if yes then jump to "entry of initialization code",控制權自此轉移至 VGA Option ROM,由它去做 initialize VGA的工作 ! ( 若是CRT螢幕,user會聽到ㄉ一ㄤ的一聲 ! 即代表 initialize VGA成功 !!! )

←此為 VGA_init的工作 !!!

*2 說"當初"的原因是: VGA BIOS若包在BIOS image中,在 BIOS shadow時,也會被一併 copy到記憶體的某處放著;當然,會記住存放處 !



Ref: 
http://www.dotblogs.com.tw/thkaw/archive/2013/11/14/w8withuefi_gop.aspx
http://biosengineer.blogspot.tw/2007/10/bios-vga-init-10.html

2014年1月19日 星期日

Eason老大開示:IRQ routing 疑問

Q:為何IRQ不一直線到底要拐彎抹角?
A:若配成一直線,只要PCI1在使用PCI2~4的INA也會被Trigger,要停下來等。

  • 像如果單一function的PCI device就只會用到INT#A,就等到天荒地老了。

Eason老大開示:WinXP底下裝置管理員的奇異現象(OS與BIOS不同步)與IRQ編號

舊時代的眼淚還在卡位:

在目前的系統中,仍有些device是legacy的部分,已經沒在使用甚至是不存在系統上。但BIOS仍然有回報給OS,正常情況下不影響系統運作,但是這樣的問題在BIOS設計時必須避免。

EX:在裝置管理員>檢視>資源(依類型)中,可以找到一些舊時代的眼淚:COM1、COM2、LPT1(印表機)都還在,同時也顯示正常運作中,但是實際上我的PC主機板上根本沒有這些port!



IRQ編號在Windows OS底下(有ACPI)

  1. 0~15是獨立的分給舊時代的legacy device
    • 這16個IRQ號碼不重複,僅分配給一個人使用(有點像固定IP)
  2. 16之後則分配給PCI使用
    • 在16之後的IRQ常重複出現,share給很多人,且為動態配置



2014年1月8日 星期三

新手村的BIOS任務 ─ 基本裝置

Super I/O:

  1. 中低速率介面
  2. 包含了2S1P1G1FD連接port:
    • 2S:serial port (COM1、COM2)
    • 1P:parallel port 平行列印埠(用於印表機)
    • 1G:game port
    • 1FD:FDC controller (軟碟機控制)
  3. 後期有紅外線傳輸介面(IR interface),可以選擇占用COM1或2,必須關掉一組serial port。(在開機時期就要先決定好)。
  4. 硬體監控:偵測CPU溫度及工作電壓(in analog format)、散熱風扇馬達轉速。
  5. 有些甚至具備IDE介面。
  6. 早期藉由ISA(Industry Standard Architecture) Bus與CPU溝通,現在則由LPC(Low Pin Count) Bus取代ISA與CPU溝通。
  7. 2000年後"南橋"多半將super I/O(2S1P1G)做整合。

LPC(Low Pin Count) 介面:

  1. 取代傳統的ISA(Industry Standard Architecture) Bus。
  2. 最大bandwidth約16MB/s,資料寬度為4 bit,frequence約33MHz,定址空間為2^32=4GB。
  3. Clock由PCI Bus trigger。
  4. 如果要接ISA Bus就要犧牲一組PCI插槽的驅動能力。

SMBUS:

  1. 基於I2C的低速率system bus,提供一些基本的系統資訊。
  2. 從spd上抓取DRAM的參數(vender、size、clock...)。
  3. CPU溫度、電壓(in digital format)、風扇轉速。

SMLINK:

  • 支援AOL、AOL2及其附加功能。
    • AOL(Alert On LAN):用來遠端管理網路上的PC,需要一個"Wake on LAN"的adaptor。

TCO timer:


  • detect system locks(in the NM10 chipset)


    1. 產生一個SMI#來從lock回復
    2. 發出system reset來從hardware lock回復

CHAP:


  • Challenge-Handsharke Authentication Protocol認證,用來驗證用戶或網路提供者的協議。

vs. 相對簡單的PAP(Password Authentication Protocol,用帳號密碼驗證)



2014年1月1日 星期三

新手村的BIOS任務 ─ ACPI


ACPI (Advanced Configuration and Power Interface)

在過去Windows 98/SE/Me/2000/XP都支持兩種形式的電源管理,它們分別是

  1. APM(Advanced Power Management,高級電源管理)
  2. ACPI(Advanced Configuration and Power Interface, 進階組態與電源介面)
但APM有先天不足:
  • APM經由BIOS所主導控制,每種BIOS都有它自己的電源管理方案,無法隨著作業程序的變遷而有效地運用調整電力。使得每個不同的系統間缺乏一致性,每個BIOS開發者必須精制和維護自己的APM BIOS代碼和功能。
  • 無法覺察到用戶行為,只有通過監視中斷IRQ和I/O port來猜測使用者的活動,頂多做到設定幾分鐘之後某某裝置shut down,省電效率並不高。
  • 早期版本的APM(1.0、1.1)不提供任何系統性能信息,唯一決定機器是否支持睡眠狀態的方法就是嘗試將系統轉入睡眠模式。如果BIOS不支持睡眠模式,那將導致死機。(但在APM 1.2解決了這個缺陷。)
  • 對於USB設備、加插的電腦配件卡和IEEE 1394設備不認識,會導致當這些設備沒有進入空閑狀態,而BIOS卻認為系統已經進入空閑狀態。

在系統實際開機後,真正主導、掌握整個系統並實際接觸周邊裝置調度的是OS,因此power management的重心需要由BIOS轉移到OS,才會有更好的耗電管理。

ACPI既不是軟體的spec,也不是硬體的spec,它在OS與hardware peripheral間多了一個軟體/硬體中介層:

                              

周邊裝置(硬碟、網卡...)隨時將本身的耗電情形以及開關狀況記錄在ACPI中介層的register中;sensor也隨時將最新的電壓、溫度等參數透過ACPI、SMBUS回傳給OS。而OS則是透過AML(ACPI Machine Language)語言解譯程式,對符合ACPI規範設計的peripheral做控制。


ACPI讓作業系統可以直接的管理各種裝置利用電源的狀況:
Sleep狀態,如S1~5等,可以在Sleep狀態被Device喚醒,Sleep狀態數字愈高表示睡得越深、耗的電量越少,需要被喚醒的時間也越長。
  • G0(S0)正常工作狀態:
  • G1 睡眠 細分為從S1到S4這四種狀態。
    • 系統從這幾種狀態被喚醒到G0執行〈喚醒等待時間)所需的時間最短的是S1,最長是S4。
      • S1:最耗電的睡眠模式。
        • 處理器的所有暫存器被重新整理,並且CPU停止執行指令。CPU和內部記憶體的電源一直維持著,裝置如果沒有被使用那麼就會被停止供電。
        • 這種模式通常指上電待機或者簡單叫做POS(Power on Suspend)。一些新式的電腦不再支援S1;老式的電腦對S1支援可能要比S3好。
        • 某些CPU降温軟件就是利用這種工作原理。
        • 喚醒時間:0秒。
      • S2:
        • 這時CPU處於停止運作狀態,Bus Clock也被關閉,但其餘的設備仍然運轉。
        • 喚醒時間:0.1秒。
      • S3:
        • 稱STR(Suspend to RAM)
        • 除了記憶體(RAM)需要電源來保持資料以外,其它的設備、裝置全部停止供電。
        • 因為RAM仍然有電源供給,作業系統、所有應用程式和被開啟的文檔等等的狀態都是保存在主記憶體中,電腦從S3狀態回來時主記憶體的內容和它進入S3狀態時候的內容是相同象的。
        • 喚醒時間:0.5秒。
      • S4: 
        • 稱STD(Suspend to  Disk)
        • 即是把 windows 記憶體中的資料完整的存在硬碟中。等開機時就直接從存這些資料的地方直接完整的讀到記憶體,不需要跑一堆應用程式。
        • 使用這種模式的話,硬碟一定要騰出一個完整的連續空間。
        • 再進入系統時需重跑BIOS。
        • 喚醒時間:30秒。
  • G2
      • S5:關閉

其他:

Google看來的,ACPI的一項特色:用軟體電源開關來控制電源。

電源供應器的開關按鈕並不接往電源供應器本身,而是連接到主機板上;電源供應器無法啟動電腦的電源,而是直接由主機板控制,大部分多配合ATX電源系統一起使用。

這可使電腦供應低電壓、讓電腦處於並非完全關掉電源的睡眠狀態(Idle);這也可使電腦快速開機,即便關機後亦有5V電壓隨時待命。再者於使用隨插即用(Plug-and-Play)周邊設備時,ACPI可在裝置插入系統即偵知並管理設備的電源。

ACPI亦具備NB的OnNow特性,可使電腦立即恢復到原先工作狀態,不需等候漫長的開機過程。ACPI 還提供一個便利親近的視窗,讓使用者可由圖形介面,設定及管理電源的使用狀況,達到較佳的電源管理目的。

ACPI統整了系統、周邊設備、中央處理器、各類嵌入式微控制器、匯流排本身及相互的電源效能管理、溫度監控、儲備電能供應管理。簡丹說,ACPI讓OS、CPU與peripheral三方面整合起來,互相交換用電訊息,更加簡便而有效益地共同管理電源。

Reference:

http://www.hope.com.tw/culture/showbox-tw.asp?o=HJQ1HA8NHJ6CU-0SAH
http://www.lis186.com/posts/7584
http://stenlyho.blogspot.com/2009/02/acpiapic.html