NoName Team 電腦資訊討論區

 找回密碼
 我要註冊
搜索
查看: 16663|回復: 6

[討論] 淺談...我所覺的的 legacy bios 和 uefi bios

[複製鏈接]
發表於 2013-11-17 23:33:05 | 顯示全部樓層 |閱讀模式
本帖最後由 阿達金田一 於 2014-9-10 05:42 編輯

大家好...從這裡退役很久了...粉久沒回來了...(不認識我這行可以跳過去)
我都還在用 xp 和 nonxpe
win7/8 .. 7/8pe 離我很遠...
技術層面還在 7 8年前....所以我現在算是新手
看有沒有那為神人大另發一篇 詳細說明 uefi 開機流程
若有說錯...請神人用力糾正
因為我說了這只是我的 "感想" ...所以這不是教學文啊


今天回來發個帖只是...因為...突然對 uefi 有點興趣
有興趣是因為抓了 Win8.1 和 vbox 4.3...支援 uefi 開機...所以玩一下

這裡就不說 legacy bios(傳統bios) 和 uefi bios 是啥...大家應該不會比我還菜吧
這裡只是想討論一下 legacy 和 uefi 的 "開機"

不管是 光碟 還是 usb , 網路上雖然有很多 legacy/uefi 雙支援的開機
不過 legacy bios 和 uefi 的 "開機" 到底是啥一回事咧
( legacy bios 大家應該都比較瞭...這就不說太多...不瞭的要去用功一下 )

也許網路有文章吧...(雖然我爬不太到)
我爬到的...最多也只是說一下怎麼做而以...一些基礎都還是不太瞭

在我自己亂搞後...以下是自己的心得感想

雖然不想把 legacy bios 拿出來說...但要說 uefi 還是要拿來比較一下

legacy bios 和 uefi bios 可以想成是不同的 "電腦硬體 管理控制 基礎系統"
(就像 操作系統 也分 linux , windows ... 這裡強調的是 "不同的系統")

所以相對的 "程式"
legacy bios 的程式 和 uefi 的程式...基本上是不互相支援的
因為一個是用 legacy bios 去管理控制...一個是用 uefi bios

不過是 "程式" 本身就有一定的彈性
不能直接支援...那 軟支援 為必不行 (雖然目前沒看到過)

不過個人覺的 legacy bios 要 軟支援 uefi程式...應該比較難
反過來 uefi 要軟支援 leagcy bios 程式 還比較有可能一點
(看有沒有神人寫個 efi程式 去 模擬 或 轉換 而去執行 bios 程式)

不過...這不是我現在要說的重點...所以跳過


以上是只我對 legacy , uefi 2種不同 "硬體系統" 的小看法
我主要想說的只是 "開機"...所以上面那些看看就好

回顧一下 legacy bios 的開機
legacy bios 基本上就是跑去讀 裝置 的 開機區
像 硬碟 就是 第1個 磁區(mbr) 或 光碟的開機引導
基本上是直接對 裝置 的 "位址"...做存取

我個人想法是... legacy bios 原則上不支援 FS (檔案系統)
雖然目前的 legacy bios主機板...都 支援bios 按 熱鍵 直接找檔案 刷新bios
不過我認為那只是在 bios 中內崁 bios程式 (就像 grub4dos 也是 bios程式 也可以讀 FS)
基本的 legacy bios...應該就只是裝置 "位址" 的直接存取

只是 legacy bios 的成熟(被人摸熟到快爛)
所以 legacy bios 的程式也很成熟
legacy bios的開機管理程式就不說了...一大堆
grub4dos 算是只要有在摸都應該會知道的


上面是說 legacy bios
那 uefi bios 給我的感覺就是 ... 支援 FS 的 bios
當然支援哪一種 FS 也是要看

而 uefi 開機我感覺就只是...到 FS 下載入開機檔 (固定位置的 efi程式)
例如
32bit uefi 就是讀取 \efi\boot\bootia32.efi
64bit uefi 好像是讀取 \efi\boot\bootx64.efi

所以我在想...不知道以後 grub4dos 會不會出 grub4efi(grldr.efi)


手邊沒硬體環境的 (例如...敝人我就沒硬環境)
可以去用 vbox 4.3
有 uefi...也有 uefi shell


uefi shell 就是一個簡易的 uefi 指令介面
有的主機板不一定有 uefi shell (網路上說的)
可以把 uefi shell 想成類似 grub grub2 grub4dos 那類的 開機管理程式指令介面

vbox 中...設定 uefi 開機
如果並沒有可以開機的 FS ... 會自動進入 uefi shell
如果有可以開機的 FS ... 那就開機了

如果想要不開機...要進入 uefi shell
在開機前按任意鍵...會出現 uefi 管理選單
在 Boot Manager 中選 EFI Internal Shell 就可以進入 uefi shell

另外 Boot Maintenance Manager 中的 Boot From File
可以直接指定用 FS 中的 efi 啟動

這是只是 vbox 的方式...實體PC 請看主機板說明書啊
主機板沒 uefi shell ???...網路上是有說可以用 U盤(隨身碟)啥的
所以我覺的 uefi shell 也只是一個 efi 程式而以
不過 載入 uefi shell ...這個我沒研究
但是應該就只是把 uefi shell 的 .efi
放到 \efi\boot\bootia32.efi 或 \efi\boot\bootx64.efi (看是用 uefi shell x86 還是 x64)
然後用 uefi 開機
或是用 uefi 的管理選單直接指定 uefi shell 的 .efi 載入
(像 vbox 的 Boot From File)
這樣來說...用光碟應該也可以載入 uefi shell...不一定要U盤


進入 uefi shell 後...可以看到 mapping table (我英文爛不會翻譯)
uefi 支援的 FS...會以 FS0: FS1: FS2: 表示
反過來說用 FSx: 表示是...應該都是可以拿來開機 的 FS (當然要有 開機檔 才開的起來)

BLKx: 這個我就不太瞭...應該就是 FS 的反過來吧
可能是指 不是FS (應該是裝置...拿 grub4dos 來說就像是 hdx , FS 像 hdx,x)
或是 不支援的FS


輸入 help 可以看到 uefi shell 的指令說明(英文我也看不太懂)
如果想在看一下 mapping table
輸入 map


像是用 win 8.1 pro x86 的光碟
他是 bios/uefi 雙支援的 udf開機光碟 (2個開機引導 1個 legacy bios 1個 uefi)
uefi 的開機引導...其實也是 1.4M 的 軟碟映像檔
映像檔中其實也就是 \efi\boot\bootia32.efi ( 猜測 x64 的大概就變成 bootx64.efi )
uefi 開機引導映像檔...在光碟中 \efi\microsoft\boot\efisys.bin 找的到

在 uefi shell 中...可以看到2個 和 cdrom 有關的 map
大概長成 PciRoot(xxxxxx./.../.../CDROM(0x0) 和 CDROM(0x1)
一個是 FS 一個是 BLK
可以分開輸入 FSx: 和 BLKx:  ( x 是數字...看你顯示的是那一個 )
在輸入 Dir 或 ls
FS 那個...可以看到 efi 目錄
可以用 cd efi 進入
cd \efi\boot ..就直接到 \efi\boot
再輸入 bootia32.efi...就會執行 bootia32.efi (光碟的開機檔)
就會顯示 press any key to boot from CD or DVD
都不按...就回到 uefi shell..有按就去載入 \bootmgr.efi (bootmgr efi版)
另外 efisys_noprompt.bin 和 cdboot_noprompt.efi
應該是 "不會提示 press any" 的版本吧 (我沒試)

輸入 BLKx: 到另外一個, 輸入 Dir
可以看到只有一個 README.TXT
可以 type README.TXT ... 可以看到一堆英文 xxxx UDF xxxx
簡單說...就是 vbox 的 uefi 不支援 UDF 啦


說到這..可能有點亂...不過前面那些還是要先說...有點概念才好接著說
上面說一堆 uefi shell 其實只是在說
可以用 uefi shell 看一下電腦上有那些 uefi 可以看到(識別)的 FS

uefi 基本上...支援 FAT
所以一堆 uefi usb 開機都要求用 FAT
而 win8.1 的開機引導也就是一個 FAT 的 IMA
(裡面放 \efi\boot\bootia32.efi)

當然隨著 uefi 更新和成熟...以後可能可以支援更多 FS
像是目前好像有的 uefi 可以支援 NTFS
所以網路上就有些文章在說可以把 esp msr 都不要只留一個 NTFS 放 win 8 就好
但那個前提要...uefi 支援 NTFS

反過來說 win 7 8 uefi 要建立 esp分割區(FAT)
其實也只是用來 uefi 開機...放 uefi 的開機檔

另外一提...因為 win7 8的 install.wim 都大過 2G 所以光碟是用 UDF 格式
而如果 uefi 可以支援 UDF
那...開機本身沒有 開機引導 ... 一樣可以 uefi 開機
(說穿了..那個引導只是生出一個 FAT 的 FS 給 uefi 開機用的)

不過 uefi...目前是不支援 UDF
好吧...我沒實機環境玩...不過 vbox uefi 是不支援UDF的
但是... vbox uefi 支援 iso9660
是不是 uefi 原本就支援 iso9660 我不清楚
網路上我爬不到資料(好吧我是沒太認真爬的)
不過 vbox uefi 支援 iso9660 就是了
我測試時做了一個 沒開機引導的 iso...還是可以 uefi 開機

不過說到 FS...所以提一下 FS 和 HD分割 的關係

HD -> 分割(MBR 或 GPT) -> 分割區(格式化成 FS)

照上面那 uefi 支援 FS 前...要先支援 分割表 啊
因此...話說回來...一樣是網路上...有聽說
有些 uefi 不支援 MBR 的 (我是有點懷疑啦)
= = 如果是真的那些 uefi 就只能用 GPT 才能 uefi 開機了

反之...如果 uefi 是支援 MBR (vbox 的 uefi 支援 MBR)
那 uefi 開機就不一定要用 GPT



最後...來總結一下開機流程...不然還是亂亂的

legacy bios
hd >> 開機磁區(MBR引導)...支援分割表  >>  分割區中的開機磁區(引導) 支援FS  >>  FS中的 legacy bios 開機程式(當然也要支援 分割表 和 FS)

像 grub4dos (支援 MBR GPT , FAT NTFS)
hd >>  grub4dos MBR引導(支援mbr)  >>  grldr
hd >>  一般 MBR引導(支援mbr)  >> 分割區 grub4dos 開機引導  >>  grldr

ntldr/bootmgr 開機 (支援 MBR,GPT , FAT NTFS)
hd >>  一般 MBR引導(支援mbr)  >> 分割區 ntldr/bootmgr開機引導 >> ntldr/bootmgr

( 別懷疑看錯....XP SP2 以後的 ntldr 其實是有支援 GPT...bootmgr 也是有支援 GPT
雖然一般 MBR引導 不支援 GPT 不過可以修改一下 MBR 去引導到 GPT 的分割區
相關可以查一下我自製的工具 BiosGPT Win )

uefi 32/64
hd  >>  uefi 所支援 FS 中的 \efi\boot\bootia32.efi(或 bootx64.efi)

所以 uefi 的 引導概念很淡
感覺就像是 legacy bios 直接到 grub4dos 了
或者說...legacy bios 前面的開機動作並不是 "檔案" (而是載入 磁區 中的程式) 所以我們都稱為 引導(程式)
但在 uefi 中都是用 檔案 來處理( 分割表 和 FS 支援丟給了 uefi 處理 )...相對彈性很多...開機檔案換掉...開機就改了
而不像 legacy bios...還要用程式去對 引導磁區 做寫入處理

不過實際上...legacy bios 也不一定要去修改 引導磁區...才能換開機...基本上這是2回事
因為 引導 的最終目的就是 載入 開機程式
不同的 引導 只是 載入 開機程式的檔案 和 流程不同 (前面流程就寫了)
像 grub4dos 的 MBR 引導...就是直接搜尋 分割區中有沒有grldr可以載入
而 grub4dos 分割區引導就是載入 grldr
而其實上只是要載入 grldr ...用 ntldr/bootmgr 的流程和引導 也是可以...把 grldr 取代 ntldr/bootmgr 就好了

而 uefi shell 之類的 efi 程式...一定程度上就類似是 grub4dos
(只是 uefi shell 目前比較陽春了...可能是我不會用)

只不過目前比較多人知道的 開機管理的 efi 好像也不多
我也只知道 grub2 (或著說 grub2 有 efi 版的)

uefi 開機...主要就是 FS 的支援
MBR GPT FAT32 NTFS 等等...
(覺的回到 usb開機...初期那種常常這個不支援那個不支援的時代..通通用FAT16 DOS)
不過最保險通用...應該是
GPT + FAT


註明一下...這裡說的都只是 uefi 開機而以..沒扯到 OS
其實像 windows 的 uefi 開機
可以看一下 BCD...執行的也不是 winload.exe 而是 winload.efi
也就是 winload.exe 的 efi 版
另外 OS 本身 uefi 開機有沒有支援 MBR ... 還是只要 uefi 有支援就都 ok ?
又或者...
就算 uefi 不支援 MBR...但有辦法載入 bootmgr.efi
那 bootmgr.efi 有支援 MBR 就可以了 ?


我覺的這扯到 efi程式 怎麼寫
不過我不太瞭 uefi efi 所以...下面是隨便亂說的

像就 legacy bios 時...bios 是不支援 FS...但透過 legacy bios 程式 去支援
從某個角度來說就是 位址 <-> legacy bios程式 之間的轉換
我們在 legacy bios程式 看到的是 FS 和 File
但 legacy bios程式在透過 bios 去存取時應該還是 位址 (該檔案所在的位址)

而 uefi 本身支援 FS 的話
那是不是 efi程式 比較懶的...直接用 uefi 支援的 FS...本身卻不帶自行支援的程序


-----分割線-----

因為我是邊打邊玩 uefi (所以文章中可能亂亂...中間可能就突入新的測試感想)
本來到 分割線 就完了...不過補充一下剛才才玩完的

這裡要提一下 efisys.bin(也就是efi開機的引導映像檔)中的 bootia32.efi
其實是 cdboot.efi

在 windows 中...對該檔按 內容->版本...就可以看到資料(內部名稱)

而實際上 "光碟"中的 \efi\boot\bootia32.efi 是 bootmgr.efi
但和光碟中 \bootmgr.efi 並不一樣

光碟中的 \boormgr.efi 是給 efisys.bin 中的 bootia32.efi(cdboot.efi) 用的
它無法在 uefi shell 中直接載入啟動 ( 好吧..是我不會 )
\efi\boot\bootia32.efi 則可以在 uefi shell 中直接執行 應該是給 硬碟用的
(或是 iso9660 的光碟用的...)


而因為我是用 iso9660 和 udf 2種在玩
發現 cdboot.efi 主要其實就是給 udf光碟 在用
cdboot.efi 會去載入 udf 中的 bootmgr.efi
我光碟改 iso9660 ... cdboot.efi 就會載入不到 bootmgr.efi 而回到 shell

而 cdboot.efi 也不能去啟動 "光碟中的 \efi\boot\bootia32.efi"
我試著 udf 格式...把原本的 \bootmgr.efi 用 \efi\boot\bootia32.efi 取代
結果 cdboot.efi 完...也是回到 shell

總之 cdboot.efi 只能啟動 \bootmgr.efi
而且好像只支援 光碟udf 的 (硬碟就不知道了)
感覺就是 cdboot.efi 就是針對 udf 的對應解決方式

從這點來看...其實 uefi 就算不支援 UDF NTFS
還是可以透過 efi 程式 (就像 grub4dos) 一樣去軟支援...從而載入
這也是正常的..不然win的 esp 怎麼去啟動 ntfs 中的 winload.efi
還不是經由 esp 中的 efi版的 bootmgr...去啟動 ntfs 中的 winload.efi

在猜想搞不好 uefi 原裝就只支援 FAT/FAT32
甚至不支援...都只是由 efi程序去支援, 就像 legacy bios 和grub4dos 之間的關係

而PC上的 uefi bios 管理介面...搞不好一樣也是 efi程序 而以
就像我前面提到 "bios 按熱鍵直接找檔案刷新bios...可能也是內崁的bios程序"
有異曲同工之妙
那所謂支援 NTFS 的 uefi...搞不好也只是通過 efi程式 軟支援
然後該 efi程序會去跑 \efi\boot\bootxxxx.efi

所以...目前比較期待強大的 efi開機管理程式...(就像 legacy bios中的grub4dos)
或者是 軟模擬bios...從而執行 bios程式


發表於 2013-11-18 00:59:19 | 顯示全部樓層
金大 好久不見
目前比較常用的開機管理程式 rEFind
發表於 2013-11-18 01:06:53 | 顯示全部樓層
金大好,確實對UEFI還搞不清楚,只是知道UEFI是圖形界面;BIOS是文字界面。而UEFI不再受中斷向量限制,改用驅動程式擴充。不知有沒有uefi shell 的中文指令說明?
 樓主| 發表於 2013-11-18 01:36:58 | 顯示全部樓層
本帖最後由 阿達金田一 於 2013-11-18 01:38 編輯

to 2567288
嗯 rEFind 爬文時好像看過到...
不過對老人來說...新的東西不太習慣...所以就PASS
而且我主要只是在看 uefi 怎麼樣開機而以
不過知道也好...也許那天就用的到...3Q
(雖然不太可能...我還活在XP那年代)

to tntw
uefi 是圖形介面 ? ...這我是不知道
老實說我覺的那是 efi程式 的關係 (不然為啥還用個 uefi shell)
就像 bios程式...真要要寫...也是能寫出 圖形介面

而且那些其實對使用來說..不太重要 (那感覺就像一般人用人家做好的 grub4dos 或 其它的 開機和選單 )
中斷向量 那些...知道但不懂(好吧其實知道一點點但要深究...就真的不懂)

至於 uefi shell 中文說明我也想要
看 vbox 的 uefi ...你會覺的那叫 "圖形介面" 嗎
uefi 的好處是...我想是廠商比較容易開發 "管理介面" 至於(他圖不圖形就看怎麼開發)
就像 bios 時按 del 進入 CMOS
只不過 CMOS 大多那幾種長像

如果真的像我說的 uefi 的管理介面 其實也是 efi
而且能像刷 bios 一樣...刷新成別的

那管理介面就可能彈性的 "客制化"
甚至把 grub2 或 rEFind 刷進去 ?

其實在 vbox 的 uefi 選單中...其實就可以自定 uefi 開機項目
不一定是跑 \efi\boot\bootxxx.efi
而是可以自己設定...只要 uefi 能支援的 FS
因此...就算要多系統...或 需要多個開機項...基本上用 uefi 管理介面 就能搞定
當然那要使用者會...
就像在用 grub4dos 時...我們要知道 XP 是 NTLDR , NT6 是 BOOTMGR ...等等
uefi 也是一樣...
可以把 win8 裝的 esp 中的 \efi\boot\bootia32.efi 改名或換掉
例如改 \efi\boot\bootmgr.efi
然後在 uefi 管理介面 中...把 \efi\boot\bootmgr.efi 加到 開機選單 中
這樣在要用不同系統或 efi 程式...用 uefi 選單 去選 就好了
發表於 2013-11-19 09:16:18 | 顯示全部樓層
nice post thanks for sharing.....
發表於 2013-11-19 09:17:41 | 顯示全部樓層
金大,您終於回來了,關於UEFI與BIOS的啟動流程,2567288是高手,搜尋他的文章中將可獲益良多,或許直接問他也可得到更多的知識,至於金大您太謙虛了,新手不屬於你的稱號,想當初我也讓您鞭策許多
 樓主| 發表於 2013-11-19 10:22:40 | 顯示全部樓層
電腦技術這東西 老了 就是 老了
不進步...那就退步而以...

發這篇也只是因為...成品文 或 半技術文 也許不少
但 半技術文 也就是...把什麼檔案放那裡...usb format 成 FAT32 還是什麼
比較重實做技術...感覺就 ...知其然而不知所以然

對 實做技術 這個我是真的老了...只是對 原理 概念 和 未來可能應用 比較感興趣
簡單說就是 ...知道就好...卻不一定要會
光做實做技術...可能會是會...卻不知道為啥
當然 原理 理論 概念 都可以在實做中發現
好吧 ... 其實從以前到現在我都是 原理派 理論派...卻不是 實做派
沒辦法..我只是一般使用者...還是很懶的那種...看我 XP 用到現在就知道
沒興趣 又沒要用...就不會去研究
有興趣 沒要用 (像 uefi ) 就 大概懂一下...實作放一邊
有興趣 有要用 ...才會加減玩一下 ( XPE )

有時候還是真沒環境...(好吧..我懶)
uefi 也是 win 8.1 + vbox 才有去玩的想法
win 8.1  也只是先抓來放著...現在也沒要有...只是以備以後不時之需
win 7 sp1 我都還沒用咧....
win 8.1 破解也不太好用...我 vbox  上都破不了
而且介面超不喜歡...有要用也是先用 win7

想當初..大家在 XP 時...我都還在 98
我換的時候就  SP1 ...SP2都快出了

話先說到這...先來繼續完補 bios 啟動 GPT 中 win7 u sp1 x86
您需要登錄後才可以回帖 登錄 | 我要註冊

本版積分規則

小黑屋|手機版|NoName Team 電腦資訊討論區 |網站地圖

GMT+8, 2024-11-14 11:51 , Processed in 0.370952 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表