2008年8月5日 星期二

Linux BIOS(轉貼)

在 Thin Client 的趨勢下,愈來愈多後 PC 時代的電腦產品可能沒有硬碟,它們要如何開機呢?現有的網路開機解決方案是一種選擇,不過針對不同的網路卡您可能需要準備不同的 Boot ROM 並不是十分方便。聽過 Linux BIOS 嗎?一個新的 Embedded Linux 發展方向、後 PC 時代全新的選擇。在傳統的 PC 架構中 BIOS 最重要的工作就是支援 DOS。但是對 Linux 這樣的先進作業系統來說,除了開機時 Boot Loader 的功能之外,幾乎很少用到 BIOS。更重要的是因為 BIOS 要做到向前相容,技術上的疊床架屋也影響了系統的整體效能。這個歷史的包袱透過最近 Linux BIOS 的發展,在有機會在未來開創新的生命。

Linux BIOS 的啟動:

標準的 PC 架構,x86 CPU 在重置(reset)之後會從位址 0xffff:0 的地方開始執行指令,而傳統上這個記憶體區塊就是主機板 BIOS 的位置。BIOS 程序負責從開機磁碟的開機磁區(boot sector)載入一段固定長度(512 bytes)並且被認為有效的程式碼(以 0xaa55 結束)然後執行它。所謂的開機磁區指的是磁碟機在第一個磁頭、第一個磁軌(cylinder 0)上的第一段磁區(sector 0)。存在這個磁區裡的程式通常是像 LILO 一般的開機載入器(boot loader),會接著將所選的作業系統核心(kernel)載入,再由核心程式完成整個作業系統的開機程序。不過在更單純的情況之下,開機磁區也可能就是作業系統核心的本身,由 BIOS 取得執行權後直接開始整個作業系統的載入。

傳統的 BIOS 程序因為必須向前相容,x86 CPU 在開機期間還是運作在最早期的 16 位元 8086 處理器模擬狀態。而新的 Linux BIOS 則會直接啟用 x86 的整體描述表(GDT)以進入 32 位元保護模式,接著依序啟用 SDRAM 並初始化 PCI 匯流排、晶片組及中斷等。最後再將 Linux 核心從 BIOS 記憶體區塊解壓,並且將執行權交給解壓後的程式完成 Linux BIOS 的啟動。 Linux 的核心在取得執行權後會先檢查硬體並架設(mount)根磁碟(root device),接著尋找啟始程序(init program)開始執行。
資料來源:http://www.ialbert.net/index.php?load=read&id=38

1 則留言:

菠蘿麵包 提到...

Linux BIOS 現在已經更名叫coreboot,其支援的主機板非常多,但是也透露出並非所有主機板或硬體都保證能跑。

它有幾個非常重要的好處:
# 100% Free Software (GPL), no royalties, no license fees!
# Fast boot times (3 seconds to Linux console)
# Avoids the need for a slow/buggy/proprietary BIOS
# Written in C, contains virtually no assembly code

希望所有做主機板的台灣廠商能將它列入支援計畫中。

一個小故事讓我們明白資金流通的意義

“又是炎熱小鎮慵懶的一天。太陽高掛,街道無人,每個人都債台高築,靠信用度日。這時,從外地來了一位有錢的旅客,他進了一家旅館,拿出一張1000 元鈔票放在櫃檯,說想先看看房間,挑一間合適的過夜,就在此人上樓的時候---- 店主抓了這張1000 元鈔,跑到隔壁屠戶那裡支付了他欠的肉錢...