為什麼BIOS晶片要做小顆? - 3C

Franklin avatar
By Franklin
at 2019-07-20T01:12

Table of Contents

沒營養又愛吃餌的閒聊仔又來啦

這次來聊聊 Reset Vector 跟 Security Entry, 透過 UEFITool[1] 知道該 BIOS[2]
大小是13MB/32MB, 所以映射圖如下 (三個圖的比例不一致).

0 0 0
+-------+ +-------+ +-------+
| . | | . | | . |
| . | | . | | . |
| . | | . | | . |
| . | | . | | . |
+-------+ ------ +-------+ --- +-------+
| 13MB | | 13MB | / | 128KB |
+-------+ ------ +-------+ ------ +-------+
4GB 32MB 1MB
32Bit mem. ROM 16bit mem.

CPU一上電後內部兩個暫存器的初始值是 CS:IP = 0xf000:0xfff0, 意思就 CPU 是會到
1MB-16B 的地方跑程式, 所以 PCH 會故意 把 SPI ROM 最末端 128KB 的地方映射到該
處如右圖. 同時也會將整個 BISO 區域映射到 4GB 的末端如左圖.

算法: 0xFFFF0 = CS*16+IP = 0xf000<<4+0xfff0 = 1MB-16B



再來燒好 BIOS, 設定好除錯器後, 開啟電源後會看到 CPU 待在 0xFFFF0 的地方

https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/SecCore/Ia32/ResetVec.nasmb

Address 0 1 2 3 4 5 6 7 8 9 A B C D E F
000FFFC0 00 01 36 FF 00 00 00 00 00 00 00 00 00 00 00 00
000FFFD0 BF 50 41 EB 1D 00 00 00 00 00 00 00 00 00 00 00
000FFFE0 94 13 F0 FF EB FE CF 00 00 00 00 00 00 00 00 00
000FFFF0 90 90 E9 9B F2 00 00 00 EF 00 00 00 00 00 F0 FF

0x000ffff0: 0x00000000000090 nop
0x000ffff1: 0x00000000000090 nop
0x000ffff2: 0x00000000f29be9 jmp 0xf290

0xF29B (2's complement) = -0x0D65
0xfff2 + 3 -0x0D65 = 0xF290

這段 code 就是往上跳, 跳多少? 我已經列了算式. 這裡就是俗稱的 Reset vector.



跟著除錯器來到 0xFF290 的地方, 這裡就是所謂的 Security Entry (Flat32).
這裡開始各個晶片供應商會開始有些大同小異. 所以會跟UEFI code有些出入.

https://github.com/tianocore/edk2/blob/master/IntelFsp2WrapperPkg/Library/SecFspWrapperPlatformSecLibSample/Ia32/SecEntry.nasm

Address 0 1 2 3 4 5 6 7 8 9 A B C D E F
000FF290 DB E3 0F 6E C0 FA 66 33 C0 8E C0 8C C8 8E D8 B8

0x000ff290: 0x0000000000e3db fninit
0x000ff292: 0x00000000c06e0f movd mm0,eax

中間是一些廠商添加的功能就不反組譯了

Address 0 1 2 3 4 5 6 7 8 9 A B C D E F
000FF2D0 31 0F 6E
000FF2E0 EA 0F 6E F0 66 BE 50 F4 FF FF 66 2E 0F 01 14 0F
000FF2F0 20 C0 66 83 C8 03 0F 22 C0 0F 20 E0 66 0D 00 06
000FF300 00 00 0F 22 E0 B8 18 00 8E D8 8E C0 8E E0 8E E8
000FF310 8E D0 66 BE 56 F4 FF FF 66 2E FF 2C

0x000ff2dc: 0x0000000000310f rdtsc
0x000ff2de: 0x00000000ea6e0f movd mm5,edx
0x000ff2e1: 0x00000000f06e0f movd mm6,eax
0x000ff2e4: 0x00fffff450be66 mov esi,0xfffff450
0x000ff2ea: 0x000014010f2e66 lgdt cs:[si]
0x000ff2ef: 0x00000000c0200f mov eax,cr0
0x000ff2f2: 0x00000003c88366 or eax,0x3
0x000ff2f6: 0x00000000c0220f mov cr0,eax
0x000ff2f9: 0x00000000e0200f mov eax,cr4
0x000ff2fc: 0x00000006000d66 or eax,0x600
0x000ff302: 0x00000000e0220f mov cr4,eax
0x000ff305: 0x000000000018b8 mov ax,0x18
0x000ff308: 0x0000000000d88e mov ds,ax
0x000ff30a: 0x0000000000c08e mov es,ax
0x000ff30c: 0x0000000000e08e mov fs,ax
0x000ff30e: 0x0000000000e88e mov gs,ax
0x000ff310: 0x0000000000d08e mov ss,ax
0x000ff312: 0x00fffff456be66 mov esi,0xfffff456
0x000ff318: 0x0000002cff2e66 jmp far cs:[si]

到這裡之後 CPU 的所有暫存器就被設定好準備跑 32 bit 模式的 code.
也就是不再受到 128KB 限制. 整顆 ROM 13MB 的 code 都能隨時跳到哪就跑哪.

至於速度嘛 從SPI讀是鐵定比記憶體慢的,等到DXE階段就會用解壓縮方式把 code
搬到記憶體上再跳過去跑就會快了.

PS:
[1] https://github.com/LongSoft/UEFITool
[2] https://dlcdnets.asus.com/pub/ASUS/mb/socket1151/WS-C246-PRO/BIOS/WS-C246-PRO-ASUS-0904.zip

--
Tags: 3C

All Comments

Bethany avatar
By Bethany
at 2019-07-21T00:57
先推再說
Christine avatar
By Christine
at 2019-07-21T08:55
這篇文內容超簡單,大家都懂對吧
Queena avatar
By Queena
at 2019-07-24T14:45
跟我想的一樣OVO
Agnes avatar
By Agnes
at 2019-07-28T17:46
先推 不然別人以為我看不懂
Enid avatar
By Enid
at 2019-07-29T03:24
本來就這樣,intle又勝利了一次
Mason avatar
By Mason
at 2019-08-02T15:51
文組跪求翻譯蒟蒻
Kelly avatar
By Kelly
at 2019-08-06T20:54
好多好多0
Annie avatar
By Annie
at 2019-08-09T22:05
這東西阿....以前大學學過 然後沒再用了XD
Jake avatar
By Jake
at 2019-08-11T03:39
之前有人問說 不知道開機後跑code的流程 所以列一
Leila avatar
By Leila
at 2019-08-11T10:38
如同732所說 這些規範跟程式碼都是Intel貢獻的
Agatha avatar
By Agatha
at 2019-08-11T12:25
寫BIOS就是搞這樣?好險當初沒選...
Hamiltion avatar
By Hamiltion
at 2019-08-11T20:45
看不懂啦w
Todd Johnson avatar
By Todd Johnson
at 2019-08-16T02:37
組語orz....
Kelly avatar
By Kelly
at 2019-08-18T22:09
原來只有我不懂,看來我要先去修個計算機概念再說
Dora avatar
By Dora
at 2019-08-23T09:27
阿我的計算機概論老師在哭 連科目名都打錯orz
Joe avatar
By Joe
at 2019-08-26T02:32
CPU上電後會先跑如intel ME之類的東西,之後才是這
Olive avatar
By Olive
at 2019-08-27T11:37
ME 又不是跑在 CPU 上 ...
Noah avatar
By Noah
at 2019-08-27T20:47
你不要這麼專業好不好
Ingrid avatar
By Ingrid
at 2019-08-30T20:21
ME沒過,你的CPU就會被shut down
Suhail Hany avatar
By Suhail Hany
at 2019-08-30T23:51
然後就沒有之後了XDD~
Mia avatar
By Mia
at 2019-09-04T19:17
只讀完計概的文組仔表示完全看不懂QQ
Rebecca avatar
By Rebecca
at 2019-09-06T17:21
嗯嗯 果然是這樣 樓下的也懂吧
Thomas avatar
By Thomas
at 2019-09-08T05:01
不懂 計概沒教那麼深吧
Barb Cronin avatar
By Barb Cronin
at 2019-09-11T18:06
這東西要到計算機組織、計算計結構 才有教
然後是 組合語言
Isla avatar
By Isla
at 2019-09-11T20:00
先推不然別人會以為我不懂
Robert avatar
By Robert
at 2019-09-14T02:33
Selena avatar
By Selena
at 2019-09-15T12:59
說得不錯
Yuri avatar
By Yuri
at 2019-09-18T13:33
不錯, 算是有表達到我的想法, 給你70分
Thomas avatar
By Thomas
at 2019-09-22T16:21
要看懂要去查暫存器的spec,不然程式碼也只知道資料
搬來搬去
Jacky avatar
By Jacky
at 2019-09-25T15:57
我只是來電蝦版買新的 你給我看這個
Megan avatar
By Megan
at 2019-09-28T20:17
我真的看不懂QQ
Andrew avatar
By Andrew
at 2019-09-30T12:09
先推再說,雖然完全看不懂
Gary avatar
By Gary
at 2019-10-04T05:21
ME 好像會偷跑 不過完全獨立於BIOS 可以說是個後門
Kama avatar
By Kama
at 2019-10-07T18:37
感謝分享
Jake avatar
By Jake
at 2019-10-12T15:04
推看不懂
Ophelia avatar
By Ophelia
at 2019-10-15T10:51
SPI雖然慢 但常是初版ROM搞爛以後的救援好朋友呢
Faithe avatar
By Faithe
at 2019-10-17T14:43
推,有看沒有懂
Bennie avatar
By Bennie
at 2019-10-22T05:37
boot code/fw 又不是只有 主要那顆x86 才有 出包
記得要找對主人也不是第一時間跑 還賣硬體板子做量
產管好自家 issues 就好管啥 boot code XD
Kelly avatar
By Kelly
at 2019-10-26T01:27
嗯嗯,跟我想的一樣
Zora avatar
By Zora
at 2019-10-29T05:39
ME區塊要先過,不然EC不跑code是不給開機
Ina avatar
By Ina
at 2019-11-01T05:26
整顆SPI flash裡面有分區塊,它不是全部都是BIOS re
gion
Tom avatar
By Tom
at 2019-11-01T15:30
還行 跟我想的差不多 樓下呢?
Una avatar
By Una
at 2019-11-06T11:10
基本知識啦,樓下學得如何?
Anonymous avatar
By Anonymous
at 2019-11-07T21:23
我學的一般般啦
Rae avatar
By Rae
at 2019-11-09T23:34
我60分剛好過 你說的我也略懂
Elvira avatar
By Elvira
at 2019-11-10T11:08
推 好文
Ina avatar
By Ina
at 2019-11-13T20:14
計概不會教組語跟計算機結構的喇~ 組語修完書直接
Blanche avatar
By Blanche
at 2019-11-16T13:16
丟了,真的很討厭16進位 XDDDDD
Heather avatar
By Heather
at 2019-11-17T01:53
嗯嗯 原來如此嗯嗯
Ida avatar
By Ida
at 2019-11-19T12:53
沒錯沒錯跟我想的一樣
Quanna avatar
By Quanna
at 2019-11-22T20:45
組合語言好玩
Michael avatar
By Michael
at 2019-11-27T08:17
忽然覺得在大學上課
Lauren avatar
By Lauren
at 2019-12-01T06:16
略懂略懂
Ula avatar
By Ula
at 2019-12-04T10:09
快推免的別人以為我
Anonymous avatar
By Anonymous
at 2019-12-05T19:04
嗯嗯 老師也這麼教
Delia avatar
By Delia
at 2019-12-09T04:11
Charlotte avatar
By Charlotte
at 2019-12-13T13:23
其實AMD的PSP也是等同於intel的ME般的存在啦

24K輕度遊戲

Kama avatar
By Kama
at 2019-07-20T00:19
已買/未買/已付訂金(元):未買 預算/用途:24k以內/輕度遊戲 上網 影音 CPU (中央處理器):Ryzen5 3600 3.6GHz $7,170 MB (主機板):華碩ROG STRIX B450-E GAMING $4,290 RAM (記憶體):美光 LT競技版 -32 ...

I LOVE YOU 3000, RYZEN

Edward Lewis avatar
By Edward Lewis
at 2019-07-20T00:09
From July 7th – Aug. 18th, 2019 (UTC + 08:00) https://tw.msi.com/Promotion/I-Love-You-3000-AMD 微星的活動,不用抽獎,登錄即可兌換 (國外好像送更多...怎麼回事XD) 買MSI 主機板指定款,送COOLER ...

Intel終於承認7nm落後了,2年內追不上AM

Freda avatar
By Freda
at 2019-07-20T00:09
這篇完全就是在鬼扯, techradar那篇原文就是標題殺人法, 內文完全沒有提及到什麼追不上amd。 原文是這樣的 https://i.imgur.com/WThUXXu.jpg 全文鏈接 https://www.google.com/amp/s/www.techradar.com/amp/news/in ...

30k itx香香機

Emma avatar
By Emma
at 2019-07-20T00:05
已買/未買/已付訂金(元):未買 預算/用途:遊戲 CPU (中央處理器):r5 3600 MB (主機板):rog b450i RAM (記憶體):芝奇 Trident Z 三叉戟 DDR4-3200 32GB (16GBx2) VGA (顯示卡):ZOTAC GAMING G ...

記憶體的頻率影響及選擇疑問

Bethany avatar
By Bethany
at 2019-07-20T00:00
目前正在研究組電腦,預設購買Ryzen 3400G。在看到記憶體頻率,想到CPU應該有最大支 援上限,不一定越大越好? 找到3400G/2400G官網寫到最大記憶體速度都是2933MHz,不過有爬文爬到這篇: https://www.ptt.cc/bbs/PC_Shopping/M.1523366772.A ...