tag:blogger.com,1999:blog-346525742024-02-28T03:56:51.655-08:00小華的部落格將自己踏入BIOS領域中所學習到的知識做一些心得整理,像是Legacy BIOS、EFI BIOS、Windows Driver...etc.
※版權與智慧財產權聲明:保留所有法律權利。我在寫文章時如果有引用到其他人的地方我會盡量說明參考出處,如果有遺漏的地方請告訴我,我會馬上註明! 而轉貼我的文章時也請您註明出處!小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.comBlogger177125tag:blogger.com,1999:blog-34652574.post-91665165254347764652020-02-13T23:27:00.000-08:002020-02-13T23:27:04.363-08:00Git Tag <br />
<br />
1.搜尋遠端上面的特定字串的Tag:<br />
<br />
C:\> git ls-remote --tags origin "00.02.04"<br />
7dd870355e439cfb8a818b6cd31f3c77f2ce40dc refs/tags/BiosRelease/project1/00.02.04<br />
88138555a49907d6935fe55a8261e226668ba770 refs/tags/BiosRelease/MockingbirdCmlH/00.02.04<br />
a98bce225711b983d729fcdb25542c6e8fdebac8 refs/tags/BiosRelease/project2/00.02.04<br />
3cd9b00479436f67fef2e44955571218e80b6046 refs/tags/BiosRelease/project3/00.02.04<br />
c1286cb71e39bf869ae0d70208479c3683dd0989 refs/tags/BiosRelease/project4/00.02.04<br />
<div>
<br /></div>
<div>
<br /></div>
<div>
2.列出遠端上的全部Tag</div>
<div>
C:\> git ls-remote --tags origin</div>
<div>
<br /></div>
<div>
<br /></div>
<span id="goog_1712280939"></span><a href="https://www.blogger.com/"></a><span id="goog_1712280940"></span>小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com4tag:blogger.com,1999:blog-34652574.post-39576766770181892622019-06-12T08:27:00.000-07:002019-06-12T08:27:06.020-07:00<div style="text-align: center;">
GIT 小幫手</div>
<br />
1.如何知道某個CommitID是來自於哪個分支<br />
git branch -a --contains 68b6100<br />
<br />
<br />
<會繼續補充><br />
<br />小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com0tag:blogger.com,1999:blog-34652574.post-12679672435133449762019-02-20T00:40:00.001-08:002019-06-17T22:54:53.441-07:00紀錄一下好用的Git Alias<br />
<br />
紀錄一下好用的Git Alias<br />
C:\Users\<UserName>\.gitconfig<br />
<br />
[alias]<br />
lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all<br />
<br />
lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all<br />
<br />
lg = !"git lg1"<br />
<div>
<br /></div>
cc=<span style="color: red;">!</span>git clean -ffd <span style="color: red;">&&</span> git submodule foreach --recursive git clean -fd && git reset --hard && git submodule foreach --recursive git reset --hard && git submodule update --init --recursive && git remote prune origin && git remote update --prune<br />
<br />
ccall=!git clean -ffdx && git submodule foreach --recursive git clean -xfd && git reset --hard && git submodule foreach --recursive git reset --hard && git submodule update --init --recursive && git remote prune origin && git remote update --prune<br />
st=!git status<br />
<div>
<br />
<br />
pp=<span style="color: red;">!</span><span style="color: red;">git pull</span><span style="color: red;"> && </span>git clean -ffd <span style="color: red;">&&</span> git submodule foreach --recursive git clean -fd && git reset --hard && git submodule foreach --recursive git reset --hard && git submodule update --init --recursive && git remote prune origin && git remote update --prune<br />
<br />
<br />
[git version 2.22.0 and above]<br />
<br />
cc=!git clean -ffd && git submodule foreach --recursive 'git clean -fd' && git reset --hard && git submodule foreach --recursive 'git reset --hard' && git submodule update --init --recursive && git remote prune origin && git remote update --prune<br />
<br />
ccall=!git clean -ffdx && git submodule foreach --recursive 'git clean -xfd' && git reset --hard && git submodule foreach --recursive 'git reset --hard' && git submodule update --init --recursive && git remote prune origin && git remote update --prune<br />
st=!git status<br />
<br />
pp=!git pull && git clean -ffd && git submodule foreach --recursive 'git clean -fd' && git reset --hard && git submodule foreach --recursive 'git reset --hard' && git submodule update --init --recursive && git remote prune origin && git remote update --prune<br />
<div>
<br /></div>
<div>
<br /></div>
-----------------------------------<br />
Git Pull常遇到的問題 : error: cannot lock ref ‘xxx’: ref xxx is at<br />
<br />
git gc --prune=now
<br />
git update-ref -d refs/remotes/origin/ccc/xxx/yyy<br />
git remote update --prune<br />
<br /></div>
<div>
---------------------------------<br />
搜尋Tag<br />
<br />
git tag -l '*Loki*'<br />
<br /></div>
<div>
<br /></div>
小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com7tag:blogger.com,1999:blog-34652574.post-28391596421447170422018-02-05T09:13:00.000-08:002019-10-14T23:07:50.562-07:00UEFI Shell Utility - pwrtest.efiThe pwrtest.efi is an UEFI Shell tool that help developer to confirm RTC wake function from a system(Support on both Intel and AMD platform).<br />
<br />
最近在幫忙ODM看一個RTC Wake 問題,所以就順便寫了一個TOOL來驗證一些東西。原本遇到的問題也解決了,所以就順便把這個小TOOL分享一下給有需要的人使用。<br />
<br />
<u>Usage:</u><br />
<span style="color: blue;">pwrtest -s3 -t 10 -w 60</span> ; 系統會在10 sec delay 後進入S3,然後在60 sec 後喚醒(Wake up) <br />
pwrtest [-h|-s3|-s4|-s5|-s|-ss|-sx|-cb|-r]<br />
-h help<br />
-s3|-s4|-s5 ;選擇系統的Sx State (Intel platform)<br />
-cb ;做coldboot ,我是透過 gRT->ResetSystem() 方式去做的<br />
-ss ; 做Shutdown,我是透過 gRT->ResetSystem() 方式去做的<br />
-sx value ; 支援AMD platform去做Sx State,因為填的SLP_TYP值不同.<br />
value = 3/4/5 for AMD platform(S3/S4/S5)<br />
value = 5/6/7 for Intel Platform (S3/S4/S5)<br />
e.g,<br />
<span style="color: blue;">pwrtest -sx 4 -t 5 -w 30 </span>; For AMD Platform, Put system to S4 after 5 sec, then wake after 30 sec.<br />
<span style="color: blue;">pwrtest -sx 6 -t 5 -w 30 ;</span> For INTEL Platform, Put system to S4 after 5 sec, then wake after 30 sec.<br />
<span style="color: blue;">pwrtest -s3 -t 5 -w 30 </span> ; For INTEL Platform, Put system to S3 after 5 sec, then wake after 30 sec.<br />
<span style="color: blue;"> pwrtest -r </span> ; Warm boot<br />
<span style="color: blue;"> pwrtest -cb </span> ; Cold boot<br />
<br />
[註]<br />
- S3 功能只能喚醒系統,喚醒後會當機,因為我沒有支援Reset Vector(Not support)<br />
- 有些系統S4/S5 並不支援RTC wake up,所以請跟你們的BIOS/EC確認,因為這個工具只是去填RTC Enable bit & RTC Alarm interrupt而已。<br />
<br />
<br />
Download (Password: harrison):<br />
<br />
version 1.1 : <a href="https://onedrive.live.com/embed?cid=CA2486E6684D363F&resid=CA2486E6684D363F%21517&authkey=AM4OKvr3SHtPPUo">pwrtest</a><br />
<br />
<br />
<br />小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com10tag:blogger.com,1999:blog-34652574.post-2052107157975489522018-01-15T22:47:00.000-08:002018-01-15T22:47:09.882-08:00紀錄一下WinDbg裡面比較常用到的指令集<span style="font-size: x-small;">AMLI裡面比較常用到的指令集</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;">AMLI(? for help)-> ?</span><br />
<span style="font-size: x-small;">?</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;">Help - ? [<Cmd>]</span><br />
<span style="font-size: x-small;">Clear Breakpoints -<span style="color: blue;"> bc</span> <bp list> | *</span><br />
<span style="font-size: x-small;">Disable Breakpoints - <span style="color: blue;">bd</span> <bp list> | *</span><br />
<span style="font-size: x-small;">Enable Breakpoints - be <bp list> | *</span><br />
<span style="font-size: x-small;">List Breakpoints - <span style="color: blue;">bl</span></span><br />
<span style="font-size: x-small;">Set Breakpoints - <span style="color: blue;">bp</span> <MethodName> | <CodeAddr> ...</span><br />
<span style="font-size: x-small;">Clear Event Log - cl</span><br />
<span style="font-size: x-small;">Dump Event Log - <span style="color: blue;">dl</span></span><br />
<span style="font-size: x-small;">Dump Object Count Table - dc</span><br />
<span style="font-size: x-small;">Dump Heap - dh [<Addr>]</span><br />
<span style="font-size: x-small;">Dump Stack - ds [/v] [<Addr>]</span><br />
<span style="font-size: x-small;">Dump Name Space Object - dns [[/s] [<NameStr> | <Addr>]]</span><br />
<span style="font-size: x-small;">Dump Data Object - do <Addr></span><br />
<span style="font-size: x-small;">Find NameSpace Object - find <NameSeg></span><br />
<span style="font-size: x-small;">Continue Execution - g</span><br />
<span style="font-size: x-small;">Read Byte from Port - i <Port></span><br />
<span style="font-size: x-small;">Read Word from Port - iw <Port></span><br />
<span style="font-size: x-small;">Read DWord from Port - id <Port></span><br />
<span style="font-size: x-small;">List All Contexts -<span style="color: blue;"> lc</span></span><br />
<span style="font-size: x-small;">Display Nearest Method - <span style="color: blue;">ln</span> [<MethodName> | <CodeAddr>]</span><br />
<span style="font-size: x-small;">Notify NameSpace Object - <span style="color: blue;">notify </span><Obj> <Value></span><br />
<span style="font-size: x-small;">Write Byte to Port - o <Port> <Byte></span><br />
<span style="font-size: x-small;">Write Word to Port - ow <Port> <Word></span><br />
<span style="font-size: x-small;">Write DWord to Port - od <Port> <DWord></span><br />
<span style="font-size: x-small;">Step Over AML Code - p</span><br />
<span style="font-size: x-small;">Quit to Kernel Debugger - q</span><br />
<span style="font-size: x-small;">Display Context Info. - <span style="background-color: blue;">r</span> <Context></span><br />
<span style="font-size: x-small;">Run Method - run <MethodName> | <CodeAddr> [<ArgList>]</span><br />
<span style="font-size: x-small;">Set Debugger Options - set [<span style="color: blue;">traceon </span>| traceoff] [<span style="color: blue;">nesttraceon </span>| nesttraceoff] [<span style="color: blue;">spewon </span>| spewoff]</span><br />
<span style="font-size: x-small;"> [<span style="color: blue;">dbgbrkon</span> | dbgbrkoff] [lbrkon | lbrkoff] [errbrkon | errbrkoff] </span><br />
<span style="font-size: x-small;"> [<span style="color: blue;">verboseon </span>| verboseoff] [logon | logoff] [logmuton | logmutoff] </span><br />
<span style="font-size: x-small;">Trace Into AML Code - t</span><br />
<span style="font-size: x-small;">Interpreter Trace Mode - trace [trigon] [trigoff] [level=<n>]</span><br />
<span style="font-size: x-small;"> [add=<TrigPtStr] [zap=<TrigPtList>]</span><br />
<span style="font-size: x-small;">Unassemble AML code - <span style="color: blue;">u</span> [<MethodName> | <CodeAddr>]</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;">AMLI(? for help)-> </span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;">ACPI 裡面比較常用到的指令集</span><br />
<span style="font-size: x-small;"><span style="color: blue;">!acpicache </span>displays all of the ACPI tables cached by the hardware application layer (HAL)</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;"><span style="color: blue;">!acpiinf</span> displays information on the configuration of the ACPI</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;"><span style="color: blue;">!acpiirqarb </span>displays the contents of the ACPI IRQ arbiter structure</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;"><span style="color: blue;">!facs</span> displays a Firmware ACPI Control Structure</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;"><span style="color: blue;">!fadt </span>displays a Fixed ACPI Description Table</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;"><span style="color: blue;">!mapic</span> displays an ACPI Multiple APIC Table</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;"><span style="color: blue;">!nsobj </span>displays an ACPI namespace object</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;"><span style="color: blue;">!nstree</span> displays a section of the ACPI namespace tree</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;"></span><br />
<span style="font-size: x-small;"><span style="color: blue;">!rsdt</span> displays the ACPI Root System Description Table</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;"><span style="color: blue;">!acpikd.help</span> For a complete list of ACPI-related extensions.</span><br />
<span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;"><b>Reference</b></span><br />
<span style="font-size: x-small;">https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/acpi-debugging</span><br />
<span style="font-size: x-small;"><br /></span>小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com0tag:blogger.com,1999:blog-34652574.post-83360748246005762332018-01-10T07:38:00.003-08:002018-01-10T07:38:52.730-08:00如何透過DevCon.exe 去開跟關你的Device Manager內的設備<span style="font-size: large;"><br /></span>
<b><span style="font-size: large;">如何透過DevCon.exe 去開跟關你的Device Manager內的設備</span></b><br />
<br />
<br />
當你安裝WDK, Visual Studio 或是Windows SDK時,這些安裝檔裡面就會包含DevCon.exe。<br />
<br />
我的DevCon.exe是在底下這個路徑內找到的:<br />
<br />
<span style="color: blue;">C:\Program Files (x86)\Windows Kits\10\Tools\x64\DevCon.exe</span><br />
<br />
當然,如果你想要自己Build source code的話,你也可以從底下的路徑找到這個source code:<br />
<br />
<a href="https://github.com/Microsoft/Windows-driver-samples/tree/master/setup/devcon">https://github.com/Microsoft/Windows-driver-samples/tree/master/setup/devcon</a><br />
<br />
我自己也用VS2013 成功建構出來這個執行檔,只是有個小地方要注意,就是你build code之前,要用command prompt(Build environment)先執行底下的指令,先把msg.h 建立出來,不然你沒辦法用專案檔案去compiler , 因為會出現會找不到<b>msg.h</b>的ERROR.<br />
<br />
C:\DevCon > <span style="color: blue;">mc msg.mc</span> 會產生<b>msg.h</b><br />
<br />
底下就是一些基本的指令操作:<br />
<br />
<div>
<span>1)先找你要開關的Device的HWID(我是存到一個文字檔慢慢找):</span></div>
<div>
<span style="color: blue;">devcon hwids * </span>> D:\hwids.txt </div>
<div>
<span><br /></span></div>
<div>
<span>2) 使用底下指令去disable , 記得在HW ID前面加@</span></div>
<div>
<span style="color: blue;">devcon /r disable</span> "<span style="color: red;">@</span>ACPI\DELL0812\3&31FF937C&0"</div>
<div>
<br /></div>
<div>
3) 使用底下指令去enable, 記得在HW ID前面加<span style="color: red;">@,然後HWID要用" "包起來.</span></div>
<div>
<span style="color: blue;">devcon /r enable</span> "<span style="color: red;">@</span>ACPI\DELL0812\3&31FF937C&0"</div>
<div>
<br /></div>
<div>
4) 使用底下指令去重新scan hardware</div>
<div>
<span style="color: blue;">devcon rescan</span></div>
<div>
<br /></div>
<div>
5) 使用底下指令可以做重新開機動作</div>
<br />
<div>
<span style="color: blue;">devcon reboot</span></div>
<br />
至於其他跟寫driver時會用到的指令功能,大家就看底下微軟的詳細說明囉~<br />
<br />
Reference<br />
<a href="https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/devcon-examples">https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/devcon-examples</a>
<br />
<br />
<br />小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com1tag:blogger.com,1999:blog-34652574.post-40790400436706961612016-11-01T13:10:00.007-07:002016-11-01T13:16:32.325-07:00ACPICA Programmer Reference Guide<br />
隨手記錄ㄧ下<span style="font-family: "courier new" , "courier" , monospace;">AE_NOT_FOUND 出現的ㄧ些原因.</span><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;"><b>AE_NOT_FOUND :</b><span style="font-size: x-small;"> The name was not found in the namespace</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><b>AE_NOT_FOUND :</b> <span style="font-size: x-small;">A valid RSDP could not be located.</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><b>AE_NOT_FOUND :</b> <span style="font-size: x-small;">There is no table with this Signature currently loaded, or the table of the specified Instance is not loaded.</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"><b>AE_NOT_FOUND :</b> <span style="font-size: x-small;">The object referenced by the combination of the Object and Pathname was not found within the namespace.</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"><b>AE_NOT_FOUND:</b> <span style="font-size: x-small;">The child object parameter is the last object of the given type within the parent — a next child object was not found. </span></span><span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">If Child is NULL, this exception means that the parent object has no children.</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><b><br /></b></span>
<span style="font-family: "courier new" , "courier" , monospace;"><b>AE_NOT_FOUND:</b> <span style="font-size: x-small;">One or more of the segments of the pathname refers to a non-existent object.</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"><b>AE_NOT_FOUND:</b> <span style="font-size: x-small;">A valid ACPI table was not found at the specified Address.</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><b><br /></b></span>
<span style="font-family: "courier new" , "courier" , monospace;"><b>AE_NOT_FOUND:</b> <span style="font-size: x-small;">An ACPI table with Signature was not found.</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><span style="font-size: x-small;"><br /></span></span>
<span style="font-family: "courier new" , "courier" , monospace;"><span style="font-size: x-small;">範例:</span></span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">ACPI Error: Method parse/execution failed [\_SB.PCI0.LPCB.ECDV.ECIN] (Node 008E3F28), AE_NOT_FOUND (20160930/psparse-632)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">ACPI Error: Method parse/execution failed [\_SB.PCI0.LPCB.ECDV._REG] (Node 008E3F70), AE_NOT_FOUND (20160930/psparse-632)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">ACPI Error: Method parse/execution failed [\_SB.PCI0._INI] (Node 008D5790), AE_NOT_FOUND (20160930/psparse-632)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">ACPI Error: Method parse/execution failed [\ALSD._STA] (Node 008DD4C8), AE_NOT_FOUND (20160930/psparse-632)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: xx-small;"><br /></span>
<span style="font-family: Courier New, Courier, monospace; font-size: xx-small;"><br /></span>
<span style="font-family: Courier New, Courier, monospace; font-size: xx-small;"><br /></span>
<span style="font-family: Courier New, Courier, monospace; font-size: xx-small;"><br /></span>小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com1tag:blogger.com,1999:blog-34652574.post-68425683191681551702016-02-19T22:30:00.001-08:002016-02-19T22:30:54.336-08:00不進步就是退步<br />
<br />
<br />
-- 以下並非以偏概全,純屬個人工作體驗 --<br />
<br />
幾年前加入了一家日商公司,原本抱持著可以跟世界上製作第一台NB的公司裡的業界前輩學習更深入的BIOS知識,但發現事實是殘酷的,經過了多年後的改變,那邊慢慢的研發精神已經沒有那麼積極了,我不會說這家公司很糟,因為還是有很多日本/台灣/大陸/其他Region同事還是努力的在做事情,但是一家公司的文化卻讓肯做事情的人事情越做越多,不肯做事情/事情做不好的人越做越少,乃至於冗員就越來越多,聊八卦破壞團隊精神的人就多(做不好不會被裁員)。<br />
<br />
而開發的方面,日商還是擁有許多比較封閉的開發方式,而「閉門造車」或許有其好處也有相對的壞處,而在一個世界潮流改變很快速的地方,如果不能一直學習成長,那就只能讓人超車。<br />
<br />
因此,幾經嘗試改變周遭同事態度失敗和思考之後,我決定離開那些負面思考/消極態度的同事以及封閉的開發方式的環境,以避免個人養老心態的產生和負面心態的養成。所以在去年所以我選擇加入了另一家外商公司,開始學習不一樣領域的知識,並繼續讓自己保持正向的思考與競爭力。<br />
<br />
然而,在這個新的工作領域中,我的工作內容暫時不需要自己去寫程式,雖然暫時放棄的寫程式的機會,但是我卻多了許多的機會去接觸不同的人事物,並讓自己反省過去到底浪費的多少生命在ㄧ些「不必要的人事物」 上面。<br />
<br />
然而「不進步就是退步」,在最近看到ㄧ些前日商台灣同事連被詢問留下機會都沒有,就被直接裁員,最近才在找工作,心中更是感概萬千。<br />
<br />
雖然很想幫忙,但面對到友情/現實時,我們也只能選擇性幫忙。畢竟社會是現實的,冗員與戰力你只能選擇有戰力的幫忙,否則接納到冗員的公司也只能自求多福了。<br />
<br />
所以,在世界競爭激烈的環境之下,唯有自己持續進步,在遇到這種公司關閉/退出市場或是裁員時,我們才能在裡面繼續生存下去。<br />
2016.02 Harrison<br />
<br />
<br />小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com9tag:blogger.com,1999:blog-34652574.post-17679578144768006592015-02-23T23:00:00.003-08:002015-02-23T23:00:34.321-08:00Compiler intrinsics(內建函數)EDK2 中開/關VC++內建函數的方式<br />
<br />
平常如果你使用Compiler /Oi 選項時,Compiler自己遇到<b>內建函數</b>時會自己去產生CODE到你的程式碼之中,如果你想要<b>自己寫這些內建函數</b>時,就必須要用/Oi- 去關閉他,以免被當成內建函數而出現Compiler error訊息。<br />
<br />
例如,我想在我自己的xxx.c 中自己實作一個 ceil() 函數,那你可以透過EDK2 build option override方式在xxx.dsc 中來對你的xxx.inf 設定Compiler option,他只會影響你的xxx.inf。<br />
<br />
$(MY_PATH)\xxx.inf {<br />
<BuildOptions><br />
*_*_X64_CC_FLAGS = /Oi-<br />
}<br />
<br />
<br />小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com0tag:blogger.com,1999:blog-34652574.post-87722405325523411872014-12-25T22:33:00.001-08:002014-12-25T22:33:46.408-08:00開啟CMD.EXE並一次執行多個DOS指令的方式(Command Prompt and Batch file)這篇文章是分享如何開啟CMD.EXE時並一次執行多個DOS指令的方式。<br />
<br />
<b>為什麼要分享這個冷知識?</b><br />
<i><span style="color: red;">因為現在是冬天了,所以很冷。</span></i><br />
<br />
好吧,我承認這是個很無聊的一篇文章,大家就將就點看吧 :)<br />
<br />
首先呢,我們都知道Command Prompt 是執行CMD.EXE後就會產生出來的一個畫面,那我們能不能寫個批次檔去執行CMD.EXE又可以執行很多筆指令呢? 答案是可以的,做法就是寫個批次檔,然後透過<span style="color: red;">"雙引號"</span>去把所有指令包起來,<span style="color: blue;">指令跟指令中間加入 &&</span> 就可以了:<br />
<br />
<br />
CMD.EXE <span style="color: red;">"</span>指令1 <span style="color: blue;">&&</span> 指令2 <span style="color: blue;">&&</span> 指令3....<span style="color: blue;">&&</span>指令n<span style="background-color: white;"><span style="color: red;">"</span></span><br />
<br />
底下就是兩個批次檔的範例,批次檔內會去執行簡單的DOS指令,執行完畢後會出現一個Command Prompt停在那邊。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt5Cp_LkzRvsKrt-UZRS0kqOs5KPUkU4a4__zkscqld9OTDk1UPzb-yb2aYhSkOJmWeS_fG1iihT61nIKcLzYA1RIn5p136MH4iEMnYcDJsfDqx3menfh-DgE4QqLRcLOCWHD9hw/s1600/Cmd.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt5Cp_LkzRvsKrt-UZRS0kqOs5KPUkU4a4__zkscqld9OTDk1UPzb-yb2aYhSkOJmWeS_fG1iihT61nIKcLzYA1RIn5p136MH4iEMnYcDJsfDqx3menfh-DgE4QqLRcLOCWHD9hw/s1600/Cmd.jpg" height="216" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyNeGRjuMZdjjh83QFTvOcj29M_RoqJXET8VhXX_lLG45yN359rGZttteTYqP-XYyq1mghMXj5sFFi6OW7vpohXekjKj09zAMV7SD2pqa0iAaoYSeMCiKOsjnwX86S-Jru20UFhQ/s1600/Cmd2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyNeGRjuMZdjjh83QFTvOcj29M_RoqJXET8VhXX_lLG45yN359rGZttteTYqP-XYyq1mghMXj5sFFi6OW7vpohXekjKj09zAMV7SD2pqa0iAaoYSeMCiKOsjnwX86S-Jru20UFhQ/s1600/Cmd2.jpg" height="273" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
那大家可能會好奇我用在哪裡? 因為我使用SlickEdit 去編寫BIOS CODE,因為懶惰,所以想說我只要開啟 BUILD TIP底下任何一個檔案,然後按個鈕,我就可以進入到工作目錄並且設定好Visual Studio 的環境讓我可以直接Compiler code....就醬~</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqCSkmfuwSClEwHJoiSjCcHEa5My6Mjmt5lozmWf3CVzD1-q3VTKsHxsWywFF7Kyok3gb85rF5L0fjAgXzjG8oC-VFbzwtvYgbeXunfqs3MHe_TU5ffaDVot-orGXyuYfgL1SPig/s1600/CMD3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqCSkmfuwSClEwHJoiSjCcHEa5My6Mjmt5lozmWf3CVzD1-q3VTKsHxsWywFF7Kyok3gb85rF5L0fjAgXzjG8oC-VFbzwtvYgbeXunfqs3MHe_TU5ffaDVot-orGXyuYfgL1SPig/s1600/CMD3.jpg" height="202" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj92hxMKu9M7abXs_LmRCEdhiiWgd7GBMWK8DYw2MVcIAzIouihjnzgLwEJ4HPgISgh2GHfvhHdRtKFny9L_PwDzsdO8Xj9kYzncsGkwKsj4pyqGonXyMa8iUYPt6_TFmYAxvz-8w/s1600/CMD4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj92hxMKu9M7abXs_LmRCEdhiiWgd7GBMWK8DYw2MVcIAzIouihjnzgLwEJ4HPgISgh2GHfvhHdRtKFny9L_PwDzsdO8Xj9kYzncsGkwKsj4pyqGonXyMa8iUYPt6_TFmYAxvz-8w/s1600/CMD4.jpg" height="65" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
※ 上圖可以看到我在SlickEdit 內開啟了一個檔案,叫做NT32Pkg.dsc ,然後我設定了兩個快捷鈕,這兩個快捷鈕可以讓我選擇設定VS2012/VS2010的環境,按下去之後他會幫我呼叫設定環境的批次檔,環境設定好之後會直接幫我進入到NT32Pkg.dsc 目錄(E:\UDK2014.SP1\NT32Pkg),然後我就可以很方便地在Command Prompt內做我要做的事情了。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
底下是我在那兩個快捷鍵內的設定值,有分成CMD.EXE的設定方式跟BATCH的方式,差別就只是在於呼叫CMD.EXE去做事情還是自己寫個批次檔,然後呼叫那個批次檔而已。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
CMD.EXE的方式:</div>
<div style="background-color: black; color: white; font-family: Fixedsys; font-size: 10pt;">
<pre>cmd /E:ON /V:ON /k ""C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat" && cd/d "%f\..""</pre>
</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
BATCH FILE的方式(除了描述在快捷鈕之外,要多寫一個批次檔):</div>
<div style="background-color: black; color: white; font-family: Fixedsys; font-size: 10pt;">
<pre>"C:\Apps\TEST.bat" %f</pre>
</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
TEST.bat的內容:<br />
<i>@ECHO OFF</i><br />
<i>CALL "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat"</i><br />
<i>cd/d "%1\.."</i><br />
<i>CMD.EXE </i><br />
<br />
上述中的%f 是SlickEdit內的參數,%f = 目前檔案的完整路徑。<br />
以上面的範例來說:<br />
<br />
%f = e:\UDK2014.SP1\Nt32Pkg\Nt32Pkg<br />
<br />
最後,我承認科技使用來自於人的惰性,不然也不會有這個冷知識可以分享,哈~<br />
<br />
<br />小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com1tag:blogger.com,1999:blog-34652574.post-87737416464376747992014-12-23T22:36:00.003-08:002014-12-23T22:36:54.303-08:00Intel® UEFI Development Kit Debugger Tool (Intel UDK Debugger and OVMFPkg)<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;">這篇文章是紀錄我自己架設 QEMU + OVMF + Intel UDK + WinDbg 環境的筆記。</span></span><br />
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><br /></span></span>
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><b><u>QEMU :</u></b> 他是一個Open Source的處理器仿真器與模擬器。</span></span><br />
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><a href="http://wiki.qemu.org/Main_Page">http://wiki.qemu.org/Main_Page</a></span></span><br />
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"> </span></span><br />
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><b><u>OVMF :</u></b> 他是一個UEFI EDK2 codebase裡面的一個專案,用來讓UEFI BIOS可以跑在虛擬機器(Virtual Machine)上面,在這裡的範例就是跑在QEMU裡面。</span></span><br />
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><a href="http://tianocore.github.io/ovmf/">http://tianocore.github.io/ovmf/</a></span></span><br />
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><br /></span></span>
<div style="orphans: 2; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><b><u>Intel UDK Debugger :</u></b> 這是INTEL開發的一個Source Level Debugger,他需要配合WinDbg(微軟提供的)才能做除錯的動作。</span></div>
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><br /></span></span>
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><a href="http://uefidk.com/develop/intel-uefi-tools-and-utilities/intel-uefi-development-kit-debugger-tool">Intel Uefi Development Kit Debugger Tool</a></span></span><br />
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><br /></span></span>
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;">下面這張圖是我實際的架設環境,我在Windows 8.1裡面安裝了Intel UDK跟WinDbg然後透過<b><span style="color: red;">虛擬的COM Port</span></b>來與 QEMU裡面的BIOS.BIN(OVMF.FD)溝通。</span></span><br />
<div>
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtJ2e_a-P7GYKAENFo-l9hYpeFj8MoZE3N2z_-YlOKG3i3tydlQAk4aWnrRTZS3VQZMPp6de1WXC_wu2ZNfG9qeNJzVwCxgaD67FJF_WQq_Y2wUPPQPX8_B-8kXueMQDjqlU50AQ/s1600/UDK.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Courier New, Courier, monospace;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtJ2e_a-P7GYKAENFo-l9hYpeFj8MoZE3N2z_-YlOKG3i3tydlQAk4aWnrRTZS3VQZMPp6de1WXC_wu2ZNfG9qeNJzVwCxgaD67FJF_WQq_Y2wUPPQPX8_B-8kXueMQDjqlU50AQ/s1600/UDK.jpg" height="287" width="400" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><b><u><span style="font-family: Courier New, Courier, monospace;">安裝與設定(Install and Setup)</span></u></b></span></div>
<div>
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><br /></span></span></div>
<div>
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><b>STEP1 : </b>Download UDK2014.SP1 ,OvmfPkg and OptionRomPkg</span></span></div>
<div>
<span style="orphans: 2; text-align: -webkit-auto; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><br /></span></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><span style="orphans: 2; text-align: -webkit-auto; widows: 2;">我是把它們一起放在</span><span style="orphans: 2; widows: 2;">E:\UDK2014.SP1; 然後先準備好Compiler環境,並產生OVMF.FD. (環境的部分請參考UDK2014與OVMF的說明)。</span></span></div>
<div>
<span style="orphans: 2; widows: 2;"><span style="font-family: Courier New, Courier, monospace;"><br /></span></span></div>
<div>
<span style="orphans: 2; widows: 2;"><span style="font-family: Courier New, Courier, monospace;">確定Compiler 環境沒問題後,跟隨下面步驟來產生UEFI BIOS ROM。</span></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;">1).先產生 OVMF.FD</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace; font-size: xx-small;"><i> a. E:\UDK2014.SP1>edksetup.bat</i></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace; font-size: xx-small;"><i> b. E:\UDK2014.SP1>build -DDEBUG_ON_SERIAL_PORT=TRUE -DSOURCE_DEBUG_ENABLE</i></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;">2). 在把OVMF.FD複製一份,並修改檔案名稱為bios.bin (rename)</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"> (我是放在 E:\UDK2014.SP1\Build\Ovmf3264\DEBUG_VS2012x86\FV\bios.bin)</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<i><span style="font-family: Courier New, Courier, monospace; font-size: xx-small;"> a.E:\UDK2014.SP1> <span style="color: red;">cd E:\UDK2014.SP1\Build\Ovmf3264\DEBUG_VS2012x86\FV</span><br /> b.E:\UDK2014.SP1\Build\Ovmf3264\DEBUG_VS2012x86\FV> <span style="color: red;">copy OVMF.FD bios.bin</span></span></i></div>
</div>
</div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><b>STEP2:</b> 安裝(Install) WinDbg </span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><b>STEP3: </b>安裝Virtual Serial Port,你可以選擇Com0Com或是VSPD(Virtual Serial Port Driver),因為Com0Com 是免費(Free),另一個要破解(VSPD v7.2),所以我這邊就只介紹Com0Com 就好,破解版的我就自己知道就好這邊就不介紹了。</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;">1) 先執行一個Cmd.exe with Admin (管理者權限)</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"> <i><span style="font-size: xx-small;">bcdedit -set TESTSIGNING ON</span></i></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;">2)重新開機 (Reboot)</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;">3) 安裝Com0Com 2.2.2.0 (For Windows 8.1/Win7 x64 bit) </span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><a href="http://sourceforge.net/projects/com0com/files/com0com/2.2.2.0/">com0com-2.2.2.0-x64-fre-signed.zip</a></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;">4) 執行 <span style="text-align: -webkit-auto;">"C:\Program Files (x86)\com0com\setupc.exe",並在畫面中輸入下面指令:</span></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="text-align: -webkit-auto;"><span style="font-family: Courier New, Courier, monospace;"><br /></span></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="text-align: -webkit-auto;"><span style="font-family: Courier New, Courier, monospace;"> <i><span style="font-size: xx-small;">Command > Install PortName=COM6 PortName=COM7</span></i></span></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="text-align: -webkit-auto;"><span style="font-family: Courier New, Courier, monospace;"><br /></span></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;">5) 確認設備管理員(Device Manager)內有成功安裝driver,並且No yellow bang.</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><b>STEP4: </b>安裝(Install) Intel UDK v1.4 </span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;">※如果你是Windows 8.1 ,請設定相容性=Windows 7 (<span style="color: #505050; font-size: 13px; font-weight: bold; line-height: 20px;">Compatibility mode=Windows 7</span><span style="text-align: -webkit-auto;">)</span></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"> </span><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnTytdBmigGsnIhkm7jD-ZlEbZ8YufR8_8J2VkCrWviUABJ-wCyZ32PhXbCo53oFXDp8Y3Z4AdrGV2LOzTJq91gnH2vBYwGN8FIi-_LSRTTlYRlQvB5AUL5E7IAGL-WEXklVReYQ/s1600/Win7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Courier New, Courier, monospace;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnTytdBmigGsnIhkm7jD-ZlEbZ8YufR8_8J2VkCrWviUABJ-wCyZ32PhXbCo53oFXDp8Y3Z4AdrGV2LOzTJq91gnH2vBYwGN8FIi-_LSRTTlYRlQvB5AUL5E7IAGL-WEXklVReYQ/s1600/Win7.jpg" height="201" width="320" /></span></a></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<span style="font-family: Courier New, Courier, monospace;">1) 安裝過程中會指定WinDbg安裝目錄跟COM port Number,你也可以安裝完畢後,再去修改他的設定檔案(Config File):</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace; font-size: xx-small;"><i>"C:\Program Files (x86)\Intel\Intel(R) UEFI Development Kit Debugger Tool\SoftDebugger.ini"</i></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"> </span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;">底下是我實作時候的設定:</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;">COM6 = Intel UDK</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;">COM7 = QEMU</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;">2) 安裝後,修改SoftDebugger.ini 加入以及修改底下的描述(RED COLOR)</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<i style="font-size: x-small;"><span style="font-family: Courier New, Courier, monospace;">"C:\Program Files (x86)\Intel\Intel(R) UEFI Development Kit Debugger Tool\SoftDebugger.ini"</span></i></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<div style="text-align: -webkit-auto;">
<span style="color: red; font-family: Courier New, Courier, monospace;">[Debug]</span></div>
<div style="text-align: -webkit-auto;">
<span style="color: red; font-family: Courier New, Courier, monospace;">Debug=1</span></div>
<div style="text-align: -webkit-auto;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="text-align: -webkit-auto;">
<span style="font-family: Courier New, Courier, monospace;">[Debug Port]</span></div>
<div style="text-align: -webkit-auto;">
<span style="font-family: Courier New, Courier, monospace;">Channel = Serial</span></div>
<div style="text-align: -webkit-auto;">
<span style="font-family: Courier New, Courier, monospace;">Port = COM6</span></div>
<div style="text-align: -webkit-auto;">
<span style="color: red; font-family: Courier New, Courier, monospace;">FlowControl = 0 </span></div>
<div style="text-align: -webkit-auto;">
<span style="font-family: Courier New, Courier, monospace;">BaudRate = 115200</span></div>
<div style="text-align: -webkit-auto;">
<span style="font-family: Courier New, Courier, monospace;">Server = </span></div>
</div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="text-align: -webkit-auto;"><span style="font-family: Courier New, Courier, monospace;"><b>STEP5: </b> 執行Intel UDK Debugger,他會叫出WinDbg</span></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><b>STEP6: </b>執行QEMU 並且載入UEFI BIOS (Load BIOS.bin)</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<div>
<span style="text-align: -webkit-auto;"><span style="font-family: Courier New, Courier, monospace; font-size: xx-small;"><i>E:\UDK2014.SP1\Build\Ovmf3264\DEBUG_VS2012x86\FV><span style="color: red;">"C:\Program Files\qemu\qemu-system-x86_64.exe" -L . -serial COM7</span></i></span></span></div>
</div>
<div style="font-family: 'Microsoft YaHei'; orphans: 2; text-align: -webkit-auto; widows: 2;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjplGaLW-LMk-8AftihRCuvtC0W8S06Tr9-2P6VV-rWY0iSqtNwmBcT-XtAs2bGbHfLPp9Sb0ksk4eV-WR0j8SKkT_SNlLh-g9ZbJ28woBCTDylE7WCTMfrkIpbsLmwqgTQtl0jDA/s1600/UDK_OK.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjplGaLW-LMk-8AftihRCuvtC0W8S06Tr9-2P6VV-rWY0iSqtNwmBcT-XtAs2bGbHfLPp9Sb0ksk4eV-WR0j8SKkT_SNlLh-g9ZbJ28woBCTDylE7WCTMfrkIpbsLmwqgTQtl0jDA/s1600/UDK_OK.jpg" height="262" width="400" /></a></div>
<div style="font-family: 'Microsoft YaHei'; orphans: 2; text-align: -webkit-auto; widows: 2;">
<br /></div>
<div style="font-family: 'Microsoft YaHei'; orphans: 2; text-align: -webkit-auto; widows: 2;">
<br /></div>
<div style="font-family: 'Microsoft YaHei'; orphans: 2; text-align: -webkit-auto; widows: 2;">
如果有不清楚的部分,可以參考INTEL相關資料。</div>
<div>
<span style="font-family: 'Microsoft YaHei'; orphans: 2; text-align: -webkit-auto; widows: 2;"><br /></span></div>
<div>
<span style="font-family: 'Microsoft YaHei'; orphans: 2; text-align: -webkit-auto; widows: 2;"><br /></span></div>
<div>
<span style="font-family: 'Microsoft YaHei'; orphans: 2; text-align: -webkit-auto; widows: 2;"><br /></span></div>
<div>
<span style="font-family: 'Microsoft YaHei'; orphans: 2; text-align: -webkit-auto; widows: 2;"><br /></span></div>
<div>
<span style="font-family: 'Microsoft YaHei'; orphans: 2; text-align: -webkit-auto; widows: 2;"><br /></span></div>
<br />
<br />小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com2tag:blogger.com,1999:blog-34652574.post-54994895702584814842014-12-19T00:59:00.003-08:002014-12-19T00:59:44.299-08:00VC++ 可轉散發套件(Redistributable Package)<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
這篇文章只是要告訴大家可轉散發套件(<b>VC++ </b><span style="background-color: white; font-family: 'helvetica neue', helvetica, arial, 'microsoft jhenghei', 'Heiti TC', sans-serif; line-height: 19.5px;"><b>Redistributable Package</b>) </span>是幹甚麼的?</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
1)首先呢,我先在我的Win7 64 bit OS底下安裝VS2008 ,安裝時順便選擇我要裝<b>x64 compiler</b>,這樣子我的開發環境就會有VS2008 32 bit/64 bit compiler 功能!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
2) 接著,我建立一個新的VC++空專案(VC++-->General-->Empty Project),裡面加入我自己的C 語言Source code (Tmake.c 跟Tmake.h),然後再專案屬性的地方先設定Win32 (Right click Project -->Properties ,在Platform 的地方選"<b>Win32</b>")</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
3) 先產生一次32 bit的應用程式,他會產生再輸出目錄 『<b>Debug</b>\Tmake.exe』</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
4) 接著,修改專案屬性,改選擇x64 ((Right click Project -->Properties ,在Platform 的地方選"<b>x64</b>"),<b>如果你沒看到x64可以選擇,就是在安裝VisualStudio時沒選擇x64 compiler選項</b>。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
5) 然後再產生一次 64 bit的應用程式,他會產生在輸出目錄『<b>x64\Debug</b>\Tmake.exe』</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
完成了步驟5之後,我就會有兩個執行檔,分別是32 bit版本跟64 bit版本。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>底下是我的開發環境 (產生執行檔,但是拿到別台去執行)</u></b></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u><br /></u></b></div>
<div>
OS: Windows 7 64 bit</div>
<div>
Visual Studio 2008<br />
<div>
<br /></div>
<div>
<h3 style="background-color: white; border: 0px; color: #1a1a1a; font-family: '微軟正黑體Microsoft JhengHei', '微軟正黑體 Microsoft JhengHei', 'Microsoft JhengHei', 微軟正黑體, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; font-stretch: inherit; line-height: 1.25em; margin: -3px 0px 3px; padding: 0px; vertical-align: baseline;">
<u><span style="font-size: small;">底下是我的執行環境 (這台機器上面執行我自己寫的程式)</span></u></h3>
</div>
<div>
OS : Windows 8.1 64 bit</div>
<div>
Visual Studio 2012/2013</div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWQEyLxCZONo8glnu5LmPz2h8RqXoH0yx_OGJqKU6QXOa8NekT3jNLR8W9JLdxhkZTYI8PaBT4MjdXnr6xg3tSmO2NiBoSz2GPOFugLPPv4SXDuJ9xwUNZ30igmE-GUEHWtnA8tw/s1600/3264.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWQEyLxCZONo8glnu5LmPz2h8RqXoH0yx_OGJqKU6QXOa8NekT3jNLR8W9JLdxhkZTYI8PaBT4MjdXnr6xg3tSmO2NiBoSz2GPOFugLPPv4SXDuJ9xwUNZ30igmE-GUEHWtnA8tw/s1600/3264.jpg" height="242" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
[圖1] 32 bit/64 bit 的主要差別除了暫存器之外就是在於 Calling Convention (呼叫慣例)</div>
<div>
<br /></div>
<div>
所以大家可以看到,我在Win7開發拿到另一台Win8.1 上面執行,而在Win8.1中我只安裝了Visual Studio 2012/2013這兩個版本,但是我的Win7開發時是Visual Studio 2008開發的。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
所以,當我在Win8.1底下不管是執行32 bit 版本的Tmake.exe 或是 64 bit 版本的Tmake.exe 我都得到了相同的錯誤訊息。</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: red;">ERROR MESSAGE: 因為應用程式檔設定不正確,所以無法啟動</span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYaGYa6n2_BywlRDHNz6N5ehYEx_Rda6R3lCvVBhN2_RLXb2g28NJi1H7NfD_abdrtg20fUUcxLaPCS71u0Ab1bA7_Gqs4qjWHaTS2mKDLK9iYGMIpWdiIpRufurqtigm_JluScQ/s1600/error.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYaGYa6n2_BywlRDHNz6N5ehYEx_Rda6R3lCvVBhN2_RLXb2g28NJi1H7NfD_abdrtg20fUUcxLaPCS71u0Ab1bA7_Gqs4qjWHaTS2mKDLK9iYGMIpWdiIpRufurqtigm_JluScQ/s1600/error.jpg" height="173" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
[圖 2] 無論32/64 bit 都得到相同的錯誤訊息</div>
<br />
<br />
假如你看到類似這種錯誤訊息時,只要去安裝可轉發套件,把需要的檔案<b>補足</b>在你的電腦中理論上問題就會消失了,但是 "<span style="color: red;">你要找的到正確的版本的可轉發套件</span>" (後面會講找不到時的解決方式)。<br />
<br />
<div>
<div>
<br /></div>
<div>
<b>底下版本是VS2008 version v9.0.30729</b></div>
<div>
<h3 style="background-color: white; border: 0px; color: #1a1a1a; font-family: '微軟正黑體Microsoft JhengHei', '微軟正黑體 Microsoft JhengHei', 'Microsoft JhengHei', 微軟正黑體, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; font-stretch: inherit; font-weight: normal; line-height: 1.25em; margin: -3px 0px 3px; padding: 0px; vertical-align: baseline;">
<a bi:index="2" class="mscom-link" href="http://www.microsoft.com/zh-tw/download/details.aspx?id=5582" id="2e31cba0-7b49-4dd7-4f67-94bfeb847e34" style="-webkit-transition: color 0.1s linear; border: 0px; color: #0044cc; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; transition: color 0.1s linear; vertical-align: baseline;" target="_self"><span style="font-size: small;"><b style="border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">Microsoft</b> <b style="border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">Visual</b> <b style="border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">C++</b> <b style="border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">2008</b> <b style="border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">SP1</b> 可轉散發套件 (x86)</span></a></h3>
</div>
<div>
<h3 style="background-color: white; border: 0px; color: #1a1a1a; font-family: '微軟正黑體Microsoft JhengHei', '微軟正黑體 Microsoft JhengHei', 'Microsoft JhengHei', 微軟正黑體, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; font-stretch: inherit; font-weight: normal; line-height: 1.25em; margin: -3px 0px 3px; padding: 0px; vertical-align: baseline;">
<a bi:index="4" class="mscom-link" href="http://www.microsoft.com/zh-tw/download/details.aspx?id=2092" id="2e31cba0-7b49-4dd7-4f67-94bfeb847e34" style="-webkit-transition: color 0.1s linear; border: 0px; color: #0044cc; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; transition: color 0.1s linear; vertical-align: baseline;" target="_self"><span style="font-size: small;"><b style="border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">Microsoft</b> <b style="border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">Visual</b> <b style="border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">C++</b> 2008 SP1 可轉散發套件 (x64)</span></a></h3>
</div>
<div>
<br /></div>
<div>
<h3 style="background-color: white; border: 0px; color: #1a1a1a; font-family: '微軟正黑體Microsoft JhengHei', '微軟正黑體 Microsoft JhengHei', 'Microsoft JhengHei', 微軟正黑體, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; font-stretch: inherit; line-height: 1.25em; margin: -3px 0px 3px; padding: 0px; vertical-align: baseline;">
<span style="font-size: small;">底下版本是VS2008 v9.0.30729.6161 (比上面的還新一點)</span></h3>
</div>
<div>
<h3 style="background-color: white; border: 0px; color: #1a1a1a; font-family: '微軟正黑體Microsoft JhengHei', '微軟正黑體 Microsoft JhengHei', 'Microsoft JhengHei', 微軟正黑體, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; font-stretch: inherit; line-height: 1.25em; margin: -3px 0px 3px; padding: 0px; vertical-align: baseline;">
<span style="font-size: small;"><a href="http://www.microsoft.com/en-us/download/details.aspx?id=26368">Microsoft Visual C++ 2008 Service Pack 1 Redistributable Package MFC Security Update</a></span></h3>
<h3 style="background-color: white; border: 0px; color: #1a1a1a; font-family: '微軟正黑體Microsoft JhengHei', '微軟正黑體 Microsoft JhengHei', 'Microsoft JhengHei', 微軟正黑體, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; font-stretch: inherit; line-height: 1.25em; margin: -3px 0px 3px; padding: 0px; vertical-align: baseline;">
<span style="font-size: small;"><br /></span></h3>
<h3 style="background-color: white; border: 0px; color: #1a1a1a; font-family: '微軟正黑體Microsoft JhengHei', '微軟正黑體 Microsoft JhengHei', 'Microsoft JhengHei', 微軟正黑體, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; font-stretch: inherit; line-height: 1.25em; margin: -3px 0px 3px; padding: 0px; vertical-align: baseline;">
<span style="font-size: small;">另外,你可以在安裝完畢後,從System Event Log看到你到底安裝了甚麼版本:</span></h3>
<h3 style="background-color: white; border: 0px; color: #1a1a1a; font-family: '微軟正黑體Microsoft JhengHei', '微軟正黑體 Microsoft JhengHei', 'Microsoft JhengHei', 微軟正黑體, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; font-stretch: inherit; line-height: 1.25em; margin: -3px 0px 3px; padding: 0px; vertical-align: baseline;">
<span style="font-size: small;"><i style="font-weight: normal;">Windows Installer 已安裝該產品。產品名稱: Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.6161。產品版本: 9.0.30729.6161。產品語言: 1033。製造商: Microsoft Corporation。安裝成功或錯誤狀態: 0</i></span></h3>
<h3 style="background-color: white; border: 0px; color: #1a1a1a; font-family: '微軟正黑體Microsoft JhengHei', '微軟正黑體 Microsoft JhengHei', 'Microsoft JhengHei', 微軟正黑體, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; font-stretch: inherit; line-height: 1.25em; margin: -3px 0px 3px; padding: 0px; vertical-align: baseline;">
<span style="color: red; font-size: small;">如果,你安裝完畢後還不能執行的話,那就是版本不同! </span></h3>
</div>
<div>
<span style="font-size: small;"><br /></span></div>
<div>
如果你從System Event Log 查看,也會看到類似下面的錯誤訊息:<br />
<br />
<i><span style="font-size: x-small;">"D:\TmakeJpg\Debug\Tmake.exe" 的<span style="color: red;">啟用內容產生失敗。 找不到依存組合 </span>Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="<span style="color: red;">9.0.21022.8</span>"。</span></i><br />
<br />
<div>
意思是說你執行Tmake.exe的電腦內的所能提供的執行環境跟這個應用程式內所要求的版本不同; 從上面的範例可以知道我安裝的都是v9.0.30729.xxxx 但是這個應用程式需要的是9.0.21022.8,這個時候,你有幾個解決方式。<br />
<br />
方式1: 從開發的機器上把需要的檔案複製到執行的機器上的<b>Windows\System32</b> 底下<br />
需要的檔案需要配合你的應用程式的類型來複製對應的檔案,例如:<br />
<br />
<span style="color: red; font-size: xx-small;">Release Build 64 bit(x64): </span><br />
<span style="font-size: xx-small;">C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\<span style="color: red;">Amd64</span>\Microsoft.VC90.CRT </span><br />
<span style="color: red; font-size: xx-small;">Release Build 32 bit(Win32): </span><br />
<span style="font-size: xx-small;">C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\<span style="color: red;">x86</span>\Microsoft.VC90.CRT </span><br />
<span style="font-size: xx-small;"><br /></span>
<span style="font-size: xx-small;">msvcm90.dll</span><br />
<span style="font-size: xx-small;">msvcp90.dll</span><br />
<span style="font-size: xx-small;">msvcr90.dll</span><br />
<span style="font-size: xx-small;">Microsoft.VC90.CRT.manifest</span><br />
<span style="font-size: xx-small;"><br /></span>
<span style="color: red; font-size: xx-small;">Debug Build 64 bit(x64):</span><br />
<span style="font-size: xx-small;">C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\<span style="color: red;">amd64</span>\Microsoft.VC90.DebugCRT</span><br />
<span style="font-size: xx-small;"><br /></span>
<span style="color: red; font-size: xx-small;">Debug Build 32 bit(Win32):</span><br />
<span style="font-size: xx-small;">C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\<span style="color: red;">x86</span>\Microsoft.VC90.DebugCRT</span><br />
<span style="font-size: xx-small;"><br /></span>
<span style="font-size: xx-small;">msvcm90d.dll</span><br />
<span style="font-size: xx-small;">msvcp90d.dll</span><br />
<span style="font-size: xx-small;">msvcr90d.dll</span><br />
<span style="font-size: xx-small;">Microsoft.VC90.DebugCRT.manifest</span><br />
<br />
方式2 : 把前面這些需要的檔案打包變成xxx.exe 再一起拿去執行的電腦安裝與執行.<br />
<br />
請參考: http://msdn.microsoft.com/en-us/library/ms235291(v=vs.80).aspx<br />
http://msdn.microsoft.com/en-us/library/aa260978%28VS.60%29.aspx<br />
<br />
方式3: 在專案屬性中選擇使用靜態MFC Library. (Win32/X64都要設定一次) 再重新編譯執行檔就可以了。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMUANpASR3gB13liUKTbpDlMSiSPoe5zItoG-tDA9V8ACbWyLjISj7ViNj201s5OhN9esS39uTymQ11_cXOOiVCk69bDKXOeNTWyHZtNRE9Neoj_ufg_cUuIyVXENCfFA1YbvpzQ/s1600/MFC.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMUANpASR3gB13liUKTbpDlMSiSPoe5zItoG-tDA9V8ACbWyLjISj7ViNj201s5OhN9esS39uTymQ11_cXOOiVCk69bDKXOeNTWyHZtNRE9Neoj_ufg_cUuIyVXENCfFA1YbvpzQ/s1600/MFC.jpg" height="292" width="640" /></a></div>
<br />
<br />
結論 :<br />
<br />
VC++的轉散發套件就是給『跟你開發環境不同』的人去補足需要的Library/DLL之後,才能順利執行你所開發的應用程式。<br />
<br />
所以,程式開發者可以選擇『自己打包好所需要的檔案』後再提供給使用者免去使用者無法執行的窘境,或是使用者自己無法執行應用程式時去安裝對應的『轉散發套件』。<br />
<br /></div>
[註] 我的測試程式後來採用方式3解決問題! 系統就算不安裝VC++的轉散發套件也沒問題。<br />
<br />
<br /></div>
</div>
小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com2tag:blogger.com,1999:blog-34652574.post-81550886618762677152014-10-23T21:20:00.001-07:002014-10-24T02:34:28.436-07:00WMI ACPI <div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: large;"><b><u>今天要整理的筆記是WMI ACPI</u></b></span><br /><span style="font-size: x-small;"> </span></span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: x-small;"> </span> 在BIOS工程師中,對於WMI ACPI應該大家都有玩過,因為許多的OEM都是開發一些OS端的應用程式,然後再透過WMI 這種方式去跟BIOS的ACPI ASL CODE做溝通,以達到可以讀取Thermal 資訊/EC 資訊/ BIOS Setup Utility 資訊....etc.</span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: x-small;"><br /> </span> 在網路上或是微軟的相關文件中,你可以看到主要的架構在於wmiacpi.sys 跟acpi.sys 之間的溝通,對於BIOS工程師來說,如果要去提供這種介面就不得不參考微軟的wmi acpi白皮書上面介紹的內容了,底下是微軟文件的說明:</span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /><span style="font-size: x-small;">http://msdn.microsoft.com/en-us/library/windows/hardware/dn614028(v=vs.85).aspx</span></span></div>
<div style="color: #3a3e43;">
<br />
<b style="font-family: Arial, Helvetica, sans-serif;">這份文件中主要的概念有幾個:</b></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif;"><b><br /></b></span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">1. 他跟你說有一個MOF(Managed Object Format) 是用來給 WMI Core使用的,所以他有個資料庫管理這些MOF檔案;當上層的APP跟WMI Core溝通時,他要去這個資料庫撈對應的MOF資訊,從MOF資訊中取得一些資訊後,才知道怎麼跟你的ACPI溝通!</span></div>
<div style="color: #3a3e43;">
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">2.溝通的那個ACPI Device有一個特別的PNPID,也就是PNP0C14 ! 所以BIOS工程師要宣告一個ACPI Device然後底下定義_HID , "PNP0C14" 這樣子才能夠溝通~</span></div>
<div style="color: #3a3e43;">
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">3.Wmi Core 溝通的方式就請自行看這篇文章,像是如何透過GUID找到ACPI _WDG內比對GUID然後找到兩個字元後,再去看Flag屬性是否是Method,然後去執行相關的ACPI Method...之類的資訊,因為這些資訊已經在網路上很多,大家也應該熟悉了,<b>這邊就不多描述</b>。 底下是對_WDG對應時的C語言格式:</span></div>
<div style="color: #3a3e43;">
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span></div>
<pre style="font-family: Consolas, Courier, monospace !important; line-height: 20.0059986114502px; overflow: auto; padding: 5px; word-wrap: normal;"><span style="font-size: xx-small;"><i>typedef struct
{
GUID guid; // GUID that names data block
union
{
CHAR ObjectId[2]; // 2-character ACPI ID (Data Blocks and Methods)
struct
{
UCHAR NotificationValue; // Byte value passed by event handler control method
UCHAR Reserved[1];
} NotifyId;
}
USHORT InstanceCount; // Number of separate instances of data block
USHORT Flags; // Flags
};</i></span></pre>
<pre style="font-family: Consolas, Courier, monospace !important; font-size: 14px; line-height: 20.0059986114502px; overflow: auto; padding: 5px; word-wrap: normal;">上面的C結構會對應倒ASL的_WDG 內的定義:</pre>
<pre style="overflow: auto; padding: 5px; word-wrap: normal;"><span style="font-family: Consolas, Courier, monospace; font-size: xx-small;"><span style="line-height: 20.0059986114502px;"> Name(_WDG, Buffer() {
0x6a, 0x0f, 0xBC,....//GUID
66, 65, // Object ID (BA) (兩個字元"BA",可能會組成WQBA或是WMBA,看Flag)
3, // Instance Count (有幾筆Data items)
0x01, // Flags (決定他是不是Method...之類的屬性來決定WQXX/WMXX...etc)
}) </span></span></pre>
<div style="color: #3a3e43;">
<br /></div>
<div style="color: #3a3e43;">
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><i><br /></i></span><span style="font-family: Arial, Helvetica, sans-serif;">那大家可能會問說,你不說運作原理那你要說甚麼?</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif;">一般BIOS工程師在Debug時一般就是利用這些運作原理去追ACPI 來找出問題點,一般大家會比較忽略說,那上層的MOF是怎麼加進去資料庫的? 所以這邊會對這部分做一個簡單的說明。</span><span style="font-family: Arial, Helvetica, sans-serif;">在說明之前,我們先看看下面這張圖:</span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs6pm78dNznG0nvApv0lwsO1XtH7UuXCRcitZhVnMN4Bhw2zBwFF2jp0NNpmx4Lh3eovefY74osQ7T3y5QHr59y9mPGPKPaziS7dqjP_srbmzhUwdhOa-JWOjVmKGq8W9XdXxhQw/s1600/Wmi_ACPI.jpg" imageanchor="1" style="font-family: Arial, Helvetica, sans-serif; font-size: small; margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs6pm78dNznG0nvApv0lwsO1XtH7UuXCRcitZhVnMN4Bhw2zBwFF2jp0NNpmx4Lh3eovefY74osQ7T3y5QHr59y9mPGPKPaziS7dqjP_srbmzhUwdhOa-JWOjVmKGq8W9XdXxhQw/s1600/Wmi_ACPI.jpg" height="320" width="206" /></a><span style="font-size: x-small;"><span style="font-family: Arial, Helvetica, sans-serif;"><b><br /></b></span></span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif;"><b>Vbscript :</b> </span><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">代表的就是上層APP可以透過像是VBScript/C#....etc之類的去開發你的APP。</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b>Wmi Core :</b><span style="font-size: x-small;"> 會去撈MOF 資訊跟Acpi.sys溝通(透過WmiAcpi.sys) 。</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b>ACPI ASL :</b> </span><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">你要宣告PNP0C14 ,然後有個Name Object 叫做 _WDG (上面圖畫錯了,懶得改了)。</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><b>BIOS Function: </b><span style="font-size: x-small;">然後透過ACPI ASL的相關Method來實做一些BIOS CODE,像是發個SMI去取得一些資訊,再透過WMI_ACPI ASL往回傳給上層APP...etc.。</span></span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b><br /></b></span><b><u><span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></u></b></div>
<div style="color: #3a3e43;">
<b><u><span style="font-family: Arial, Helvetica, sans-serif;">Installation wmi acpi方式有兩種:</span></u></b></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span><span style="font-family: Arial, Helvetica, sans-serif;"><b><u>方式1: MOF包在DLL,並註冊到Registry</u></b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>1. 增加上述說的那些ASL CODE到你的BIOS</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>2. 建立一個MOF.DLL (類似OS動態連結檔,不過裡面沒有任何OBJ只有MOF資料)</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> a. 建立wmiacpi.rc 跟wmiacpi.def 檔案</span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> b. 透過VS2010/2012/2013 的link.exe 將他變成wmiacpi.dll 裡面沒有obj,只有 MOF資料</span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b><u>wmiacpi.rc 內容:</u></b></span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>#include <windows.h></i></span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>#include <ntverp.h></i></span><br />
<br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>#define VER_FILETYPE VFT_DLL</i></span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>#define VER_FILESUBTYPE VFT_UNKNOWN</i></span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>#define VER_FILEDESCRIPTION_STR "Resource only DLL containing MOF for ASL code"</i></span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>#define VER_INTERNALNAME_STR "wmimof"</i></span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>#define VER_ORIGINALFILENAME_STR "wmimof.DLL"</i></span><br />
<br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>#include "common.ver"</i></span><br />
<br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>//</i></span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>// WMIACPI.SYS requires that the mof resource be named MofResource</i></span><br />
<br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>MofResource MOFDATA wmiacpi.bmf</i></span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<br />
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b><u>wmiacpi.def 的內容就只有一行: </u></b></span></div>
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>LIBRARY wmiacpi.dll</i></span><br />
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"> c. link command : </span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"></span></div>
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><i>rc /fo"%OUTDIR%\wmiacpi.res" wmiacpi.rc</i></span><br />
<span style="font-size: xx-small;"><i><br /></i></span>
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><i>link /OUT:"%OUTDIR%\wmiacpi.dll" /NOLOGO /DLL "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" </i></span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><i><br /></i></span>
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><i>"ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEF:"wmiacpi.def" %OUTDIR%\wmiacpi.res /MANIFEST /ManifestFile:"%OUTDIR%</i></span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><i><br /></i></span>
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><i>\wmiacpi.dll.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /PDB:"%OUTDIR%\wmiacpi.pdb" /TLBID:1 /NOENTRY /DYNAMICBASE </i></span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><i><br /></i></span>
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><i>/NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE</i></span><br />
<br />
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>3. 複製MOF.DLL檔案到%windir%\system32 (也就是C:\Windows\System32)</b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div style="color: #3a3e43;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">4. 在Registry 的HKEY_LOCAL_MACHINE\CurrentControlSet\Services\WmiAcpi底下新增MofImagePath,然後裡面的值指向 "C:\Windows\System32\MOF.DLL"</span></b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>5. 重新開機,然後OS偵測到PNP0C14之後就會自動安裝WmiAcpi.sys 然後會去Registry 找到你包在MOF.DLL內的資料,之後用你的APP來透過WMI Core去存取你的ACPI ASL.</b></span></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">※ 這邊說的MOF.DLL就是你透過link.exe 建立出來的檔案,請自行變更你的名稱</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span><span style="font-family: Arial, Helvetica, sans-serif;"><b><u>方式2: MOF包在ACPI ASL,等發送特定IRP時回給Wmi Core.</u></b></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></div>
<div style="color: #3a3e43;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">1. 增加上述說的那些ASL CODE到你的BIOS</span><br /><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></b></div>
<div style="color: #3a3e43;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">2. 建立一個MOF.BMF (MOF的Binary格式,副檔名隨便給因為你可以在Compiler時指定副檔名)</span><br /><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span></b></div>
<div style="color: #3a3e43;">
<b><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">3. 透過 </span><span style="background-color: white; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: x-small; line-height: 26px; orphans: 2; white-space: pre-wrap; widows: 2;">wmimofck.exe 產生.x 檔案,在把他的內容包到ACPI ASL之中.</span></b></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWCJ_ov_C0dCbVjOpKBLlt_qjpG08Q_ntRPvi1CJLtzLeHz5_AbVN-UiDVH8ARCkolVRxwSzECNVWGurtKrX2nU43EQlIcJLEHtd8U5cp-qXuTSBkDZmSDrMnwbishlmzqfpIk5w/s1600/wmiacpi1_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWCJ_ov_C0dCbVjOpKBLlt_qjpG08Q_ntRPvi1CJLtzLeHz5_AbVN-UiDVH8ARCkolVRxwSzECNVWGurtKrX2nU43EQlIcJLEHtd8U5cp-qXuTSBkDZmSDrMnwbishlmzqfpIk5w/s1600/wmiacpi1_1.jpg" height="42" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">a. 首先先在_WDG內定義一個專屬MOF的GUID(切記不能改變GUID值) </span></div>
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> Name(_WDG, Buffer() { </span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> .</span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> // This GUID for returning the MOF data</span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> 0x21, 0x12, 0x90, 0x05, 0x66, 0xd5, 0xd1, 0x11, 0xb2, 0xf0, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10, //</span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> 66, 65, // Object ID (BA) 這兩個字元可以自己改,但是要對應到WQXX.</span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> 1, // Instance Count </span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> 0x00, // Flags </span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> })</span><br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><br /></span>
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">b.將Wmiacpi.x 內容複製貼上到Name Object "WQBA"</span><br />
<br />
<span style="color: #3a3e43; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> Name(WQBA), Buffer(){"MOF Binary data from Wmiacpi.x"}</span><br />
<br />
<div style="color: #3a3e43;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><b>4. 重新開機,然後OS偵測到PNP0C14之後就會自動安裝WmiAcpi.sys 然後會發送特定的IRP,然後ACPI那邊會回給WMI CORE MOF的資訊~</b></span></div>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">在這兩中方式中,都需要把wmiacpi.mof 檔案先經過一個工具叫做mofcomp.exe compiler</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">而這個wmiacpi.mof 檔案的內容就是你在微軟文件那邊看到的,例如:</span><br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>class WMIEvent : __ExtrinsicEvent</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>{</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>};</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i><br /></i></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i><br /></i></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>[WMI,</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i> Locale("MS\\0x409"),</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i> Description("This class contains the definition of the package used in other classes"),</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i> guid("{ABBC0F60-8EA1-11d1-00A0-C90629100000}")</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>]</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>class Package</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>{</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i> [WmiDataId(1),</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i> read, write,</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i> Description("16 bytes of data")</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i> ] uint8 Bytes[16];</i></span><br />
<i><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"></span></i><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>};</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><i>...</i></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">然後經過mofcomp.exe compiler之後,會產生一個MOF binary 檔案,我把他叫做wmiacpi.bmf。</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">而這個wmiacpi.bmf 可以經過另一個工具wmimofck.exe </span><span style="font-family: Arial, Helvetica, sans-serif;">來產生c file / c header file ,如果你想自己寫一個Wmi driver時,可以透過這種方式把來幫助你產生一些需要的程式碼,也可以透過</span><span style="font-family: Arial, Helvetica, sans-serif;">wmimofck.exe來產生VBScript 的Sample code(自動產生),所以當然也可以透過wmimofck.exe來產生一堆HEX 文字檔來方便你把MOF binary資料包進去ACPI ASL之中。</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">底下是我的批次檔,用來測試用的,分享給大家參考~</span><br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-SrHee7wjlVkBVCqGWTaVEhWPDyjfYHZuXEsAl18uW-2vcbXfflc3NMOBieb8aXWSRo6rZ0o86kLFg3hK5lcgP9LjjP8P-2j1croEQn29i40pkSY8X8P4pHSUXK6QiDUXKinM3w/s1600/wmiacpi2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-SrHee7wjlVkBVCqGWTaVEhWPDyjfYHZuXEsAl18uW-2vcbXfflc3NMOBieb8aXWSRo6rZ0o86kLFg3hK5lcgP9LjjP8P-2j1croEQn29i40pkSY8X8P4pHSUXK6QiDUXKinM3w/s1600/wmiacpi2.jpg" height="204" width="640" /></a></div>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span><span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">※ 這邊使用到的資訊都是來自於微軟的相關文件,有興趣請自行查詢!</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">需要用到的工具:</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Windows WDK內的wmimofchk.exe (我是安裝WDK for win7 ,目前最新版是WDK 8.1)</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">Reference </span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">http://msdn.microsoft.com/en-us/library/windows/hardware/dn614028(v=vs.85).aspx</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">http://msdn.microsoft.com/en-us/library/windows/hardware/ff542012(v=vs.85).aspx</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;">http://msdn.microsoft.com/en-us/library/windows/hardware/ff554794(v=vs.85).aspx</span><br />
<br />小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com3tag:blogger.com,1999:blog-34652574.post-8162321519191896212014-09-16T03:01:00.002-07:002014-09-16T03:01:57.116-07:00EDK2/EDKII Python Build Tool 兩三事 (Build.py)<h2 style="text-align: center;">
<b>EDK2 Python Build Tool 兩三事</b></h2>
<div style="text-align: left;">
最近因為工作需要,所以不得已逼自己去把EDK2 Python Build source code看完,看完後順便整理一下一些小重點,以免過陣子自己又忘記了。</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
1)EDK_GLOBAL </div>
<div style="text-align: left;">
這種定義的Macro只能給EDK1 driver使用,因為他會去檢查.inf 內的</div>
<div style="text-align: left;">
INF_VERSION = 0x00010005 ,如果大於或是等於這個值就是當成EDK2,如果找不到這個值就會當成是EDK1。</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
因為不好用,所以就隨手改了一下CODE,讓他通吃EDK1 + EDK2 + FDF + DSC + DEC + INF</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
2) Build Rule and Package rule</div>
<div style="text-align: left;">
在EDK2 中,他把EDK1原本的Build Rule & Package Rule 分別描述成:</div>
<div style="text-align: left;">
Tools_def.txt </div>
<div style="text-align: left;">
Build_Rule.txt</div>
<div style="text-align: left;">
[Rule.$(Arch).$(ModuleType] </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
好不好用看個人,不過如果你要支援原本EDK1 Package Rule時那就對不起啦,你要修改Python source code,不然你做不到。 例如說底下的EDK1 的COMPONENT_TYPE = FILE原本對應到某個Package Rule,但是在EDK2內不支援就是不支援,除非自己改python source code.</div>
<div style="text-align: left;">
<br /></div>
[Defines]<br />
BASE_NAME = xxxxx<br />
FILE_GUID = 126A4D6A-C404-4200-8779-F327A4A79087<br />
COMPONENT_TYPE = FILE<br />
BUILD_TYPE = MAKEFILE<br />
<br />
<div style="text-align: left;">
3) Python v.s SQL</div>
<div style="text-align: left;">
Python build tool 只是拿SQL當成是存放他收集到的資料的一個地方,然後在另一個地方就可以去撈資料庫內的資訊然後寫對應的CODE去分析要幹嘛,所以rebuild的時候最好把這個資料庫暫存檔案刪除。 EX: Conf\.cache\build.db</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
4) GenSection & GenFFS</div>
<div style="text-align: left;">
以前EDK1的這兩個工具也整合進去Python Build tool內了,所以想了解FDF是怎麼產生FV或是FD的人就請自行研究,不過他是另一隻Tool叫做GenFds.py。</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
5) AutoGen.c v.s AutoGen.h</div>
<div style="text-align: left;">
偷偷產生的檔案用來存放一些PCD操作/有用到的PCD Value,GUID 定義跟一些偷塞的include... 如果是給PCD database使用的,他還會塞Dynamic PCD給PCD 資料庫當成初始化值。</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
另外,Library 只會產生AutoGen.h 不會產生AutoGen.c,因為Library通常會跟某個Driver Link,所以等到真正要去產生Module make時,才會去檢查Library 內用到的GUID/PCD ,然後產生在Module's AutoGen.c內。</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
6) Hard code</div>
<div style="text-align: left;">
恩,很多東西都寫死在Python build tool內,像是nmake command 要增加修改時就要改一改他,不過也是個好處,就是我可以偷加很多東西在裡面,然後不給你source code...哈!!!</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
7) 產生執行檔</div>
<div style="text-align: left;">
.py 轉成 .exe 方式我自己再用的有兩種,一種是py2Exe不過版本過舊已經不能支援了,所以我採用EDK2 所建議的cx_Freeze 去轉換,轉換時還要搭配你的Python 版本,目前我看到的codebase內使用的是Python 2.7.3,所以應該以這個為主吧! 底下是EDK2 建議的方式:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Using cx_Freeze 4.2.3 with Python 2.7.2</div>
<div style="text-align: left;">
Using cx_Freeze 3.0.3 with Python 2.5.4</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
8) 嗯...有想到再說~</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com2tag:blogger.com,1999:blog-34652574.post-76181606452900225732014-02-12T20:13:00.001-08:002014-02-12T20:13:10.685-08:00Python v.s UEFI EDK2 (EDKII) 這篇文章主要是幫自己紀錄一下學習EDK2 build process時的前置準備動作有哪些,後面會陸陸續續把這篇文章補齊,所以先留下個紀錄吧~<br />
<br />
<b><u>學習方式</u></b><br />
<br />
對於EDK2來說最大的轉變就是我一直提到的Build process,我常跟我周遭朋友說如果你要學好BIOS或是其他大型軟體專案,中間的『眉角』就是要把大型專案的學習方式分成:<br />
<br />
BUILD + CODE<br />
<br />
當你有辦法分辨以及分開學習時,你才可以精準的掌握住甚麼是BUILD? 甚麼是CODE?<br />
舉例來說,BUILD的部分就是屬於build rule/compiler rule/package rule ,簡單的說就是透過一些方式來把程式碼產生成binary,依照一些特定的layout來產生成一個BIOS ROM image;至於CODE的部分就屬於程式語言,像是C語言,組合語言的學習! 你唯有了解彼此之間的關係,你才能掌握關鍵處! 這也是我常跟朋友開玩笑說,你真的會"build+code"嗎?!<br />
<br />
至於BUILD PROCESS的概念中,我也常常教導朋友去思考為什麼要這樣子做? 他解決了甚麼問題? 有沒有其他方式? 因此我常常由一個批次檔的概念外加一些淺而易懂的範例來讓他們知道說原來BUILD PROCESS原理是如此簡單,不過我沒打算在這邊寫詳細的解說,因為配合著畫圖邊解釋效果比較佳,如果大家有興趣又剛好在業界遇到我時再來跟我討論吧! ^^<br />
<br />
所以記得,學習的方式就是BUILD + CODE分開來學!!!<br />
<br />
<b><u>前置動作</u></b><br />
有鑑於EDK2 BUILD PROCESS主要的部分已經改成Python 2.5/2.7開發,美其名是為了跨平台而準備,但是實際上卻沒有達成! 畢竟,EDK2在x86中並沒有拿Python 將所有win32 的工具重新寫一次,導致在x86平台中有一部分的python tool跟一部份的win32 tool,所以只能說『某些BUILD TOOLS』跨平台而已! 但是木已成舟,所以現在的x86上就變成了這個怪胎情況了!<br />
<br />
雖然我不討厭Python,但也不是擁護者,因為跨平台方式有很多種,他也不是最好的一種! 但是因為EDK2都選擇了Python,所以我也要強迫自己來學習他,秉持著工欲善其事,必先利其器的方式,我們先把除錯工具安裝好,以方便我們去分析與研究EDK2's Build.py<br />
<br />
那有哪些東西要先安裝呢? 我個人偏好Visual Studio,因此我選擇了VS2010+PTVS 來當作是Debugger,安裝簡單! 當然你也可以選擇使用Eclipse Classic IDE + PyDev 的除錯方式 (感謝鳥公司John大大傾囊教學)!<br />
<br />
所以如果你也想學Python,請跟著我一起安裝:<br />
<br />
1. VS2010<br />
<br />
2. Python tool for Visual Studio<br />
https://pytools.codeplex.com/<br />
<br />
3. Python 2.7.6 (目前EDK2還沒支援到Python 3.x,建議是安裝2.5.x/2.7.x)<br />
http://www.python.org/download/releases/2.7.6/<br />
<br />
Eclipse Classic IDE+PyDev<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOQGfAsBMMG15RND7T3ioY7PeeJK5zaxOx8Qtr0wyQ6j0cvFTpM8EgjMZmAjSk1mwzD7L77_L08-Nhorf5ZOBaEw5VH7MN83oSbVBS1cP6V31xdeaI453UdFWhSzrwuUQBadUSnw/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOQGfAsBMMG15RND7T3ioY7PeeJK5zaxOx8Qtr0wyQ6j0cvFTpM8EgjMZmAjSk1mwzD7L77_L08-Nhorf5ZOBaEw5VH7MN83oSbVBS1cP6V31xdeaI453UdFWhSzrwuUQBadUSnw/s1600/1.jpg" height="154" width="320" /></a></div>
<br />
VS2010+PTVS<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI2aejLBuBMGy_NUVRYFui9YTR8X4LxPeGouePFUOnmSSwgbbg59Cwrerbqjqmhn86OddcHcmp5Ur4vHzhXnR1-VigEgNxL05F_3GvYdPdJea_-IONryDe2rBYOybH81ZKhmOtzA/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI2aejLBuBMGy_NUVRYFui9YTR8X4LxPeGouePFUOnmSSwgbbg59Cwrerbqjqmhn86OddcHcmp5Ur4vHzhXnR1-VigEgNxL05F_3GvYdPdJea_-IONryDe2rBYOybH81ZKhmOtzA/s1600/2.jpg" height="98" width="320" /></a></div>
<br />
<br />
(未完待續...)<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com2tag:blogger.com,1999:blog-34652574.post-63234838419180782422014-01-21T23:37:00.000-08:002014-01-21T23:37:02.167-08:00文字檔格式真多,那怎麼去區別ASCII/Big5/UTF-16/UTF-8呢?<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0_BVev30T0bK0V_b3aVp_OE_qlGp6Vp1gURncVqNnsExdUMneHWslaBGFInGRztwMF-zb1pUDQhoBgUub4PjHrHNlEtmoR8CT8pHAKaNCSVHeE1XsfhPBzyBJAJ_l6CCxQzB4rA/s1600/Editor.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0_BVev30T0bK0V_b3aVp_OE_qlGp6Vp1gURncVqNnsExdUMneHWslaBGFInGRztwMF-zb1pUDQhoBgUub4PjHrHNlEtmoR8CT8pHAKaNCSVHeE1XsfhPBzyBJAJ_l6CCxQzB4rA/s1600/Editor.jpg" height="228" width="400" /></a></div>
<br />
以前處理一些字幕檔的時候,慢慢的累積了一些區別文字檔編碼的經驗,這邊就分享一下個人經驗,不過經驗歸經驗不一定正確,所以各位就將就點看,把他當成是解決你問題的一個進入點,然後再去搜尋相關知識來解決各位遇到的問題吧!<br />
<br />
首先,我們先討論一下文字檔到底是啥? 其實不管是甚麼檔案,儲存的時候都是BINARY資料,差別就在於讀取檔案的人想要如何呈現給你看而已~<br />
<br />
例如:<br />
<br />
<span style="font-size: x-small;">執行檔=二進制資料 , OS 讀取表頭判定他可以被執行,然後執行他!</span><br />
<span style="font-size: x-small;">文字檔=二進制資料 , Editor 讀取他然後依照一些編碼原則判定他,然後再去字型檔撈出字型顯示給你看!</span><br />
<br />
所以啦,這篇文章要說的就是模擬一下如果我寫了一個Editor,我要怎麼區別不同的編碼格式!<br />
<br />
從上面的圖中可以看到,一開始的時候我會先去讀取兩個位元組,這是因為Unicode(UTF-16)檔案會有一個標記來標記他是Unicode存取方式是Big Endian還是Little Endian (低位元組在記憶體低位址, x86常用) ,所以大家可以把UEFI 中的.uni 用16進制編輯器打開來看看,就會看到檔案最開頭有這個標記可以用來判斷~<br />
<br />
如果沒有這個標記的檔案,我們就可以判斷為他可能是ASCII/UTF-8/Big-5的編碼方式,因為Big5是兩個位元組組成,他有他一定的規範,所以可以由這些規範來判別字元是不是Big5或只是單純ASCII的一個位元組而已~<br />
<br />
除此之外,還有一個UTF-8比較討厭,因為UTF-16是固定兩個位元組儲存一個字元,所以像是英文"A"就會是0x0041 ,高位元組永遠是0x00,所以為了節省空間所以變成了可變位元組的編碼,因此一個字元可能由1~6 bytes組成,看樣子還有機會繼續延伸咧~<br />
<br />
因此可以參考Wiki上的UTF-8的對應方式去判讀一個字元由幾個Bytes組成。<br />
<br />
例如: 中文字 [這]<br />
<div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
這=E9 80 99 (UTF-8)</div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
<br /></div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
第一個位元組的二進制是<span style="color: red;">111</span>0 1001前面的'1'代表全部是3 bytes,而後面的每個位元組的bit7:6就是對應Wiki上說的欄位表示 <span style="color: red;">10</span>xx xxxx, <span style="color: red;">10</span>xx,xxxx</div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
<br /></div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
所以取出來的xxxx xxxxxx xxxxxx </div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
| | |____ 011001 19</div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
| |____________ 000000 0</div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
|_________________ 1001 9</div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
<br /></div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
U+9019 就是unicode的中文字 [這],所以UTF-8 也算是再重新編碼後的一種unicode表示碼!</div>
</div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
<br /></div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
不知道舉的這些例子看倌們能否了解?!</div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
<br /></div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
因為這不是我的專長,我是寫BIOS的,以上是經驗談~ Orz</div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
<br /></div>
<div style="font-family: Calibri; font-size: 16px; orphans: 2; text-align: -webkit-auto; widows: 2;">
<br /></div>
<br />小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com0tag:blogger.com,1999:blog-34652574.post-42134860316913595232014-01-07T01:38:00.002-08:002014-01-09T02:32:18.215-08:00UEFI Gop driver and PlatformGopPolicy最近在除錯我自己從無到有DIY出來的EDKI codebase的問題,所以在這邊留一下筆記來記錄一下UEFI Gop driver遇到的問題~<br />
<br />
<b><u>問題描述: </u></b><br />
由於我們的系統比較特別,有eDP Panel 跟LVDS Panel(銷庫存),所以外掛了一顆eDP-LVDS IC,導致點亮VGA的方式變得複雜了點,另外我的CODEBASE目前還很陽春,所以只支援UEFI mode,也就是我要直接上UEFI GopDriver,而執行到UEFI Gop Driver後系統就當機了,為了這個問題所以把這隻Gop driver 反組譯,然後大致追了一下,然後把追CODE的筆記紀錄在下面!<br />
<br />
<b><u>筆記:</u></b><br />
1) 他是一個EFI driver model driver,所以從DriverBinding Start()追進去看他做了甚麼事情<br />
2) 底下是我整理的資料,因為沒有他的Source code,完全靠反組譯去猜測出底下的順序與動作,所以僅供參考,並不一定正確!<br />
3)Root cause: 還不清楚,還在追...哈!<br />
<br />
<div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;">DriverBinding->Start()</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;">{</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> 1..asm{RDTSC};</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> 2.ProgramIGD();</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> a. OpenProtocol(Pciio) //準備用來讀取PCI Regs</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> b. Pciio->Attributes(Enable BusMatser,MMIO,IOBASE) //啟動IGD設備</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> c. OpenProtocol(DevicePath) </span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> d.LocateProtocol (PlatformGopPolicy) //要求Platform firmware(也就是BIOS)提供VBT/Lid/Dock 的資訊</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> e. PlatformGopPolicy->GetVbt(Address,Size);</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> f. Config/Read IGD PCI Regs (DeviceId,RevisionId...etc)</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> g.Read Pch DeviceId and RevisionId.</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> h.Init MMIO regs // 目前還找不到相關文件說明這些暫存器在幹嘛</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> i.Out 0x3c2,0x67</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> j.Config MMIO regs </span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> k. PlatformGopPolicy->PlatformLidStatus()</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> l. PlatformGopPolicy->PlatformDockStatus() if PlatformGopPolicy's revision > 0x0001 otherwise, ignore it.</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> m.Create DDEV LinkedList (Display Device) //應該是參考Vbt去建立出來的資訊 CRT->eDP->EFP1->EFP2->EFP3</span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> <span style="color: red;"> n.Walk DDEV LinkedList to find out predefined DDEV and then try to enable it. (Hangup here.) //我當機在這裡</span></span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> o.Others //還沒追...應該是去產生一些protocol (EDID,brightness...etc) 或是devicepath </span></div>
<div style="font-family: Calibri; orphans: 2; text-align: -webkit-auto; widows: 2;">
<span style="font-size: x-small;"> 3.asm{RDTSC};</span></div>
<div style="orphans: 2; text-align: -webkit-auto; widows: 2;">
<div style="font-family: Calibri;">
<span style="font-size: x-small;">}</span></div>
<div style="font-family: Calibri;">
<span style="font-size: x-small;"><br /></span></div>
<div style="font-family: Calibri;">
<span style="font-size: x-small;">4)會被產生出來的Protocol掛自Child Handle上: </span></div>
<span style="font-family: Calibri; font-size: x-small;">a.DevicePath (</span><span style="text-align: -webkit-auto;"><span style="font-family: Calibri; font-size: x-small;">09576E91-6D3F-11D2-8E39-00A0C969723B</span></span><span style="font-family: Calibri; font-size: x-small; text-align: -webkit-auto;">)</span><br />
<span style="font-family: Calibri; font-size: x-small;">b.Undocument protocol (</span><span style="text-align: -webkit-auto;"><span style="font-family: Calibri; font-size: x-small;">39487C79-236D-4666-87E5-09547CAAE1BC</span></span><span style="font-family: Calibri; font-size: x-small; text-align: -webkit-auto;">) : 不知道是幹嘛的...</span><br />
<span style="font-family: Calibri; font-size: x-small;">c.EdidDiscovered (</span><span style="text-align: -webkit-auto;"><span style="font-family: Calibri; font-size: x-small;">1C0C34F6-D380-41FA-A049-8AD06C1A66AA): </span></span><span style="font-family: Calibri; font-size: x-small; text-align: -webkit-auto;">用來表示於顯示設備使用這個EDID.</span><br />
<span style="font-family: Calibri; font-size: x-small;">d.GraphicOutput(</span><span style="text-align: -webkit-auto;"><span style="font-family: Calibri; font-size: x-small;">9042A9DE-23DC-4A38-96FB-7ADED080516A):用來顯示影像</span></span><br />
<span style="font-family: Calibri;">e.</span><span style="font-family: Calibri; text-align: -webkit-auto;"><span style="font-family: Calibri; font-size: x-small;">EdidActiveProtocol(</span></span><span style="text-align: -webkit-auto;"><span style="font-family: Calibri; font-size: x-small;">BD8C1056-9F36-44EC-92A8-A6337F817986)</span></span><span style="font-family: Calibri; font-size: x-small; text-align: -webkit-auto;"> : 正在顯示的設備使用這個EDID</span><br />
<span style="text-align: -webkit-auto;"><span style="font-family: Calibri; font-size: x-small;"><br /></span></span>
<span style="text-align: -webkit-auto;"><span style="font-family: Calibri; font-size: x-small;">如果</span></span><span style="text-align: -webkit-auto;"><span style="font-family: Calibri; font-size: x-small;">SizeOfEdid !=0 代表EDID資料應該是有效的,應該可以檢查此Handle上面有沒有EDID Protocol來得到顯示設備的EDID,就像是Legacy 時呼叫INT 10h.</span></span><br />
<span style="text-align: -webkit-auto;"><span style="font-family: Calibri; font-size: x-small;"><br /></span></span></div>
</div>
小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com1tag:blogger.com,1999:blog-34652574.post-82426648719262934622013-09-13T00:14:00.003-07:002013-09-13T00:38:34.893-07:00簡略介紹 EDKI與EDKII (EDK2) 的差別這篇文章主要是簡單闡述一下EDKI 與 EDKII 在BIOS工程師眼中的差別在哪裡? !<br />
在討論之前,我們先簡單說一下Package是甚麼東西? <br />
<br />
<div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="color: red; font-family: Tahoma;"><b>Package是甚麼?</b></span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="color: red; font-family: Tahoma;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"> 在</span><span style="font-family: Tahoma;">EDKI</span><span style="font-family: 新細明體;">裡面,我們在寫UEFI driver的時候並不會有所謂的</span> <span style="font-family: Tahoma;">"</span><span style="font-family: 新細明體;">Module</span><span style="font-family: Tahoma;">" </span><span style="font-family: 新細明體;">的概念在裡面。我們開發的時候都是以</span> <span style="font-family: Tahoma;">driver</span><span style="font-family: 新細明體;">為單位,並不會考慮一些模組化的問題。</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;">[註] UEFI 的可執行檔案我們的術語是Image或是Driver,所以當你聽到這個術語時把他當成類似EXE執行檔就可以了。</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"> 而</span> <span style="font-family: Tahoma;">EDKII裡面,他</span><span style="font-family: 新細明體;">加上了</span> <span style="font-family: Tahoma;">Package</span><span style="font-family: 新細明體;">這個概念(模組化)。其實可以把它看成是一個目錄,而這個目錄名稱會是"xxxPkg",而目錄裡面就是一堆相關的UEFI</span> driver。</div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
所謂的相關的UEFI Driver是說,假如你看到目錄名稱是"NetworkPkg",那麼這個Package裡面的東西就跟Network有關,<span style="font-family: 新細明體;">所以在這個目錄內可以有其他子目錄去存放著</span> <span style="font-family: Tahoma;">PEI/DXE/SMM/APP</span> <span style="font-family: 新細明體;">的</span> <span style="font-family: Tahoma;">Driver</span><span style="font-family: 新細明體;">或是</span> <span style="font-family: Tahoma;">Library</span><span style="font-family: 新細明體;">。</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;">而組成一個</span> <span style="font-family: Tahoma;">Package</span><span style="font-family: 新細明體;">的元素(一個PKG目錄內)必定包含一個</span> <span style="font-family: Tahoma;">*.dec</span> <span style="font-family: 新細明體;">和</span> <span style="font-family: Tahoma;">*.dsc</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: Tahoma;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: Tahoma;">Package的好處是甚麼? 就是"獨立"</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: Tahoma;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: Tahoma;">在EDKI 的時候,你想單獨產生一個特定的CODE時,你至少"整套CODE"要先產生一次! 而</span><span style="font-family: Tahoma;">EDKII使用這種"獨立"的概念就不需要整套CODE build完才產生你要的CODE! </span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: Tahoma;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: Tahoma;">但也是因為獨立,所以有很多地方都是為了解決獨立出來問題而去改了一堆Build tool動作跟你描述.dsc還有.FDF的動作。</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: Tahoma;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: Tahoma;">
</span><br />
<div>
<span style="font-family: Tahoma;"><span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: red; font-family: 新細明體; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><b>EDKI與EDKII主要的差別?</b></span><span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: #7600d8; font-family: 新細明體; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><b></b></span></span></div>
<span style="font-family: Tahoma;">
</span></div>
</div>
<br />
<div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="color: #3665ee; font-family: Tahoma;"><b>- Build process</b></span><span style="color: #3665ee; font-family: 新細明體;"><b>的改變</b></span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: Tahoma;">EDKI :</span> <span style="font-family: 新細明體;">由</span><span style="font-family: Tahoma;">ProcessDsc.exe</span><span style="font-family: 新細明體;">執行將</span> <span style="font-family: Tahoma;">*.inf</span> <span style="font-family: 新細明體;">轉換成</span> <span style="font-family: Tahoma;">makefile</span> <span style="font-family: 新細明體;">的動作</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: Tahoma;">EDKII:</span> <span style="font-family: 新細明體;">由</span><span style="color: red; font-family: Tahoma;">Build.py</span> <span style="font-family: Tahoma;"> </span><span style="font-family: 新細明體;">去處理,同時還會產生</span> <span style="font-family: Tahoma;"> </span><span style="color: #2d4fc9; font-family: Tahoma;">AutoGen.c & AutoGen.h</span><span style="font-family: Tahoma;"> (</span><span style="color: #2d4fc9; font-family: Tahoma;">Parsing *.dec</span> <span style="font-family: Tahoma;">)</span></div>
</div>
<br />
<div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="color: #3665ee; font-family: Tahoma;"><b>- DSC file / FDF file</b></span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;">在</span><span style="font-family: Tahoma;">EDKI</span><span style="font-family: 新細明體;">裡,決定一個</span> <span style="font-family: Tahoma;">driver</span><span style="font-family: 新細明體;">要放在那一個</span> <span style="font-family: Tahoma;">firmware volume</span><span style="font-family: 新細明體;">裡是在"1個</span><span style="font-family: Tahoma;">.dsc"就可以</span><span style="font-family: 新細明體;">決定的,通常都會是叫做PlatformDsc.dsc或是 Build.dsc這個檔案! </span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;">在檔案內你會透過FV=FVREVOVERY的方式把底下的UEFI Driver通通放進去FVREVOVERY.FV,接著透過Flashmap.fdf去規劃ROM的區域,然後決定 FVMAIN.FV放進去哪個區域。</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;">但是</span> <span style="font-family: Tahoma;">EDKII</span><span style="font-family: 新細明體;">為了實現</span> <span style="font-family: Tahoma;">Package</span><span style="font-family: 新細明體;">這個概念,所以.dsc不再用來描述UEFI driver要放到哪個FV,而只是拿來決定要不要BUILD這目錄下的UEFI driver而已!</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;">描述那些UEFI DRIVER放到ROM的哪個位置的動作就變成EDKII新的FDF SPEC所描述的那些動作,所以你必須要新的FDF 格式中描述你那些UEFI driver是要放進去ROM裡面的。</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"><b style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: #3665ee; font-family: Tahoma; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">- PCD/DEC</b></span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;">因為EDKII還希望做到不用改到Source code就能夠改變CODE的行為,所以延伸出了PCD這種控制方式,不過我是覺得它需要額外寫TOOL去達到他的理念而增加了許多BIOS工程師的麻煩。</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"> PCD我自己是分成兩部分學習,一部分是屬於如何在RUNTIME管理PCD Database的部分,另一部分就是如何透過DEC FILE去產生PCD的預設值以及有哪些PCD LIB與Header file可以存取他,因為這部分牽扯到實作面(靠的是C語言巨集),所以需要邊開著CODE邊解釋,所以很難使用文章解釋,希望大家有機會在業界遇到我時在幫大家解釋吧^^.</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"> 你暫時可以簡單把他想像成是一個變數宣告的方式,變數會有生命週期(整個RUNTIME或是某一個DRIVER而已)與屬性(唯讀/可讀寫),可以方便你在CODE裡面存取他!</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"> 以上的部分大致上就是EDKI 與EDKII的差別,對於BIOS工程師來說可能會需要去習慣新的DSC/INF/DEC/FDF寫法,以及BUILD.py這個工具的用法,其他的就是要去習慣各家IBV對於PCD的作法! </span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"><b><span style="color: red;">EDKI與EDKII Reference Code的差別?</span></b></span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"> </span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;">EDKI 與 EDKII Reference code的部分,以目前我接觸到的部分來說最大的差別在於"移植的觀念"。</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;">EDKI 身不好移植到不同平台,所以EDKII在這部分是希望能夠好移植,而他的使用的方式是<span style="color: red;">約束大家使用同一個</span><span style="color: red;">EntryPoint</span>,也就是說在EDKII RC code部分,如果大家的EntryPoint都能指向同一個地方做完一些跟Platform相關的事情之後再跳回去Driver EntryPont,那麼下次如果要移植到不同平台時,我只要把這個共通的EntryPoint改寫就好了。</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;">所以在 RC CODE部分,你會看到他先透過共同的_ModuleEntryPoint,然後再從C_FLAG設定的給EDKII Gule Library的EntryPoint 跳回去你設定的Driver EntryPoint,這就是他主要的改變!</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;">因為EDKII Glue Library做掉一些事情了,所以以前在UEFI Driver內可能一開始會去呼叫InitDxeLib()來初始化gBS/gRT/gST的動作就不用做了,另外Smm Driver寫法也略有不同,其實都是因為被偷做,所以你可以少做!</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"><b><span style="color: red;">EDKI與EDKII Code Size的差別?</span></b></span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;">由於EDKI 本身在LIBRARY撰寫部分並沒有明確規範,所以連結出來的可執行檔的CODE SIZE會比較大,在EDKII上也針對了這部分重新改寫了原來的LIBRARY以減少連結時的CODE SIZE,因此理論上EDKII 環境下產生出來的可執行檔SIZE應該要寫一些。</span></div>
<div align="left" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-family: 新細明體;"></span> </div>
</div>
希望簡略的解釋能更幫助大家在學習EDKII 甚至轉換到EDKII的時候不會驚慌失措,也比較知道為什麼要改成這樣子。<br />
<br />
<br />
<br />
<br />小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com5tag:blogger.com,1999:blog-34652574.post-33606481619803970572013-09-12T04:00:00.001-07:002013-09-12T04:00:38.401-07:00DosBox 模擬器 : 如何自己Compiler<br />
如果各位是BIOS工程師,但有時候可能有需要在 64 bit OS底下去執行Debug32.exe來看看一些組合語言的東西,但是卻發現在64 bit OS底下,Debug32.exe這隻程式是不能被執行的! <br />
<br />
為了解決這個問題,我們通常都會去抓DosBox模擬器來使用,而這邊不是教大家去哪抓,而是跟大家說怎麼去自己抓回來Doxbox source code回來,然後使用VisualStudio 2010 自己Compiler 這個好用的工具。<br />
<br />
首先,我們需要去抓Doxbox source code跟一些Library,而 DosBox source code 可以透過SVN抓,但是因為這個DosBox在編譯的過程中會去連結一些Library,所以就先就列出來那些會在設定環境時使用到的部分,要大家要自己先去下載:<br />
<br />
<div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-size: x-small;">Dosbox SVN: </span><a href="http://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk"><span style="font-size: x-small;">http://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk</span></a><span style="font-size: x-small;"> (我是抓Revision 3833)</span></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-size: x-small;"></span> </div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-size: x-small;">SDL1.2: </span><a href="http://www.libsdl.org/download-1.2.php"><span style="font-size: x-small;">http://www.libsdl.org/download-1.2.php</span></a><span style="font-size: x-small;"> </span></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-size: x-small;">SDL2.0: </span><a href="http://www.libsdl.org/download-2.0.php"><span style="font-size: x-small;">http://www.libsdl.org/download-2.0.php</span></a><span style="font-size: x-small;"> (執行DosBox.exe 需要他的SDL2.DLL)</span></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-size: x-small;">SDL_Net 20: </span><a href="http://www.libsdl.org/projects/SDL_net/"><span style="font-size: x-small;">http://www.libsdl.org/projects/SDL_net/</span></a><span style="font-size: x-small;"> </span></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-size: x-small;">Libpng(libpng.lib): </span><a href="http://www.libpng.org/pub/png/libpng.html"><span style="font-size: x-small;">http://www.libpng.org/pub/png/libpng.html</span></a><span style="font-size: x-small;"> (我是抓1.6.3)</span></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-size: x-small;">Zlib(zlib.lib) : </span><a href="http://www.zlib.net/"><span style="font-size: x-small;">http://www.zlib.net/</span></a><span style="font-size: x-small;"> (我是抓Zlib 1.2.8)</span></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<span style="font-size: x-small;">WinCurses(Curses.lib): </span><a href="http://www.baldwin.cx/~john/projects/WinCurses.html"><span style="font-size: x-small;">http://www.baldwin.cx/~john/projects/WinCurses.html</span></a> (Debug用)</div>
</div>
<br />
底下是我抓下來後解壓縮放到E:\DosBox的情況:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGViIxjf9cf17sU9e7opjDwN9t4FOFXBf-Iwl7_wTdDv3IFyetamTWqPfK1Iy9_yniwjSuHE2KoQBFC0sG4fEGs144siBjNcGhsTeZWmuPudodBEaOqq7IeEFEeH8fgR-Z7BFBtw/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGViIxjf9cf17sU9e7opjDwN9t4FOFXBf-Iwl7_wTdDv3IFyetamTWqPfK1Iy9_yniwjSuHE2KoQBFC0sG4fEGs144siBjNcGhsTeZWmuPudodBEaOqq7IeEFEeH8fgR-Z7BFBtw/s320/1.jpg" width="160" /></a></div>
<br />
<div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<b><u>設定DosBox Compiler環境</u></b></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
1.我們要先產生zlib.lib給LibPng.lib使用,所以透過VS2010 compiler的方式就是先開啟VS2010 commnd prompt,然後鍵入:</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
E:\DosBox\zlib-1.2.8:\> Nmake /f win32\makefile.msc</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
在編譯結束後,你會看到zlib.lib被會放在Zlib-1.2.8目錄內。</div>
</div>
<br />
<br />
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
2.由於DosBox還需要連結libpng.lib,所以我們透過VS2010方案去產生libpng.lib。</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
所以在開啟VS2010方案檔案前,要先把預設的ZLIB路徑指向我們前面抓的那一個zlib-1.2.8,所以先去修改zlib.props這個檔案,如下圖:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJNuJKxmhDsEcRWZ7ci96xhzi-9FAyIukRcGUWwb-veKhH8fjzMTyiDRl7bWdgbwpkeEHpmqAGPkFJoW6zWfJZCIhHPAtzlXH6TK38po65iHYLtvYdEgO2EJQjoCeF8p7-DVCnIQ/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="81" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJNuJKxmhDsEcRWZ7ci96xhzi-9FAyIukRcGUWwb-veKhH8fjzMTyiDRl7bWdgbwpkeEHpmqAGPkFJoW6zWfJZCIhHPAtzlXH6TK38po65iHYLtvYdEgO2EJQjoCeF8p7-DVCnIQ/s320/2.jpg" width="320" /></a></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
接著開啟方案,然後整個Rebuild Solution.</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhglGIEeIyPn-Sga705n4kWxb5Ivat7_YmSh1aZxfQg5D89yGkx3Lg7cfdvnRu99YVu1LjybhnGkCcEtW1dRn0bSzqrM7k8sKHvFoebQGNSX-TXGpruHrCFaAGKBtptcVgFPLlagA/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhglGIEeIyPn-Sga705n4kWxb5Ivat7_YmSh1aZxfQg5D89yGkx3Lg7cfdvnRu99YVu1LjybhnGkCcEtW1dRn0bSzqrM7k8sKHvFoebQGNSX-TXGpruHrCFaAGKBtptcVgFPLlagA/s1600/3.jpg" /></a></div>
<div>
</div>
<div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
3.當我們需要的LIB都準備好之後,就可以開啟DOSBOX方案</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
E:\DosBox\visualc_net\dosbox.sln</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
4. 因為我們抓的LIB版本比原本設定的還新,所以要去設定方案內的專案屬性內的C++跟Linker的設定:</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
a. Project Properties->C++->General->Additional Include Directories -->Edit</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<em> ../include</em></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<em> ../src/platform/visualc </em></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<em> ../SDL-1.2.15/include</em></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<em> ../SDL2_net-2.0.0/include</em></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<em> ../lpng163</em></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<em> ../zlib-1.2.8</em></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
b. Project Properties->Linker->Input->Additional Dependencies-->Edit</div>
</div>
<div>
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<em> opengl32.lib<br /> winmm.lib<br /> ../zlib-1.2.8/zlib.lib<br /> ../lpng163/projects/vstudio/Debug/libpng16.lib<br /> ../SDL2_net-2.0.0/lib/x86/SDL2_net.lib<br /> ../SDL-1.2.15/lib/x86/sdl.lib<br /> ../SDL-1.2.15/lib/x86/sdlmain.lib<br /> ../curses/curses.lib<br /> odbc32.lib<br /> odbccp32.lib<br /> ws2_32.lib</em></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
</div>
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
5.
<span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">如果環境都設定好了,你就可以開始Rebuild,接著等一下子後你就可以看到產生DosBox.exe</span>
到你的Release 目錄內了.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbK0Wl0G-4l15ZxKBhvEL7OctLv1VvpB0_PieFRf1sN3h8-6RJtUO5eUsgYJfv84EqLpkm42YFaTBMDOkFG5AQhmD1OeWg20KTaEms2KrwshxcKrdPtx1L_JB580b5plY243mexQ/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="57" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbK0Wl0G-4l15ZxKBhvEL7OctLv1VvpB0_PieFRf1sN3h8-6RJtUO5eUsgYJfv84EqLpkm42YFaTBMDOkFG5AQhmD1OeWg20KTaEms2KrwshxcKrdPtx1L_JB580b5plY243mexQ/s320/4.jpg" width="320" /></a></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
6.
由於產生出來的DosBox.exe 並不能單獨直接執行,還需要一些DLL跟這個執行檔放在同一個目錄內,這些DLL檔案可以從前面抓的那些LIB目錄內找的到,所以我把它集中在同一個目錄內,如下圖所示:
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHALoHhSSDdbS1P2aHJyvw4NEtIliY84G4928I4SIUyuTdu8_HoX1zGkLHf09RU9ThEkKqYoT-l87a_5ZLAEr-kcAk4SIWuXUwpUhWO7bJEem-oH54xq0BGK3XYUiCHhAeXgg6tA/s1600/5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHALoHhSSDdbS1P2aHJyvw4NEtIliY84G4928I4SIUyuTdu8_HoX1zGkLHf09RU9ThEkKqYoT-l87a_5ZLAEr-kcAk4SIWuXUwpUhWO7bJEem-oH54xq0BGK3XYUiCHhAeXgg6tA/s1600/5.jpg" /></a></div>
<br />
<br />
<div>
7.
<span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">接著你只要執行dosbox.exe (滑鼠點兩下執行)就可以看到模擬器的畫面跑出來,然後我把我自己的E Driver掛在模擬器的K drive,之後就可以在模擬器內的K:\底下找到我放在E:\Debug32.exe並且執行成功:</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKbLOc6x73DOD30J_Z7RbT0OXco8jsux0bqNnKw8Gg3vZrIMU2EYDE_kCnaB1ff_tzRaelBGyNgakExlHev5Xey_52bih7D-Okf_fxL12kf2FHWPppOM-RGRD_69AwyjC2wcTYhw/s1600/6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKbLOc6x73DOD30J_Z7RbT0OXco8jsux0bqNnKw8Gg3vZrIMU2EYDE_kCnaB1ff_tzRaelBGyNgakExlHev5Xey_52bih7D-Okf_fxL12kf2FHWPppOM-RGRD_69AwyjC2wcTYhw/s320/6.jpg" width="320" /></a></div>
<div>
<span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"></span> </div>
<div>
<span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"></span> </div>
<div>
<span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</span><div>
<span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">我的DosBox Compiler環境是在 </span><span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">Window8 64 bit OS,然後使用 </span><span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">Visual Studio 2010的 32bit compiler,所以可以看到我是選Win32 Release build,設定的目錄都是指向x86而不是x64。</span></span></div>
<span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</span><br /></div>
<div>
<span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"></span> </div>
<div>
<span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">希望這邊文章對於想要自己Compiler DosBox但是又一直不成功的人有幫助 ^^</span></div>
<div>
<span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"></span> </div>
<div>
<span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; display: inline !important; float: none; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"></span> </div>
<div>
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
</div>
<br />
<br />小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com1tag:blogger.com,1999:blog-34652574.post-69894061935048039062013-09-11T23:59:00.001-07:002013-09-12T04:00:49.811-07:00一個關於INT 3h的知識分享恩,好久沒來發文章了! 慢慢地最近比較有時間,所以會在寫些文章分享一下知識!<br />
<br />
-----------------------------------------------------------------------------------------------------------------<br />
<br />
<span class="userContent" data-ft="{"tn":"K"}"><strong><u>一個關於INT 3h的知識分享</u></strong></span><br />
<span class="userContent" data-ft="{"tn":"K"}"></span><br />
<span class="userContent" data-ft="{"tn":"K"}">一般來說INT xxh的機器碼會看到是CD imm8 ,例如: CD 19 就是呼叫INT 19h.<br /><br />而INT3比較特別,他有一個1 byte的OPCODE是0xCC,使用1個BYTE的好處是"<wbr></wbr><span class="word_break"></span>他可以覆蓋在任何指令的第一個BYTE而不會去破壞掉原本的指令<wbr></wbr><span class="word_break"></span>意思"<br /><br />而2 bytes的方式就沒這個好處! 如果你了解INTEL 指令,你就會知道一行指令是由Prefix OPCODE.......部分組成的,所以一行指令所代表的機器碼長度<wbr></wbr><span class="word_break"></span>不同,因此一個Byte的INT 3h就可以利用這些特性讓Debugger去插入INT 3h的斷點,然後跳到Debug Engine裡面.</span><br />
<span class="userContent" data-ft="{"tn":"K"}"></span><br />
<span class="userContent" data-ft="{"tn":"K"}">底下是範例代碼,一個換掉原本位置的方式:</span><br />
<span class="userContent" data-ft="{"tn":"K"}"></span><br />
<span class="userContent" data-ft="{"tn":"K"}"><span style="-webkit-text-stroke-width: 0px; background-color: white; color: black; display: inline !important; float: none; font-size-adjust: none; font-stretch: normal; font: 13px/16.79px Verdana, Helvetica, Arial, sans-serif; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> lds bx,BreakToAddress ;Insert INT3h OPCODE to this addrees</span><br style="-webkit-text-stroke-width: 0px; background-color: white; color: black; font-size-adjust: none; font-stretch: normal; font: 13px/16.79px Verdana, Helvetica, Arial, sans-serif; letter-spacing: normal; margin: 0px; padding: 0px; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" /><span style="-webkit-text-stroke-width: 0px; background-color: white; color: black; display: inline !important; float: none; font-size-adjust: none; font-stretch: normal; font: 13px/16.79px Verdana, Helvetica, Arial, sans-serif; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> mov al,0CCh ;INT 03h opcode<span class="Apple-converted-space"> </span></span><br style="-webkit-text-stroke-width: 0px; background-color: white; color: black; font-size-adjust: none; font-stretch: normal; font: 13px/16.79px Verdana, Helvetica, Arial, sans-serif; letter-spacing: normal; margin: 0px; padding: 0px; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" /><span style="-webkit-text-stroke-width: 0px; background-color: white; color: black; display: inline !important; float: none; font-size-adjust: none; font-stretch: normal; font: 13px/16.79px Verdana, Helvetica, Arial, sans-serif; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> xchg [bx],al ;Set INT 3h OPCODE and also save original opcode into AL</span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: black; display: inline !important; float: none; font-size-adjust: none; font-stretch: normal; font: 13px/16.79px Verdana, Helvetica, Arial, sans-serif; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> </span></span><br />
<span class="userContent" data-ft="{"tn":"K"}"><span style="-webkit-text-stroke-width: 0px; background-color: white; color: black; display: inline !important; float: none; font-size-adjust: none; font-stretch: normal; font: 13px/16.79px Verdana, Helvetica, Arial, sans-serif; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> mov OriginalOpCode,al<span class="Apple-converted-space"> ;Save original opcode<span class="Apple-converted-space"> </span><br style="-webkit-text-stroke-width: 0px; background-color: white; color: black; font-size-adjust: none; font-stretch: normal; font: 13px/16.79px Verdana, Helvetica, Arial, sans-serif; letter-spacing: normal; margin: 0px; padding: 0px; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" /> </span></span></span>小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com0tag:blogger.com,1999:blog-34652574.post-39797406129242962522012-09-19T03:01:00.002-07:002013-09-12T04:01:06.531-07:00EDKII - Build.py <span style="font-family: Tahoma;">最近在研究EDKII的 Build process的動作,順便做做筆記!</span><br />
<div>
<span style="font-family: Tahoma;"><br /></span></div>
<div>
<span style="font-family: Tahoma;">這個Python Build tool是EDKII/EDK2 的一個Build tool,而底下是</span><span style="font-family: Tahoma;">Build.py 目前支援的Command line options,因為我還沒追完全部的動作,所以先整理一下比較會使用到的部分:</span></div>
<div>
<br /></div>
<div>
===============================================================</div>
<div>
<span style="font-family: Tahoma;">"-a", "--arch", , choices=['IA32','X64','IPF','EBC','ARM'], dest="TargetArch",</span><br />
<span style="font-family: Tahoma;">"-p", "--platform"dest="PlatformFile"</span><br />
<span style="font-family: Tahoma;">"-m", "--module",, dest="ModuleFile"</span><br />
<span style="font-family: Tahoma;">"-b", "--buildtarget", dest="BuildTarget"</span><br />
<span style="font-family: Tahoma;">"-t", "--tagname", , dest="ToolChain",</span><br />
<span style="font-family: Tahoma;">"-x", "--sku-id", , dest="SkuId", </span><br />
<span style="font-family: Tahoma;">"-n", dest="ThreadNumber"</span><br />
<span style="font-family: Tahoma;">"-f", "--fdf", dest="FdfFile"</span><br />
<span style="font-family: Tahoma;">"-r", "--rom-image", dest="RomImage"</span><br />
<span style="font-family: Tahoma;">"-i", "--fv-image", dest="FvImage"</span><br />
<span style="font-family: Tahoma;">"-C", "--capsule-image", dest="CapName"</span><br />
<span style="font-family: Tahoma;">"-u", "--skip-autogen", dest="SkipAutoGen"</span><br />
<span style="font-family: Tahoma;">"-e", "--re-parse", , dest="Reparse"</span><br />
<span style="font-family: Tahoma;">"-c", "--case-insensitive", dest="CaseInsensitive"</span><br />
<span style="font-family: Tahoma;">"-w", "--warning-as-error", dest="WarningAsError</span><br />
<span style="font-family: Tahoma;">"-j", "--log", dest="LogFile"</span><br />
<span style="font-family: Tahoma;">"-s", "--silent",, dest="SilentMode",</span><br />
<span style="font-family: Tahoma;">"-q", "--quiet"</span><br />
<span style="font-family: Tahoma;">"-v", "--verbose"</span><br />
<span style="font-family: Tahoma;">"-d", "--debug"</span><br />
<span style="font-family: Tahoma;">"-D", "--define",dest="Macros"</span><br />
<span style="font-family: Tahoma;">"-y", "--report-file"dest="ReportFile"</span><br />
<span style="font-family: Tahoma;">"-Y", "--report-type" choices=['PCD','LIBRARY','FLASH','DEPEX','BUILD_FLAGS','FIXED_ADDRESS', 'EXECUTION_ORDER'], dest="ReportType"</span></div>
<div>
<br />
<span style="font-family: Tahoma;">"-F", "--flag", dest="Flag",</span><br />
<span style="font-family: Tahoma;">"-N", "--no-cache", dest="DisableCache"</span></div>
<div>
<span style="font-family: Tahoma;"><br /></span></div>
<div>
<span style="font-family: Tahoma;">從上面資料中可以看到-a 或是--arch對他來說應該都是同一個選項.</span></div>
<div>
<span style="font-family: Tahoma;">而底下是一些實際範例的說明,希望對大家有幫助~</span></div>
<div>
<span style="font-family: Tahoma;"><br /></span></div>
<div>
<div>
<div style="font-family: Tahoma;">
======================</div>
<div style="font-family: Tahoma;">
build.exe -p ACTIVE_PLATFORM </div>
<div style="font-family: Tahoma;">
======================</div>
<div style="font-family: Tahoma;">
ex: build -p DUETPkg\DuetPkg64.dsc</div>
<div style="font-family: Tahoma;">
說明: 等同於修改Target.txt內的 ACTIVE_PLATFORM = Nt32Pkg/Nt32Pkg.dsc</div>
<div style="font-family: Tahoma;">
<br /></div>
<div style="font-family: Tahoma;">
=====================</div>
<div style="font-family: Tahoma;">
build -b <span style="font-family: Verdana;">TARGET</span></div>
<div style="font-family: Tahoma;">
=====================</div>
<div style="font-family: Tahoma;">
ex: build -b DEBUG</div>
<div style="font-family: Tahoma;">
說明: 等同於修改Target.txt內的TARGET= DEBUG,以及DSC file: [Defines] <span style="font-family: Verdana;"><span style="color: red;">BUILD_TARGETS</span> tag</span></div>
<div style="font-family: Tahoma;">
<span style="font-family: Verdana;"><br /></span></div>
<div style="font-family: Tahoma;">
[Defines]<br />
PLATFORM_NAME = NT32<br />
PLATFORM_GUID = EB216561-961F-47EE-9EF9-CA426EF547C2<br />
PLATFORM_VERSION = 0.4<br />
DSC_SPECIFICATION = 0x00010005<br />
OUTPUT_DIRECTORY = Build/NT32<br />
SUPPORTED_ARCHITECTURES = IA32<br />
<span style="color: red;">BUILD_TARGETS = DEBUG|RELEASE</span><br />
SKUID_IDENTIFIER = DEFAULT<br />
FLASH_DEFINITION = Nt32Pkg/Nt32Pkg.fdf</div>
<div style="font-family: Tahoma;">
<br /></div>
<div style="font-family: Tahoma;">
=====================</div>
<div style="font-family: Tahoma;">
build -a <span style="font-family: Verdana;">TARGET</span></div>
<div style="font-family: Tahoma;">
=====================</div>
<div style="font-family: Tahoma;">
ex: build -d x64</div>
<div style="font-family: Tahoma;">
說明: 等同於修改Target.txt內的TARGET_ARCH = IA32,以及DSC file: [Defines] SUPPORTED_ARCHITECTURES tag (同上範例)</div>
<div style="font-family: Tahoma;">
<br /></div>
<div style="font-family: Tahoma;">
=====================</div>
<div style="font-family: Tahoma;">
build -t <span style="font-family: Verdana;">TOOL_CHAIN</span></div>
<div style="font-family: Tahoma;">
=====================</div>
<div style="font-family: Tahoma;">
ex: build -t VS2010x86</div>
<div style="font-family: Tahoma;">
說明: 等同於修改Target.txt內的TOOL_CHAIN_TAG = VS2008x86 </div>
<div style="font-family: Tahoma;">
<br /></div>
<div style="font-family: Tahoma;">
<span style="color: red;">=====================</span></div>
<div style="font-family: Tahoma;">
<span style="color: red;">build --log=Build.log</span></div>
<div style="font-family: Tahoma;">
<span style="color: red;">=====================</span></div>
<div style="font-family: Tahoma;">
<span style="color: red;">--log 可以產生建置過程的紀錄檔</span></div>
</div>
</div>
小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com1tag:blogger.com,1999:blog-34652574.post-33109431138369959752012-09-09T23:47:00.000-07:002012-09-09T23:47:23.043-07:00快快樂樂學EFI(4)-使用VS2010建立EDKII專案<span style="font-family: Tahoma;">這一篇文章說的方式可以適用於VS2008與VS2010,使用Visual Studio建立專案的好處其實就只是有Tag功能,也就是方便你去追CODE改CODE的功能,雖然我都是使用SlickEdit 不過還是跟各位說一下怎麼使用吧~</span><br />
<br />
<span style="font-family: Tahoma;">在建立Visual Studio專案之前,請確認你已經在DOS Command Prompt下成功進入到NT32的EFI Shell模擬環境,</span><span style="font-family: Tahoma;">如果還沒成功,請先試試看下面方式:</span><br />
<span style="font-family: Tahoma;"><br /></span>
<span style="font-family: Tahoma;">1) E:\MyWorkSpace:\> EdkSetup.bat</span><br />
<span style="font-family: Tahoma;">2) 修改</span><span style="font-family: Tahoma;">E:\MyWorkSpace\Conf\Target.txt 內,搜尋關鍵字MYTOOLS ,並把他改成VS2008x86或是VS2010x86,我是用VS2010,所以要改成VS2010x86</span><br />
<span style="font-family: Tahoma;"><br /></span>
<span style="font-family: Tahoma;">3) 先產生 SHELL檔案,透過 E:\MyWorkSpace:\> build -D BUILD_NEW_SHELL</span><br />
<span style="font-family: Tahoma;">4) 測試看看能不能看到EFI Shell模擬環境</span><span style="font-family: Tahoma;">E:\MyWorkSpace:\> build run</span><br />
<span style="font-family: Tahoma;">5) 如果可以看到Shell,則輸入reset 離開模擬環境</span><br />
<span style="font-family: Tahoma;"><br /></span>
<span style="font-family: Tahoma;">如果上面步驟都已經成功,則你可以繼續底下的步驟來設定VS2010的EDKII專案</span><br />
<br /><span style="font-family: Tahoma;"><br /></span>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
Step1: 執行VS2010</div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<img src="file:///C:/Users/z1107tti/AppData/Local/Temp/enhtmlclip/Image(36).png" style="cursor: default;" /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<span style="text-align: -webkit-auto;">Step2: 選擇File->New->Project From Existing Code ...</span></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<img src="file:///C:/Users/z1107tti/AppData/Local/Temp/enhtmlclip/Image(37).png" style="cursor: default;" /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
Step3: 出現的畫面上選擇"Visual C++" project type </div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<img src="file:///C:/Users/z1107tti/AppData/Local/Temp/enhtmlclip/Image(38).png" style="cursor: default;" /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
Step4: Click "Browse" 然後選擇你的工作目錄 (我的是E:\MyWorkSpace)</div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
Step5: 並在File type的地方輸入底下這些附檔名,他的用意是去辨識哪些檔案要加入專案</div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
*.c;*.h;*.asm;*.asm16;*.s;*.inc;*.asl;*.aslc;*.fdf;*.dsc;*.dec;*.inf;*.py</div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<img src="file:///C:/Users/z1107tti/AppData/Local/Temp/enhtmlclip/Image(39).png" style="cursor: default;" /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
Step6: 繼續下一步,並選擇 "Use external build system" 然後直接按下 "Finish" (後面的其他設定可以忽略)</div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<img src="file:///C:/Users/z1107tti/AppData/Local/Temp/enhtmlclip/Image(40).png" style="cursor: default;" /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
Step7: 在步驟6結束後,你應該可以看到專案檔被開啟成功,然後在專案的地方按滑鼠右鍵,然後選擇"Properties"</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDUav6wQ2c-0GYL0hte9qC5k-d9wdkNItYoiRjfqBWp84bTgJDa7MC9zSlYOxHIlDwbajOzFVwxGw9wyq0FVXlAUCxu1J-5kloG9JRBo4IvWT72_O5USmWxqR8o9DyqpTFYMA92g/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDUav6wQ2c-0GYL0hte9qC5k-d9wdkNItYoiRjfqBWp84bTgJDa7MC9zSlYOxHIlDwbajOzFVwxGw9wyq0FVXlAUCxu1J-5kloG9JRBo4IvWT72_O5USmWxqR8o9DyqpTFYMA92g/s320/%E6%9C%AA%E5%91%BD%E5%90%8D7.png" width="320" /></a></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<img src="file:///C:/Users/z1107tti/AppData/Local/Temp/enhtmlclip/Image(41).png" style="cursor: default;" /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
Step8: 選擇左邊的 "NMake" 然後設定 Configuration 成 "All Configurations".</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSBofYCoD0vKkSDlS_BbHMmSpv0so83OKRWPYse5XxOguUwNkW-w1fwfngZkdIU5hhSFrv3HVh38G5iaXTD5uv4XwwKG5Drtup4Xmt09LBFcNEROlGky4GOp81Omocu4Fv9LsPfw/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="109" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSBofYCoD0vKkSDlS_BbHMmSpv0so83OKRWPYse5XxOguUwNkW-w1fwfngZkdIU5hhSFrv3HVh38G5iaXTD5uv4XwwKG5Drtup4Xmt09LBFcNEROlGky4GOp81Omocu4Fv9LsPfw/s320/%E6%9C%AA%E5%91%BD%E5%90%8D8.png" width="320" /></a></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<img src="file:///C:/Users/z1107tti/AppData/Local/Temp/enhtmlclip/Image(42).png" style="cursor: default;" /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
Step 9: 然後再編輯右邊的 "Build Command Line","Rebuild All Command Line" 和 " Clean Command Line" ,分別輸入下面的設定(請依照自己的工作目錄設定):</div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
For Build Command Line:</div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
------------------------------</div>
<span style="font-family: Tahoma; text-align: -webkit-auto;"> cd /d E:\MyWorkSpace</span><br style="font-family: Tahoma; text-align: -webkit-auto;" /><span style="font-family: Tahoma; text-align: -webkit-auto;"> set WORKSPACE=E:\MyWorkSpace </span><br style="font-family: Tahoma; text-align: -webkit-auto;" /><span style="font-family: Tahoma; text-align: -webkit-auto;"> call edksetup.bat --nt32</span><br style="font-family: Tahoma; text-align: -webkit-auto;" /><div style="font-family: Tahoma; text-align: -webkit-auto; text-indent: 10px;">
build<span style="font-family: Courier New, Courier, monospace;"><span style="line-height: 22px;"> </span></span></div>
<div style="font-family: Tahoma; text-align: -webkit-auto; text-indent: 10px;">
<span style="font-family: Courier New, Courier, monospace;"><span style="line-height: 22px;"><br /></span></span></div>
<div style="font-family: Tahoma; text-align: -webkit-auto; text-indent: 10px;">
<div style="text-indent: 0px;">
For Rebuild All Command Line:</div>
<div style="text-indent: 0px;">
------------------------------</div>
</div>
<div style="font-family: Tahoma; text-align: -webkit-auto; text-indent: 10px;">
cd /d E:\MyWorkSpace<br />
set WORKSPACE=E:\MyWorkSpace<br />
call edksetup.bat --nt32<br />
build clean<br /><div>
build<span style="font-family: Courier New, Courier, monospace;"><span style="line-height: 22px;"> </span></span></div>
</div>
<div style="font-family: Tahoma; text-align: -webkit-auto; text-indent: 10px;">
<span style="font-family: Courier New, Courier, monospace;"><span style="line-height: 22px;"><br /></span></span></div>
<div style="font-family: Tahoma; text-align: -webkit-auto; text-indent: 10px;">
<div style="text-indent: 0px;">
For Clean Command Line:</div>
<div style="text-indent: 0px;">
------------------------------</div>
<div>
cd /d E:\MyWorkSpace<br />
set WORKSPACE=E:\MyWorkSpace<br />
call edksetup.bat --nt32<br />
build clean<br /><div>
<span style="font-family: Courier New, Courier, monospace;"><span style="line-height: 22px;"><br /></span></span></div>
<div style="text-indent: 0px;">
<span style="color: red;">Step10: 確定你的工作目錄下的Conf\Target.txt內的TOOL_CHAIN_TAG有設定成VS2010x86,不然你會沒辦法使用VS2010的專案來Compiler,如果你是使用VS2008則設定成VS2008x86即可! </span></div>
</div>
<div style="text-indent: 0px;">
<span style="color: red;"><br /></span></div>
<div style="text-indent: 0px;">
<span style="color: red;">Step11: 再選擇一次專案的"Properties",然後選擇左邊的"Debugging",接著邊及右邊的這兩個選項:</span></div>
<div style="text-indent: 0px;">
<span style="color: red;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfGgh6s9oz6Bpjir1cT36FgO-uuc0jQgZ1n3ubq1pehH6jhff2scxOtRmWV6YJZAb0asgoyiTkTNJ5MdPPORDGQhFQON5Bo29u3V9-dtsrqburIDUm3F6bCmeOsOlFeEd1If2ICA/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfGgh6s9oz6Bpjir1cT36FgO-uuc0jQgZ1n3ubq1pehH6jhff2scxOtRmWV6YJZAb0asgoyiTkTNJ5MdPPORDGQhFQON5Bo29u3V9-dtsrqburIDUm3F6bCmeOsOlFeEd1If2ICA/s320/%E6%9C%AA%E5%91%BD%E5%90%8D9.png" width="320" /></a></div>
<div style="text-indent: 0px;">
<span style="color: red;"><br /></span></div>
<div style="text-indent: 0px;">
Command : <a href="file:///E:/MyWorkSpace/Build/NT32/DEBUG_VS2010x86/IA32/SecMain.exe">E:\MyWorkSpace\Build\NT32\DEBUG_VS2010x86\IA32\SecMain.exe</a></div>
<div style="text-indent: 0px;">
Working Directory : <a href="file:///E:/MyWorkSpace/Build/NT32/DEBUG_VS2010x86/IA32">E:\MyWorkSpace\Build\NT32\DEBUG_VS2010x86\IA32</a></div>
<div style="text-indent: 0px;">
<br /></div>
<div style="text-indent: 0px;">
<img src="file:///C:/Users/z1107tti/AppData/Local/Temp/enhtmlclip/Image(43).png" style="cursor: default;" /></div>
<div style="text-indent: 0px;">
<br /></div>
<div style="text-indent: 0px;">
Step12: 當上述的動作都完成了,你就可以試試看Rebuild和Start Debugging的功能了.</div>
<div style="text-indent: 0px;">
<br /></div>
<div style="text-indent: 0px;">
成功的話,你會看到EFI Shell的模擬畫面! </div>
<div style="text-indent: 0px;">
<br /></div>
<div style="text-indent: 0px;">
<br /></div>
<div style="text-indent: 0px;">
※ 本篇文章是參考我以前同事部落格所多做的一些說明,如果你需要更仔細的說明,請參考我以前同事 <a href="http://www.blogger.com/profile/13740223047141525668" rel="nofollow" style="background-color: whitesmoke; color: purple; font-family: 'Trebuchet MS', verdana, sans-serif; text-align: -webkit-auto; text-decoration: none;">Tim Lewis</a><span style="background-color: whitesmoke; font-family: 'Trebuchet MS', verdana, sans-serif; font-size: 13px; text-align: -webkit-auto;"> </span><span style="text-align: -webkit-auto;">的部落格~ </span></div>
<div style="text-indent: 0px;">
<br /></div>
</div>
<div style="font-family: Tahoma; text-align: -webkit-auto; text-indent: 10px;">
<span style="font-family: Courier New, Courier, monospace;"><span style="line-height: 22px;"><br /></span></span></div>
<div style="font-family: Tahoma; text-align: -webkit-auto; text-indent: 10px;">
<span style="font-family: Courier New, Courier, monospace;"><span style="line-height: 22px;"><br /></span></span></div>
<div style="font-family: Tahoma; text-align: -webkit-auto; text-indent: 10px;">
<span style="font-family: Courier New, Courier, monospace;"><span style="line-height: 22px;"><br /></span></span></div>
<div style="font-family: Tahoma; text-align: -webkit-auto; text-indent: 10px;">
<span style="font-family: Courier New, Courier, monospace;"><span style="line-height: 22px;"><br /></span></span></div>
<div style="font-family: Tahoma; text-align: -webkit-auto; text-indent: 10px;">
<span style="font-family: Courier New, Courier, monospace;"><span style="line-height: 22px;"><br /></span></span></div>
<div style="font-family: Tahoma; text-align: -webkit-auto; text-indent: 10px;">
<span style="font-family: Courier New, Courier, monospace;"><span style="line-height: 22px;"><br /></span></span></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<span style="background-color: whitesmoke; font-family: 'Courier New', Courier, monospace; font-size: 13px; line-height: 22px; text-indent: 10px;"><br /></span></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<br />小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com2tag:blogger.com,1999:blog-34652574.post-65176030528504772632012-09-06T01:01:00.002-07:002012-09-06T01:01:29.501-07:00快快樂樂學EFI(3)-建立EDKII 環境<br />
<div>
<br />
光陰似箭,歲月如梭! 在EDK推出好幾年後,緊接著BIOS界中的另一個大事情就是又來了一個EDKII。</div>
<div>
<br /></div>
<div>
其實EDK II 推出的概念是因為EDK 有許多使用者有一堆抱怨,像是不能跨平台使用啦~不能用"微軟"之外的Compiler啦~東西不夠模組化啦~</div>
<div>
<br /></div>
<div>
因此針對了使用者的抱怨而做了一些修改? (一些嗎? 改的還蠻大的,不過幾乎都是在Build tool端,本身你寫EFI driver的方式沒啥改變)</div>
<div>
<br /></div>
<div>
從寫EFI driver的角度來看,你會發現有許多的EntryPoint全部被導入到EDKII的Library內去做初始化,這個好處是當Platform改變時容易移植到其他平台!</div>
<div>
<br /></div>
<div>
而其他的部分你就要去習慣新的Build tool的語法以及用法了。</div>
<div>
<br /></div>
<div>
不多說,那要怎麼開始呢? 一樣找Google 大神,找EDKII後點擊第一個連結去抓code吧!</div>
<div>
<img src="file:///C:/Users/z1107tti/AppData/Local/Temp/enhtmlclip/Image(34).png" style="cursor: default;" /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg-P6VoQDZcEWnMl2spk9GkTYjMtlKiSgAPb3ocJJ4KKlUl8lAz7e6GMuxZWxjq1se5hg33MGVsTjsz2-mJTZCkOh1gMZ7V_J_W5jphhi1gq8XNG5Mu40AH8ZRQBhYRIJgMKPAPw/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg-P6VoQDZcEWnMl2spk9GkTYjMtlKiSgAPb3ocJJ4KKlUl8lAz7e6GMuxZWxjq1se5hg33MGVsTjsz2-mJTZCkOh1gMZ7V_J_W5jphhi1gq8XNG5Mu40AH8ZRQBhYRIJgMKPAPw/s400/%E6%9C%AA%E5%91%BD%E5%90%8D.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<br /></div>
<div>
1. 先下載 EDKII codebase</div>
<div>
<a href="http://sourceforge.net/projects/edk2/files/UDK2010%20Releases/UDK2010.SR1.UP1/UDK2010.SR1.UP1.Complete.MyWorkSpace.zip/download" rel="nofollow" style="background-color: white; background-image: url(http://sourceforge.net/apps/mediawiki/tianocore/skins/sourceforge/external.png); background-position: 100% 50%; background-repeat: no-repeat no-repeat; color: #3366bb; font-family: verdana; font-size: 13px; line-height: 19.03333282470703px; padding: 0px 13px 0px 0px; text-decoration: none;" title="http://sourceforge.net/projects/edk2/files/UDK2010%20Releases/UDK2010.SR1.UP1/UDK2010.SR1.UP1.Complete.MyWorkSpace.zip/download"><b>UDK2010.SR1.UP1 DownLoad</b></a></div>
<div>
<br /></div>
<div>
2.<span style="font-family: Tahoma; text-align: -webkit-auto;">解壓縮到隨便一個目錄,我是解壓縮到 E:\</span><span style="font-family: Tahoma; text-align: -webkit-auto;">UDK2010.SR1.UP1</span></div>
<div>
<br /></div>
<div>
3.從說明文件 "UDK2010.SR1.UP1-ReleaseNotes-MyWorkSpace.txt" 內你可以得知下面幾件事情</div>
<div>
<br /></div>
<div>
1) REFERENCE PLATFORMS 有兩種: </div>
<div>
a.Desktop - [Nt32Pkg]</div>
Nt32Pkg\Nt32Pkg.dsc
<div>
b. DUET - UEFI Simulation Environment directly on Hardware (via boot process)</div>
<div>
<br /></div>
<div>
2) HOW TO BUILD (WINDOWS SYSTEM) 你要如何在windows系統去建構他</div>
<div>
<b> a.Setup Build Environment 設定你的建構環境</b></div>
<div>
- Install Microsoft Visual Studio 2008* SP1 in the build machine and make sure that AMD64 </div>
<div>
complier was selected when installing.</div>
<div>
<br /></div>
<div>
(安裝微軟的VS2008 SP1,在安裝時要確認你有把AMD64 Compiler選項打勾)</div>
<div>
<br /></div>
<div>
- Download "iasl-win-20070508.zip" from "http://www.acpica.org/downloads/Version_20070508.php" </div>
<div>
and extract file "iasl.exe" to <a href="file:///C:/ASL">C:\ASL</a></div>
<div>
</div>
<div>
(去這個連結抓iasl-win-20070508.zip 這個檔案,並解壓縮後把iasl.exe複製到C:\ASL ,如果</div>
<div>
C:\ASL目錄不存在請自己建立)</div>
<div>
<br /></div>
<div>
<b> b . Extract Common Source Code 解壓縮需要的檔案</b></div>
<div>
- Extract files in [UDK2010.SR1.UP1.MyWorkSpace] to the working space directory (e.g C:). </div>
<div>
Note the Directory "MyWorkSpace" will be created as a result.</div>
<br />
In this case, it is C:\MyWorkspace. There are two BaseTools package one is for Windows <br />
system and another is for UNIX-Like system.
<br />
<div>
</div>
<div>
Please make sure BaseTools(Windows).zip is used here. Expand the appropriate BaseTools to </div>
<div>
<a href="file:///C:/MyWorkSpace">C:\MyWorkSpace</a><div>
</div>
<div>
(把UDK2010.SR1.UP1.MyWorkSpace.zip檔案解壓縮後他會產生一個目錄叫做</div>
<div>
MyWorkSpace,在這目錄內有需要的檔案,你可以把這個目錄複製到</div>
<div>
C:\MyWorkSpace然後再把Windows的Build tool "BaseTools(Windows).zip"也解壓縮到</div>
<div>
這個目錄裡面)</div>
<div>
</div>
<div>
因為我是放在E:\MyWorkSpace,所以會長得像下面這樣子:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDVElxjaG_cglx2viPfs9IsfS7x9TH4Dld6-hwhBL0p7V7vBP_MYvwgn20ZJplR8J2-GF7BFFcjZAwas8EvYWFym0YVzqeJyThaKqXzghlw0sTK9S5L8DksTUKmYKj4x67D-oWXw/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDVElxjaG_cglx2viPfs9IsfS7x9TH4Dld6-hwhBL0p7V7vBP_MYvwgn20ZJplR8J2-GF7BFFcjZAwas8EvYWFym0YVzqeJyThaKqXzghlw0sTK9S5L8DksTUKmYKj4x67D-oWXw/s400/%E6%9C%AA%E5%91%BD%E5%90%8D1.png" width="163" /></a></div>
<div>
<br /></div>
<div>
<b> c. Generate OpenSSL* Crypto Library (產生OpenSSL Crypto 函數庫)</b></div>
<div>
OpenSSL 的 Crypto 函數庫實作了許多資料編碼方法,像是資料摘要函數(使用</div>
<div>
MD2/MD4/MD5/SHA雜湊演算法),對稱式加密函數(使用RC2/RC4/RC5/DES/IDEA</div>
<div>
演算法)以及非對稱式加密函數(DSA/RSA 演算法)。 </div>
<div>
<br /></div>
<div>
- Open file "C:\MyWorkspace\CryptoPkg\Library\OpensslLib\Patch-HOWTO.txt" and </div>
<div>
follow the instruction to install OpenSSL* for UEFI building.</div>
<div>
(打開這個目錄下的文件"Patch-HOWTO.txt",然後跟著他的說明去安裝需要的檔案)</div>
<div>
<br /></div>
<div>
◎ Download OpenSSL 0.9.8w from official website: </div>
<div>
http://www.openssl.org/source/openssl-0.9.8w.tar.gz (先把這個檔案抓下來) </div>
<div>
<br /></div>
<div>
◎ Extract TAR into CryptoPkg/Library/OpenSslLib/openssl-0.9.8w </div>
<div>
(把解壓縮出來的目錄openssl-0.9.8w 放到CryptoPkg/Library/OpenSslLib底下)</div>
<div>
<br /></div>
<div>
◎ Apply this patch: EDKII_openssl-0.9.8w.patch, and make installation </div>
<div>
(套用以及安裝這個修正)</div>
<div>
----------------------------- </div>
<div>
For Windows Environment:</div>
-----------------------------<br />
- Make sure the patch utility has been installed in your machine.</div>
<div>
<span style="font-family: Tahoma; text-align: -webkit-auto;"> </span><span style="font-family: Tahoma; text-align: -webkit-auto;">(確認你有安裝Patch的工具,如果沒有,請先到下面網站下載及安裝)</span><br />
Install Cygwin or get the patch utility binary from<br />
<a href="http://gnuwin32.sourceforge.net/packages/patch.htm">http://gnuwin32.sourceforge.net/packages/patch.htm</a></div>
<div>
<br /></div>
<div>
<span style="font-family: Tahoma; text-align: -webkit-auto;">我是下載下面紅色框框的那一個</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg33B1PF4MTwjbL_nlvIsZZ657IodS4n4dvol8HOY_Xo9Iw0DPhSSJPeK-VhivIssS1rsC6eIJMclXdIBHu3TtjRA0vPguYOb9y9-w4ahcet5UdTzJGhLEKPJtTV63JklMU_EsyKw/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="113" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg33B1PF4MTwjbL_nlvIsZZ657IodS4n4dvol8HOY_Xo9Iw0DPhSSJPeK-VhivIssS1rsC6eIJMclXdIBHu3TtjRA0vPguYOb9y9-w4ahcet5UdTzJGhLEKPJtTV63JklMU_EsyKw/s400/%E6%9C%AA%E5%91%BD%E5%90%8D2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<span style="font-family: Tahoma; text-align: -webkit-auto;">安裝後會在我的</span><span style="font-family: Tahoma; text-align: -webkit-auto;">C:\Program Files (x86)\GnuWin32目錄內</span></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZjiJ3FeUyI7nycyCjKXD4YJiwyQgQpobFCa04XS7ICZxf45mC4s8t1jdqE5k6Mgc9unBrgp_2vJCZQPGhu3no6VPhF_tAdISv8zvk7LeC9Ml0zFcVv2MWLA-KE6wAH2DMVCVWTg/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZjiJ3FeUyI7nycyCjKXD4YJiwyQgQpobFCa04XS7ICZxf45mC4s8t1jdqE5k6Mgc9unBrgp_2vJCZQPGhu3no6VPhF_tAdISv8zvk7LeC9Ml0zFcVv2MWLA-KE6wAH2DMVCVWTg/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D3.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
</div>
<div>
- cd $(WORKSPACE)\CryptoPkg\Library\OpensslLib\openssl-0.9.8w<br />
- "C:\Program Files (x86)\GnuWin32\bin\patch" -p0 -i ..\EDKII_openssl-0.9.8w.patch</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf7anPfYEz8B7KKJiuxTqXan2B7HwjoFrJwfSZj2wBQ87SduEphcr-6ueIoXVduV0WTbVdIECv_m61pcl3hsD4Y7xQVn6FHzE1nu189X-AbIQnRTCShJTGZ-dQpbyWDhz5lRqGpw/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf7anPfYEz8B7KKJiuxTqXan2B7HwjoFrJwfSZj2wBQ87SduEphcr-6ueIoXVduV0WTbVdIECv_m61pcl3hsD4Y7xQVn6FHzE1nu189X-AbIQnRTCShJTGZ-dQpbyWDhz5lRqGpw/s640/%E6%9C%AA%E5%91%BD%E5%90%8D4.png" width="640" /></a></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
</div>
<div>
- cd ..<br /><div>
- Install.cmd </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFTtJ7FAp2rkmmJrw3AFwwuXrhZEfIs38D9ZZdqpfuwLV8SWMkz18n8JLdkSXV0lc0weQoYMjHaQxjx7SSFA2vDZnTBC1-GmPGDHIIzpkhxyU6sbDhqePC0xsVj5qu5hnXXpBnKw/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="134" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFTtJ7FAp2rkmmJrw3AFwwuXrhZEfIs38D9ZZdqpfuwLV8SWMkz18n8JLdkSXV0lc0weQoYMjHaQxjx7SSFA2vDZnTBC1-GmPGDHIIzpkhxyU6sbDhqePC0xsVj5qu5hnXXpBnKw/s320/%E6%9C%AA%E5%91%BD%E5%90%8D5.png" width="320" /></a></div>
<div>
</div>
<div>
<br /></div>
<b> d. Build Steps (開始Build code吧~)</b><br />
*** NT32 ***<br />
- Open a command prompt, type command "cd C:\MyWorkspace" to enter the workspace </div>
<div>
directory, and then type command "edksetup" to initialize the working environment.<br />
- Type below commands to build platforms "build -t VS2008x86 </div>
<div>
(進入到你想到的Platform 目錄內,然後輸入build -t VS2008x86 ,然後你就可以</div>
<div>
看到開始建構你的Code了,做到這一步就算完成了!)</div>
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8t-1VHODOznU9k8T368S8j1UKJxYPR5oolHkDGVNAHGmz308p5FrXmXZwx8pe0NLtF5X77Ap_j1XBq8xf70I23VktP-Vd55Ne8tYxkgzA4hbGip9HCz2p77ASvKPWsOtXTfZt8g/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="99" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8t-1VHODOznU9k8T368S8j1UKJxYPR5oolHkDGVNAHGmz308p5FrXmXZwx8pe0NLtF5X77Ap_j1XBq8xf70I23VktP-Vd55Ne8tYxkgzA4hbGip9HCz2p77ASvKPWsOtXTfZt8g/s320/%E6%9C%AA%E5%91%BD%E5%90%8D6.png" width="320" /></a></div>
<div>
<br /> 底下是其他注意事項:</div>
<div>
<br /> There are two methods to select the tool chain (Use Microsoft Visual Studio 2008* as sample):<br /> - Update TOOL_CHAIN_TAG in file Conf/target.txt: TOOL_CHAIN_TAG = VS2008</div>
<div>
- Add -t build option in command line: "build -t VS2008 ... "</div>
<div>
<br /> For 32-bit VS2008 on 64-bit WINDOWS OS, VS2008x86 should be selected instead of VS2008.<br /> Please refer to tools_def.txt for all supported tool chains and detailed descriptions.<br /><div>
(tools_def.txt will be generated at Conf directory after running "edksetup".)</div>
<div>
</div>
<div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
最後,希望大家都能夠成功建立自己的建構環境!</div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
</div>
</div>
</div>
小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com3tag:blogger.com,1999:blog-34652574.post-5924907667075525922012-09-04T19:46:00.002-07:002012-09-04T19:46:41.270-07:00快快樂樂學EFI (2)<br />
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: medium;"><span style="font-size: 16pt;"><b> </b></span></span></div>
<div align="center" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: medium;"><span style="font-size: 16pt;"><b>快快樂樂學</b></span></span><span style="font-family: Arial; font-size: medium;"><span style="font-size: 16pt;"><b>EFI</b></span></span></div>
<div align="center" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: medium;"><span style="font-size: 16pt;"><b>Harrison Hsieh 2010/07/19</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial;"><span style="font-size: 13pt;"><b>Chap 2 Build EFI How to</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial;"><span style="font-size: 13pt;"><b> </b></span></span> <span style="font-family: 新細明體;"><span style="font-size: 12pt;">這一章是用來說明如何去</span></span><span style="font-family: Arial;"><span style="font-size: 12pt;">Build</span></span> <span style="font-family: 新細明體;"><span style="font-size: 12pt;">你的</span></span><span style="font-family: Arial;"><span style="font-size: 12pt;">EFI Tool Kit</span></span><span style="font-family: 新細明體;"><span style="font-size: 12pt;">或是</span></span><span style="font-family: Arial;"><span style="font-size: 12pt;">EDK</span></span><span style="font-family: 新細明體;"><span style="font-size: 12pt;">,經由一步一步的帶領之下可以讓你很快的擁有一個</span></span><span style="font-family: Arial;"><span style="font-size: 12pt;">EFI</span></span> <span style="font-family: 新細明體;"><span style="font-size: 12pt;">開發環境。</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial;"><span style="font-size: 13pt;"><b>2.1 Build EFI Tool Kit</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">首先,你必須透過</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">SVN</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">去下載一套</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI Tool Kit</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,假設我下載後是放在</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">D:\efitoolkit</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,則他的目錄結構會長的像下圖一樣</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">:</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1hn6_3nkRFTRKGsXgICWrL6Y9sL1bVS4ChfRekC6nqbhd3JezX4wi_Zjz4Vtr-RCiSsCltplNdjU34ZsCAYIKRiii8dUBazwRV026t2661YK9B1JO5acFCQJOmROWvoD7nmVq2g/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1hn6_3nkRFTRKGsXgICWrL6Y9sL1bVS4ChfRekC6nqbhd3JezX4wi_Zjz4Vtr-RCiSsCltplNdjU34ZsCAYIKRiii8dUBazwRV026t2661YK9B1JO5acFCQJOmROWvoD7nmVq2g/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D6.png" /></a></div>
<div align="left" style="font-family: Tahoma;">
<br /></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">首先,我們先去修改</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><b>Build.cmd</b></span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">這個檔案,這個檔案最主要是去控制一些環境變數,這邊環境變數會影響你產生的輸出檔案是</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">IA32/X64</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">set SDK_BUILD_ENV=</span></span><span style="color: red; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">em64t </span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br />
set SDK_INSTALL_DIR=</span></span><span style="color: red; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">D:\efitoolkit</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">SDK_BUILD_ENV -</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">是用來選擇你產生的執行檔是希望在哪個</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">platform</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">中執行,目前一共有幾種</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Platform</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">可以選擇,像是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">nt32/sal64/em64t/bios32</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,而我們選擇的是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">em64t</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,他的意思代表我們要產生</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">X64</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的執行檔</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">這樣子你才可以放在一個</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">64 bit</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">DXE</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">環境下執行。</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">如果你想在一個</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">NT32</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">模擬環境或是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">PEI 32bit</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">環境下執行,那你就要選擇</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">nt32.</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">SDK_INSTALL_DIR -</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">指定你的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI Tool kit</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">擺放的位置,我是放在</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">D:\efitoolkit</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">接下來,你還需要去設定</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">D:\efitoolkit\em64t\sdk.env</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,這個檔案是決定你要使用哪一種</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Compiler</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">工具,預設是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">WinDDK</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,但是小弟總是喜歡來點不一樣的,因此我改使用</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">VS2005!</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">為了使用</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">VS2005</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,所以我就必須去修改這個檔案。</span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnyJiI-IwURYtvhVONFmPPHBtKJgNHChV9x-iwIzhnQmKRBT53r9YPnFk6Ankor9026xhhgUysDRyUncQN7d-4LR9hY6JL2Q8AJOMfhW2ldohk87KW4bsK6M8gsHJCpI3wue-fFg/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnyJiI-IwURYtvhVONFmPPHBtKJgNHChV9x-iwIzhnQmKRBT53r9YPnFk6Ankor9026xhhgUysDRyUncQN7d-4LR9hY6JL2Q8AJOMfhW2ldohk87KW4bsK6M8gsHJCpI3wue-fFg/s320/%E6%9C%AA%E5%91%BD%E5%90%8D7.png" width="180" /></a></div>
<div align="left" style="font-family: Tahoma;">
<br /></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">修改方式很簡單,就是指定到我的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">VS2005</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">內的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Compiler</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">目錄就可以了</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">:</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="color: red; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">#</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">MSSdk = C:\WINDDK\3790.1830\bin\win64\x86\amd64<br />
MSSdk = "</span></span><span style="color: red; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">C:\Program Files\Microsoft Visual Studio 8\VC\bin\x86_amd64</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">"</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">然後就是重點了,你必須使用的是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Visual Studio 2005 X64 Cross Tools Command Prompt</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,而不是一般</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">32 bit</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Command Prompt.</span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeQPmtEGyyffzHg-EHuAow8fvKZ1qW13d-GFg_lUN8ZlJkFAy8n1QPw51Y1QWpnRDm2ob5nv4Q1kP3kMKd61Dpvypx3AlRfMSL13MkT2QwS8iL8hUmb7fXktW_C9efDU1ryaMaEg/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="67" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeQPmtEGyyffzHg-EHuAow8fvKZ1qW13d-GFg_lUN8ZlJkFAy8n1QPw51Y1QWpnRDm2ob5nv4Q1kP3kMKd61Dpvypx3AlRfMSL13MkT2QwS8iL8hUmb7fXktW_C9efDU1ryaMaEg/s640/%E6%9C%AA%E5%91%BD%E5%90%8D8.png" width="640" /></a></div>
<div align="left" style="font-family: Tahoma;">
<br /></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">接著切換目錄到你的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI Tool Kit</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">目錄,然後先執行</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Build.cmd</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">設定環境後,就可以使用</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">nmake</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">開始編譯你的環境。</span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEMkm9IXfsfsLLh3pUk6JyUySzS3tCmMi_7Qb5IEZJAx07rTb85BHYwAaSOl8T6YZ3N-IdA0EWxPq48FzssympBzeya2E_kRdlc9OYJmOMT27eIE9KvwyZchJwzhkDsMRZuUX-5Q/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="307" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEMkm9IXfsfsLLh3pUk6JyUySzS3tCmMi_7Qb5IEZJAx07rTb85BHYwAaSOl8T6YZ3N-IdA0EWxPq48FzssympBzeya2E_kRdlc9OYJmOMT27eIE9KvwyZchJwzhkDsMRZuUX-5Q/s640/%E6%9C%AA%E5%91%BD%E5%90%8D9.png" width="640" /></a></div>
<div align="left" style="font-family: Tahoma;">
<br /></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">編譯的結果會產生在</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">bin</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">跟</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">output</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">這兩個目錄內:</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">D:\efitoolkit\em64t\bin</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">D:\efitoolkit\em64t\output</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">所以你可以在這些目錄內找到你要的執行檔。</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">[Note]</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">如果你要</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">build nt32</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,記得改一下</span></span><span style="color: red; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">SDK_BUILD_ENV = nt32</span></span><span style="color: red; font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,並改用</span></span><span style="color: red; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Visual Studio 2005 Command Prompt (32bit)</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial;"><span style="font-size: 13pt;"><b>2.2 Build EDK</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EDK</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">內有許多的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Platform</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">可以使用,其中比較常使用到的就是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Nt32</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">跟</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Developer's UEFI Emulation (DUET)/X64</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,下面就介紹這</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">3</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">種</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Platform</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Build</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的方式</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">:</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial;"><span style="font-size: 13pt;"><b>2.2.1 Nt32 platform</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">使用</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">VS2005</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">去</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Build EDK</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Nt32</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">環境時需要注意的地方是把</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">config.env</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">內的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">USE_VC8</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">打開,然後再使用</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">VS2005 Command prompt (32 bit)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">就可以去</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Build Nt32</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(1)SET EDK_SOURCE=D:\EDK</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> SET EDK_TOOLS_PATH=%VCINSTALLDIR% <--</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">可有可無</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(2)D:\EDK\Sample\Platform\Nt32\Build\Config.env<br />
USE_VC8 =</span></span> <span style="color: red; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">YES</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br />
(3) </span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">然後依照下圖一步一步的做即可</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">進入到</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Build folder</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,然後鍵入</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">nmake all)</span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEits4b2pil_e3Pl7q8Vrg8VPIcxppdlVlE07B5F0ADJbrgAHB6BGqHcmAOgk9H_r_oujQZ7qRjUHH0JZBvFpM3_5dnk2T-kv2yyRekmKkub5v_9ORMctQYqqbrRv_6UmeRC1GHGlw/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="171" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEits4b2pil_e3Pl7q8Vrg8VPIcxppdlVlE07B5F0ADJbrgAHB6BGqHcmAOgk9H_r_oujQZ7qRjUHH0JZBvFpM3_5dnk2T-kv2yyRekmKkub5v_9ORMctQYqqbrRv_6UmeRC1GHGlw/s400/%E6%9C%AA%E5%91%BD%E5%90%8D10.png" width="400" /></a></div>
<div align="left" style="font-family: Tahoma;">
<br /></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(4) Nt32</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">還有個好處就是可以執行</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">NT32</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">模擬器,而執行的方式就是執行</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">system.cmd</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">設定</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI Shell</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">模擬環境,然後再鍵入</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">nmake run</span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSzrv31pglPW3YwnEvASYTkjPmLkezHLCPXtTMhJd7_viBJzK-XpICAT4XEBD_kUqcCREKDDhAwo1GCJrkkY9eTW2hN7uDPe_dnaLLdPNYpd4ICuD-ZbxI9o7i_MB1zh9Rfqw86A/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="53" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSzrv31pglPW3YwnEvASYTkjPmLkezHLCPXtTMhJd7_viBJzK-XpICAT4XEBD_kUqcCREKDDhAwo1GCJrkkY9eTW2hN7uDPe_dnaLLdPNYpd4ICuD-ZbxI9o7i_MB1zh9Rfqw86A/s400/%E6%9C%AA%E5%91%BD%E5%90%8D11.png" width="400" /></a></div>
<div align="left" style="font-family: Tahoma;">
<br /></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">然後就會看到下圖:</span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwW0KEL7UiX0rxQfhMdMdgfJ2Og3G1r1SKHvdyjtAKpVwa9RLYVuYglJ93otWoq3b0sVYrb0h6J_7af0RXPbV9pFGHH_RzfPZSMu8rahHwGJhsyNQy25zAo7sm8duu4BeZQ68rXg/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="325" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwW0KEL7UiX0rxQfhMdMdgfJ2Og3G1r1SKHvdyjtAKpVwa9RLYVuYglJ93otWoq3b0sVYrb0h6J_7af0RXPbV9pFGHH_RzfPZSMu8rahHwGJhsyNQy25zAo7sm8duu4BeZQ68rXg/s400/%E6%9C%AA%E5%91%BD%E5%90%8D12.png" width="400" /></a></div>
<div align="left" style="font-family: Tahoma;">
<br /></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial;"><span style="font-size: 13pt;"><b>2.2.2 DUET/X64 platform</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">DUET</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">這是一個開發者的模擬環境,在你執行</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">nmake all</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">之前,你必須設定下面的環境變數</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">:</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> set EDK_SOURCE=d:\edk<br />
set WIN_DDK_PATH=</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">可忽略,如果你是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">VS2003</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的話就必須設定</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br />
set MASMPATH=c:\MASM615</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br /></span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">另外就是要把</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">config.env</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">內的設定打開,這樣子才能使用</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">VS2005</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">USE_VC8 = YES<br />
USE_VC8_X64 = YES</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">接著,使用</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">VS2005 Command prompt (32 bit)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">就可以去</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Build</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">[Note]</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">X64 platform build</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的方式如同</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">DUEF</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,而且內含有</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">X64 EFI Shell</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">可以讓你在</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">X64 platform</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">使用。</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">DUET/X64 platform</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">不支援</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><b>nmake run</b></span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的模擬環境,所以你沒辦法在你的工作機上運行。</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
</div>
小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com0tag:blogger.com,1999:blog-34652574.post-10030112757959820682012-09-04T19:39:00.000-07:002012-09-04T19:47:18.438-07:00快快樂樂學EFI (1)<br />
<div align="center" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: medium;"><span style="font-size: 16pt;"><b>快快樂樂學</b></span></span><span style="font-family: Arial; font-size: medium;"><span style="font-size: 16pt;"><b>EFI</b></span></span></div>
<div align="center" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: medium;"><span style="font-size: 16pt;"><b>Harrison Hsieh 2010/07/19</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: medium;"><span style="font-size: 16pt;"><b>Chap 1 EFI How to</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial;"><span style="font-size: 13pt;"><b>1.1</b></span></span> <span style="font-family: 新細明體;"><span style="font-size: 13pt;"><b>概論</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
</div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">有感於當初學習</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的時候是直接經由</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">BIOS vendor: "I</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">公司</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">"</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的網路上的訓練課程以及他們派了一組人來幫我們上了一星期</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Bring up</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">之後,就直接在客戶的案子上邊做邊學,所以很多</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">基本的基礎都沒有學好</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">!</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">因此,最近想化整為零把</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">重頭學習一遍</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">!</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">那</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">入門該學些甚麼呢</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">?! </span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">個人覺得,工欲善其事必先利其器</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">!</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">所以先去抓一套可以編譯工具以及一套</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EDK</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">或是</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI Tool kits</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">來學習是最簡單的方式</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">! </span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">所以我們的學習目標就是了解甚麼是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI/UEFI</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,然後再告訴你如何去找到你需要的資料以及建構出一個可以撰寫</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI code</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的環境。</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;"><br /></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial;"><span style="font-size: 13pt;"><b>1.2 EFI</b></span></span> <span style="font-family: 新細明體;"><span style="font-size: 13pt;"><b>歷史回顧</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> Extensible Firmware Interface (EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,可擴充韌體介面</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">)</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">是一個規範,他規範了一個介面,界於作業系統</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">例如</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">: Windows)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">與平台韌體</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(Platform firmware)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">之間的一個橋樑。</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的改進是被用來取代傳統</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">BIOS</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的介面</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">這個傳統的介面被稱之為</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">IBM PC compatible PC</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">BIOS</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">或稱之為</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Legacy BIOS).</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">最初</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">是由</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Intel</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">所主導發展,</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Intel</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">已於</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">2005</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">年此規範交給目前</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">UEFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">論壇</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><a href="http://en.wikipedia.org/wiki/Unified_EFI_Forum%20/o%20Unified%20EFI%20Forum"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>Unified EFI Forum</u></span></span></a><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">)</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的會員一起共同維護與推廣,這便是眾所皆知的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">UEFI (Unified EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,統一的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI).</span></span></div>
<div align="left" style="font-family: Tahoma;">
</div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">最初</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">發展動機是為了在</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">1990</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">年中的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Intel-HP Itanium</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">系統,當時的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">PC BIOS</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">有一個限制</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">支援</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">16 bit</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的處理器模式,</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">1MB</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">位址空間與</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">AT</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">硬體架構</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,而這個限制使的他無法支援大型伺服器平台的系統</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Intel-HP Itanium</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">。</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">最初的時候</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Intel</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">只是為了解決這些</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">BIOS</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">啟動時的限制,後來就乾脆改變它的名稱,且稱之為</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">。</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br /></span><span style="font-size: 10pt;"><b>Intel Platform Innovation Framework for EFI</b></span><span style="font-size: 10pt;"><br />
Intel</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">在其平台上為了</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">去建立了一個新框架</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(Framework)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,而這個框架的最初代號叫做</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><b>Tiano</b></span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,這個框架非常的完整,它包含了</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">對原本傳統韌體的所有支援,他也可以透過所謂的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">compatibility support module(CSM)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">來支援傳統的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">PC BIOS</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,簡單說就是傳統</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">BIOS</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">能做的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">也能做,但是不是完整支援就要看</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">CSM</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">支援的程度。</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br /></span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">特別是,這個框架包含了在</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Power- On</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">後,所有必要的初始化步驟去初始化一個平台</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(Platform);</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">但是這些步驟的運作並沒有被定義在</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI specification</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">內,而是被定義在</span></span> <a href="http://en.wikipedia.org/wiki/Platform_Initialization_Specification%20/o%20Platform%20Initialization%20Specification"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>Platform Initialization Specification</u></span></span></a><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">簡稱</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">PI Spec)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">內的章節。</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Intel</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">並沒有將這個架構完整的開放給一般的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">End-User</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">知道,他只有開放這些資訊給一些獨立的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">BIOS</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">廠商</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">稱之為</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">IBV)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,像是安邁</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><a href="http://en.wikipedia.org/wiki/American_Megatrends%20/o%20American%20Megatrends"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>American Megatrends</u></span></span></a> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">AMI)</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">或是系微</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><a href="http://en.wikipedia.org/wiki/Insyde_Software%20/o%20Insyde%20Software"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>Insyde Software</u></span></span></a><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">、鳳凰科技</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><a href="http://www.phoenix.com/"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>Phoenix</u></span></span></a><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">) …</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">等的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">BIOS</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">韌體供應商。</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br /></span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">而在</span></span><a href="http://www.tianocore.org/%20/o%20http://www.tianocore.org/"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>TianoCore project</u></span></span></a><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">也就是所謂的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI Developer Kit</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EDK)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Open source</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">之中,會提到如何去開發這個</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Framework</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">。這個開發工具中含括了</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的一些硬體初始化的程式碼</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">只針對一些硬體,但並不包含韌體本身</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">)</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,至於這些程式碼的授權包含</span></span><a href="http://en.wikipedia.org/wiki/BSD_license%20/o%20BSD%20license"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>BSD license</u></span></span></a> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">和</span></span> <a href="http://en.wikipedia.org/wiki/Eclipse_Public_License%20/o%20Eclipse%20Public%20License"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>Eclipse Public License</u></span></span></a><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">…</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">等。</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br /></span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">而</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Tiano</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">是為了取代</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">BIOS</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的一種框架,所以透過</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">可以讓</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">PC</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的設備自己撰寫一個驅動程式來管理這個設備。而對於開放原始碼來說,這也代表大家可以從</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">TianoCore.org</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">下載這個專案,然後以</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">BSD</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Berkley Software Distribution</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">)的授權方式來生產你的產品。</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">BSD</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的授權,你自己去修改它的軟體並且發展出屬於你自己的產品,但</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">BSD</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">並不會去要求你把修改的地方公開出來,而這種方法會有助於你去保護你的智慧財產權。</span></span></div>
<div align="left" style="font-family: Tahoma;">
</div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">歷史故事簡略介紹完了,廢話不多說我們就馬上進入</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">世界中,告訴你一個</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的環境需要哪些工具來編譯、去哪裡下載</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">工具包、如何建構你的編譯環境。</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br /></span></span><span style="font-family: Arial;"><span style="font-size: 13pt;"><b>1.3 Compiler</b></span></span> <span style="font-family: 新細明體;"><span style="font-size: 13pt;"><b>工具</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">為了能夠編譯一套</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EDK</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">或是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI Tool kits</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,你會需要使用到</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">WinDDK</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">或是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">VisualStudio</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,這是為了提供一些</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Compiler</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">工具像是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">C</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Compiler : CL.EXE</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">或是像</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Lib</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">工具</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">: LIB.EXE</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">以及連結工具</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Link.exe...etc</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">另外你可能還需要使用到</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">MASM</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">來組譯一些少部分的組合語言程式碼,因此軟體需求如下</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">:</span></span></div>
<div align="left" style="font-family: Tahoma;">
</div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(1) WinDDK version 3790.11830(EFI Tool kits</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">預設</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">)/ VisualStudio 2003(EDK</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">預設</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">)/VisualStudio 2005/VisualStudio 2008<br />
(2) EFI Tools Kit /EDK source code.</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(3) MASM<br />
(4) TortoiseSVN</span></span></div>
<div align="left" style="font-family: Tahoma;">
</div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial;"><span style="font-size: 13pt;"><b>1.4 EFI Resource</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">在茫茫網海中,如何蒐尋</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">相關資源</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">?!</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">小弟我不是幫</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Google</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">打廣告,是因為我常使用他去找資料</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">! </span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">那我們要輸入哪些關鍵字可以找到我們要的資料呢</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">?</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br /></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">首先進入</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Google</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">搜尋引擎,輸入關鍵字</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">"EFI EDK"</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,你就會看到下面的連結</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">: </span></span> <a href="http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=EDK"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=EDK</u></span></span></a></div>
<div align="left" style="font-family: Tahoma;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxhnfvy50sm99mIl75cW2IFqJjS8AdAstSblv0q5D4SxOiOo1qA5FrvX72nv6zIkHZ2neAQq16v9xhzisSYzwAMnFhwnx4Bu8zEPstGaqV6xW23sxkbqSuL5zcpDH702s70F2RoQ/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="101" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxhnfvy50sm99mIl75cW2IFqJjS8AdAstSblv0q5D4SxOiOo1qA5FrvX72nv6zIkHZ2neAQq16v9xhzisSYzwAMnFhwnx4Bu8zEPstGaqV6xW23sxkbqSuL5zcpDH702s70F2RoQ/s400/%E6%9C%AA%E5%91%BD%E5%90%8D1.png" width="400" /></a></div>
<div align="left" style="font-family: Tahoma;">
<br /></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">目前</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">相關資訊比較完整的地方就是這個網站,裡面你可以下載到你需要的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI Tool kit/EDK</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,並且有一些相關的文件可以幫助你開始你的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">之旅。</span></span></div>
<div align="left" style="font-family: Tahoma;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjORo8LIbkP7OvN3jC6d8q00saX3zo6ZPkVTQ3yatWv5K6785C2XG-X4v3hUsZtJQWe1n46USAqwXuElA12QNqn5wAvyWm-wpeVUES71nNZztrIMw2FgeJXF2yzxYHFSpUCFRlxWQ/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjORo8LIbkP7OvN3jC6d8q00saX3zo6ZPkVTQ3yatWv5K6785C2XG-X4v3hUsZtJQWe1n46USAqwXuElA12QNqn5wAvyWm-wpeVUES71nNZztrIMw2FgeJXF2yzxYHFSpUCFRlxWQ/s640/%E6%9C%AA%E5%91%BD%E5%90%8D2.png" width="640" /></a></div>
<div align="left" style="font-family: Tahoma;">
<br /></div>
<div align="left" style="font-family: Tahoma;">
</div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial;"><span style="font-size: 13pt;"><b>1.5 EFI Tool Kits</b></span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br />
</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">接下來我們就開始看看這些不同的專案有哪些是可以幫助我們入門,首先要介紹的是</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">工具組</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(EFI Tool Kits)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,他是一個可以支援快速開發</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">應用程式的一個環境,讓你可以快速的開發</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">32 bit/64bit</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">應用程式。</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">這些應用程式包含</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">: EFI based applications, protocols, device drivers, EFI shells</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">以及不同平台的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> OS loaders (IA-32, IA-64(IPF) and Intel 64(</span></span><span style="color: red; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EM64T or X64</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">) platforms)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,你可以透過他的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Source Repository</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">下載。</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;"><b>在下載之後,如何得知你下載的</b></span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><b>EFI Tool kit</b></span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;"><b>版本</b></span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">:</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">例如</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">D:\efitoolkit\doc\RELNOTE.pdf</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">文件內會有版本,如下圖所示</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">:</span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb7gNA3oMXrxfPY82zkTT9Yz-46stxXHquQjJL8hkfb-EuUa3l7i06LE4fAb4IlYW-WAh2Vvt_1Av6wB71P9WAEKS6NZr9_1_z6LIF9WfZCWnT99_Bt6a4yrHn2vEXzi5pHvpD_Q/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb7gNA3oMXrxfPY82zkTT9Yz-46stxXHquQjJL8hkfb-EuUa3l7i06LE4fAb4IlYW-WAh2Vvt_1Av6wB71P9WAEKS6NZr9_1_z6LIF9WfZCWnT99_Bt6a4yrHn2vEXzi5pHvpD_Q/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D3.png" /></a></div>
<div align="center" style="font-family: Tahoma; margin: 4.75mm 0mm; text-indent: 0mm;">
<br /></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial;"><span style="font-size: 13pt;"><b>1.6 EFI Dev Kit (EDK) :</b></span></span> <a href="http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=EDK"><span style="color: blue; font-family: Arial;"><span style="font-size: 13pt;"><b><u>http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=EDK</u></b></span></span></a></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> EDK</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">指的是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Open-source</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的一個</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI “Framwork”</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">元件,英特爾依照</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EFI</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">規範所實做出來的一套</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Code</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,當時的開發的代號為</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">“Tiano”</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">。</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;"><br /></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> EDK</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的基本上是一個範例元件,裡面有為框架的基礎程式碼</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(Framework's Foundation code)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">和驅動程序範例</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(Sample Driver)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">。</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;"><br /></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> EDK</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">也是一個開發工具包,可以用來</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Debugging/Testing EFI</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Framework's driver</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">。</span></span></div>
<div align="left" style="font-family: Tahoma;">
</div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">你可以透過下面的連結去取得一些相關的資訊以及說明</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">:</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> (1) EDK</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">如何開始</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">: </span></span> <a href="http://sourceforge.net/projects/efidevkit/files/Edk%20Getting%20Started%20Guide%5B1%5D.0.41.pdf/download%20/o%20http://sourceforge.net/projects/efidevkit/files/Edk%20Getting%20Started%20Guide%5B1%5D.0.41.pdf/download"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>EDK Getting Started Guide</u></span></span></a><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">或是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span> <a href="http://ncu.dl.sourceforge.net/project/efidevkit/Edk%20Getting%20Started%20Guide%5B1%5D.0.41.pdf"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>http://ncu.dl.sourceforge.net/project/efidevkit/Edk%20Getting%20Started%20Guide%5B1%5D.0.41.pdf</u></span></span></a></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> (2)</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">一些</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Framework Spec :</span></span> <a href="http://www.intel.com/technology/framework/spec.htm"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>http://www.intel.com/technology/framework/spec.htm</u></span></span></a></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> (3) EDK SVN</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">下載</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">: </span></span> <a href="https://efidevkit.svn.sourceforge.net/svnroot/efidevkit/trunk/Edk%20/o%20https://efidevkit.svn.sourceforge.net/svnroot/efidevkit/trunk/Edk"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>https://efidevkit.svn.sourceforge.net/svnroot/efidevkit/trunk/Edk</u></span></span></a><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span></div>
<div align="left" style="font-family: Tahoma;">
</div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">從下圖中的紅色框框的地方就是</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">SVN</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">下載的連結</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">: </span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQFMIFdYSag-yYchXK-dXy2IVYvAfZCmLrKIoupMaJzdPDSDAaRdO8yTm0f0YSYLfxQ1W2jlDdnct4L4qKizGF1Wq6XQEJyCk3K2z3C7z2Vi8BlB0DN-hYu8LvasuLy_TmzZsPwA/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQFMIFdYSag-yYchXK-dXy2IVYvAfZCmLrKIoupMaJzdPDSDAaRdO8yTm0f0YSYLfxQ1W2jlDdnct4L4qKizGF1Wq6XQEJyCk3K2z3C7z2Vi8BlB0DN-hYu8LvasuLy_TmzZsPwA/s640/%E6%9C%AA%E5%91%BD%E5%90%8D4.png" width="640" /></a></div>
<div align="left" style="font-family: Tahoma;">
<br /></div>
<div align="left" style="font-family: Tahoma;">
</div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial;"><span style="font-size: 13pt;"><b>1.7 Download EDK/EFI Tool kits</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"> </span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">首先,你必須先安裝</span></span> <span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">TortoiseSVN</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,這是一個版本控制的軟體,可以幫助你去</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Server</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">端把</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">code</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">抓下來</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">!</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">如果你沒有使用過的人就請先研究看看這個東西要如何使用,這邊就不多說明</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">!<br />
</span></span> <a href="http://tortoisesvn.tigris.org/"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>http://tortoisesvn.tigris.org/</u></span></span></a></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br />
</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">接著,透過這個</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">TortoiseSVN</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">去抓一套最新版的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">EDK /EFI Tool kits</span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">下來</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">! </span></span> <span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">方法很簡單,就是透過</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">TortoiseSVN</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Export</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">功能,在他的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">URL</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">地方輸入你要抓的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Code</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">的位置</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">(</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">也就是前面提到的</span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><b>Source Repository</b></span><span style="font-size: 10pt;">)</span></span><span style="font-family: 新細明體; font-size: x-small;"><span style="font-size: 10pt;">,</span></span><span style="font-family: 新細明體; font-size: x-small; text-align: -webkit-auto; text-indent: 0mm;"><span style="font-size: 10pt;">然後輸入好</span></span><span style="font-family: Arial; font-size: x-small; text-align: -webkit-auto; text-indent: 0mm;"><span style="font-size: 10pt;">Export directory(</span></span><span style="font-family: 新細明體; font-size: x-small; text-align: -webkit-auto; text-indent: 0mm;"><span style="font-size: 10pt;">例如存放到</span></span><span style="text-align: -webkit-auto; text-indent: 0mm;"> </span><span style="font-family: Arial; font-size: x-small; text-align: -webkit-auto; text-indent: 0mm;"><span style="font-size: 10pt;">D:\EfiToolKit )</span></span><span style="font-family: 新細明體; font-size: x-small; text-align: -webkit-auto; text-indent: 0mm;"><span style="font-size: 10pt;">,然後就等他下載好就可以了,例如下面的圖示與步驟</span></span><span style="font-family: Arial; font-size: x-small; text-align: -webkit-auto; text-indent: 0mm;"><span style="font-size: 10pt;">: </span></span><span style="text-align: -webkit-auto; text-indent: 0mm;"> </span><a href="https://efi-toolkit.svn.sourceforge.net/svnroot/efi-toolkit/trunk/efi-toolkit" style="text-align: -webkit-auto; text-indent: 0mm;"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>https://efi-toolkit.svn.sourceforge.net/svnroot/efi-toolkit/trunk/efi-toolkit</u></span></span></a><span style="font-family: Arial; font-size: x-small; text-align: -webkit-auto; text-indent: 0mm;"><span style="font-size: 10pt;"> (</span></span><span style="font-family: 新細明體; font-size: x-small; text-align: -webkit-auto; text-indent: 0mm;"><span style="font-size: 10pt;">下載</span></span><span style="font-family: Arial; font-size: x-small; text-align: -webkit-auto; text-indent: 0mm;"><span style="font-size: 10pt;">EFI Tool Kits)</span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1DJg3NHupOzVoBFdq-TU9GS2I75owZXyAUmOChljPE8s4a9rHnKm6SsmouHz1NpcdN-uql6C1fSAs_Cuj7bdxeGp1ZJvfvMrDVOEBozL-PgOGMP_N3nSJwxXEKCfa8Yb270Ic3Q/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1DJg3NHupOzVoBFdq-TU9GS2I75owZXyAUmOChljPE8s4a9rHnKm6SsmouHz1NpcdN-uql6C1fSAs_Cuj7bdxeGp1ZJvfvMrDVOEBozL-PgOGMP_N3nSJwxXEKCfa8Yb270Ic3Q/s400/%E6%9C%AA%E5%91%BD%E5%90%8D5.png" width="400" /></a></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br />
</span></span></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial;"><span style="font-size: 13pt;"><b>1.8 Reference</b></span></span></div>
<div align="left" style="font-family: Tahoma;">
</div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">UEFI spec :</span></span> <a href="http://www.uefi.org/specs"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>http://www.uefi.org/specs</u></span></span></a></div>
<div align="left" style="font-family: Tahoma;">
<span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">How to get WinDDK :</span></span> <a href="http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx</u></span></span></a><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br /></span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">UEFI Programming :</span></span> <a href="http://x86asm.net/articles/uefi-programming-first-steps/index.html"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>http://x86asm.net/articles/uefi-programming-first-steps/index.html</u></span></span></a><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><br /></span></span><span style="font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;">Wiki :</span></span> <a href="http://zh.wikipedia.org/zh-tw/%E7%BB%9F%E4%B8%80%E5%8F%AF%E6%89%A9%E5%B1%95%E5%9B%BA%E4%BB%B6%E6%8E%A5%E5%8F%A3"><span style="color: blue; font-family: Arial; font-size: x-small;"><span style="font-size: 10pt;"><u>http://zh.wikipedia.org/zh-tw/%E7%BB%9F%E4%B8%80%E5%8F%AF%E6%89%A9%E5%B1%95%E5%9B%BA%E4%BB%B6%E6%8E%A5%E5%8F%A3</u></span></span></a></div>
<div align="left" style="font-family: Tahoma;">
</div>
<div align="left" style="font-family: Tahoma;">
</div>
小華的部落格http://www.blogger.com/profile/05736786715794051383noreply@blogger.com3