Beyond BIOS Chinese Simple Preview Rev 0.2
Beyond BIOS Chinese Simple Preview Rev 0.2
Ё᭛乘㾜⠜
WWW.BIOSREN.COM
Rev 0.2
ໄᯢ
ᴀ䌘᭭ҙկᄺдখ㗗П⫼ˈ䇋ᄺдখ㗗ᅠПৢ 24 ᇣᯊߴݙ䰸ˈ
㒣ᥜᴗ㗙ϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩ПՓ⫼ˈ৺߭
ৢᵰ㞾䋳DŽ
ᴀ䌘᭭ݙᆍᴹ⑤Ѣ㔥㒰ˈ⬅⛁ᖗ㔥টˈ㣅䇁⠅ད㗙ण㗠៤ˈϡֱ
䆕݊Ё᮴㒄ⓣǃ᮴⨩⮉ˈ⫮㟇᳝ѯഄᮍᅠܼ䫭䇃ˈ䇋䯙㗙ԧ䇙DŽ
ᴀ䌘᭭ݙᆍᇮϡᅠᭈˈሲ乘㾜⠜ᴀˈᇮ᳝ϔゴǃѨゴǃकゴ
䚼ߚݙᆍᕙᅠ៤DŽ
㢹㽕㦋ᕫᅠᭈ⠜ᴀⱘᄺдк㈡ˈ䇋䌁ф㣅᭛ℷ⠜кljBeyond BIOS
–Implementing the Unified Extensible Firmware Interface with Intel’s
Framework NJ 㗙 ˖ Vincent Zimmer,
Michael Rothman, and Robert Hale
ߎ⠜˖Intel Press www.intel.com/intelpress
ᛳ䇶㔥ট Perseveranceǃxtdumplingǃ
LibeiliǃRexǃSamliǃsnowcusoǃcharlieǃ
XtjiayouǃLightSeedǃStrengthǃhabouǃ
yuxi1127 ǃ xueyin000 ǃ luciferli ǃ
wyz198461ǃmayfangǃedmoonǃgbyHWǃ
ella ǃ Zonel ǃ Kaeshine ǃ gssxd ǃ
dingchao0205ǃpassionappleǃwendywu00ǃfreasyǃbiosyeǃDelphiǃ
EdwinǃRainbowǃgikidyǃhitpirǃdebugcodeǃmanliangpaiǃwj025ǃ
shen ㄝЎℸҬߎⱘ㡄䕯ࡾˈᛳ䇶݊Ҫ䖭䞠≵߫ߎৡᄫⱘ㔥টⱘ咬咬
ᬃᣕˈᏠᳯ㛑ᅠᭈ⠜ᴀⱘᛳ䇶ৡऩЁⳟࠄ᠔᳝ᬃᣕҬߎ䖛ࡾⱘ㔥
টⱘৡᄫDŽ
ᛳ䇶⼲ˈᛳ䇶Џˈᛳ䇶 CCTVʽ
Giantt.Peng
2010.5.10
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ϔゴ
ὖ䗄
ᴹ䖭Ͼདⱘഄᮍᡒ៥ˈ㺙ϔাᇣⱑ……ܨ
—Harlan Ellison
᱂䗮⫼᠋ᑊϡⶹ䘧ϔৄ⦄ҷ䅵ㅫᴎ݊ᐩৢⱘᎹॳ⧚DŽ䆒䅵Փ✊ˈᓔথ㗙㗫䌍䞣ⱘᯊ䯈ǃ
ᗱ㗗㊒ᇚ㒘៤䅵ㅫᴎⱘ䳊ᬷ䚼ӊᭈড়៤ϔϾᅠܼড়Т䘏䕥ⱘᭈԧDŽ䕗䅵ㅫᴎਃࡼᑣ㗠㿔ˈ
䖭⾡ᭈড়ˈ⫮㟇ᇍѢ䙷ѯ㓪ݭ䅵ㅫᴎ݊ҪᑣⱘҎˈ䛑ࡴҸҎ䌍㾷DŽ
ৃਃࡼӊⱘᴖᗻϢ᮹ׅˈ⦄Ꮖ㒣থሩࠄᅠܼৃҹϢᑩሖ⹀ӊঞ݊ࡴ䕑ⱘ䕃ӊⱘ
ᴖ ᗻ ᑊ 偒 唤 偅 њ DŽ ᳔ ᮄ ⱘ ৃ ਃ ࡼ ӊ ⱘ ᶊ ᵘ ᰃ ৃ ᠽ ሩ ӊ ষ ˄ Extensible Firmware
InterfaceˈҹϟѺㅔ⿄ EFI˅ˈEFI ᅮНњӊϢ᪡㋏㒳ҹঞ option ROMs П䯈ⱘষDŽᅲ⦄
EFI ⱘ䕃ӊᶊᵘৃҹ᳝᮴᭄⾡DŽᴀк佪ᦣܜ䗄њ EFI ⱘ㒘៤䚼ߚঞ݊⡍ᗻˈ✊ৢ䆺䗄њϔϾࡳ
㛑Єᆠⱘ EFI ⱘᶊᵘˈ⦄㹿⿄ПЎ㣅⡍ᇨ® EFI ᑇৄ߯ᮄᶊᵘ˄Intel® Platform
Innovation Framework for EFI˅ˈ㗙ㅔऩⱘ⿄ FrameworkDŽ
ग़
᳔ᮽⱘ⬉㛥≵᳝ৃਃࡼӊDŽ⫼᠋ϡᕫϡࡼ᪡⬉㛥ࠡ䴶ᵓϞⱘᓔ݇ᴹ䕧ܹϔϾਃࡼ
ᑣDŽ䖭Ͼ䖛䴲ᐌ㓧᜶ǃ䌍ˈᑊϨᯧѢߎ䫭DŽϔѯ⬉㛥Փ⫼ᕜᴖⱘᣛҸ䲚˄ᛇᛇ䕧ܹ䖭ѯ
ᣛҸᴀ䑿ⱘᎹህҸҎথ⮃ 䆥㗙˅ˈ᠔ҹҪӀⱘ䆒䅵㗙Ӏㅔ࣪њ䖭ϔ⌕ˈ↨བҢϔϾ㒌ᏺϞ
ᴹ䇏ܹᑣDŽ䖭Ͼᯊҷ᱂䘡Փ⫼ϔ⾡⣀⡍ⱘ“㞾ࡼ࣪”䆒——ϔഫ↣Ͼᓔ݇໘䛑᳝ߛࡆ䔼䗍
ⱘ㛊ড়ᵓDŽՓ⫼ࠊᵓ⊓ⴔᵓⳈ㒓⒥ࡼᯊˈߛࡆ䔼䗍ՓПܜϟ⒥ݡϞ⒥ˈࠊᓔ݇Ӯℷ
⹂ⱘԡ㕂ࡼDŽᇍѢ᪡ਬᴹ䇈ᓔথᇣⱘᑣਃࡼ㋏㒳ᴹপᕫゲѝӬᰃ䴲ᐌᐌ㾕ⱘˈ⊩خ
᱂䘡ⱘᰃ䞛⫼ᏺ᳝Ͼ䕀ᤶᓔ݇ⱘᑣᴹਃࡼ㋏㒳DŽ
Пৢˈ᳔߱ⱘᓔ݇ԡ㕂㹿ᵓवϞⱘѠᵕㅵ᠔ҷ᳓ˈ䖭⾡㺙㕂ⳟ䍋ᴹڣᰃϔϾ᠔䇧ⱘೈ䆒
DŽা᳝ϔϾҢѠᵕㅵ“ᄬ”ټࠊࠄ RAM 䞠ⱘᇣⱘᑣৃҹ㹿ỡܹDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ӊЎ⹀ӊᢑ䈵ሖ
BIOS ⱘᴀⳂᷛᰃ㞾Ẕҹঞ߱ྟ࣪㋏㒳ˈẔ⌟䕧ܹ䕧ߎ䆒ঞৃਃࡼ䆒ˈ䕧ܹ䆒ϔ㠀
ᣛ䬂Ⲭˈ䕧ߎ䆒ϔ㠀ᣛᔶᰒ⼎఼ˈ㗠ৃਃࡼ䆒ϔ㠀ᣛⱘᰃ⺕ⲬDŽϟᴹ BIOS ӮҢ⺕Ⲭ䇏
প᪡㋏㒳᳔ᓔྟⱘ 512 ᄫ㡖ⱘਃࡼᑣᴹਃࡼ᪡㋏㒳ᑊᇚࠊᴗӴ䗦㒭ᅗDŽПৢ BIOS ᇚ
ᇍ݊᠔㛑䆚߿ⱘ䆒㒻㓁থ݊⹀ӊᢑ䈵ⱘ⫼DŽ
䱣ⴔᯊ䯈ⱘ⿏ˈ䖭ϔᛇ⊩Ёⱘ㔎䱋᮹ⲞᕄᰒDŽBIOS ᦤկⱘᢑ䈵ሖᰃᵕ݊ॳྟϨϡৠℹⱘDŽ
⬅Ѣ㔎УৠℹᗻˈBIOS ᢑ䈵ሖϡᕫϡ䞛⫼䕂䆶˄polled˅㗠ϡᰃЁᮁⱘㄪ⬹DŽ䖯ϔℹ䇈ˈ⬅ᢑ
䈵ሖ᠔؛ᅮⱘ໘⧚఼ᓣ؛䆒໘⧚఼ᎹѢᅲᓣˈ䖭ᑊϡᰃ᪡㋏㒳䖤㸠ᯊ᠔Փ⫼ⱘᓣDŽ
Ϟ䗄㉏Ԑⱘᢑ䈵ˈџᅲϞϔⳈՓ⫼ˈԚҙҙ᪡㋏㒳㞾ВⱘᯊՓ⫼DŽ
䖭ϔൟ䖬ᄬ݊Ҫᠽሩᗻ䯂乬˖ᔧ᳝ᮄⱘᡔᴃߎ⦄ⱘᯊ݊ˈछ㑻ᠽሩ㛑᳝䰤DŽ↨
བˈ㾚乥ᢑ䈵˄INT 10H˅ձ䴴ᵮВⱘᓣᴹ䗝ᢽᔶߚ䕼⥛DŽ㗠᭄ᮽᳳⱘߚ䕼⥛ˈ↨བ
320X200ˈᕜᖿህ䖛ᯊњDŽIBM থᯢ䖭ϔষᯊˈϔᓔྟህ㗗㰥ࠄ䆹ᔶᓣⱘᠽሩᗻDŽԚ⬅
ѢՓ⫼㗙ⱘߚᬷᗻˈᔶᓣⱘᠽሩ⬅ᷛࠊޚᅮ㒘㒛㗙݀ৌ㕸ԧᴹㅵ⧚ˈ䖭ѯ㒘㒛াᰃㅔऩ
ⱘᠽሩॳ᳝ᓣ㗠≵᳝㗗㰥ࠄᅗӀⱘᅲ䰙ᛣНˈ↨བˈᇍ݊Ҫⱘѻકⱘ䞡㽕ᗻDŽ
䖭ϔ䕃ӊൟܕ䆌ᅲ⦄䆌ᑩሖᶊᵘϨᕐℸⳌѦݐᆍDŽᶊᵘⱘᅲ⦄ϞҢऩϔࠄⱘܗ䕃ӊ
㒘ӊഛ᳝DŽᴀᗱ䏃ᰃ˖Т᠔᳝ⱘᑩሖᶊᵘ䛑ᰃ∛㓪䇁㿔ᅲ⦄ˈॳབϟ˖
ʄ Ӵ㒳
ʄ ぎ䯈䰤ࠊ
ʄ ᑊ䴲᠔᳝ⱘ㓪䆥఼䛑ᬃᣕ᭄໘⧚఼ⱘᄬټᓣˈгህᰃ big real mode
ʄ 䴲催㑻䇁㿔ᦣ䗄ⱘ䕃ӊষᖙ乏ᎹѢ᳝䰤ⱘේᷜぎ䯈
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Option ROMs
Џᵓ⹀ӊ߱ྟ࣪
POST ⱘߎ⦄ˈ䈵ᕕⴔ⹀ӊԡᯊা䳔ᇥⱘ߱ྟ࣪ℹ偸ⱘ䍟DŽ䕃ӊᓔྟ߱ྟ࣪㋏㒳⹀ӊˈ
䖭⾡ࡲ⊩ⱘ⚍Ӭ䱣ⴔᯊ䯈ⱘ⿏বᕫࡴさߎ˖
ʄ ⹀ӊˈᇸ݊ᰃ䲚៤⬉䏃ˈৃҹ䗮䖛ܕ䆌ᑇৄӊᣝ䳔∖߱ྟ࣪݊䜡㕂ᴹՓП䗮⫼DŽʄ Ⳍ
ᔧϔ䚼ߚ⹀ӊⱘ咬䅸ؐ䛑䴲ᐌᴖˈ݊߱ྟ࣪ᯧѢߎ䫭ǃ䌍ᯊˈϨ߱ྟ࣪ᯊऴ⫼䞣ⱘ
ぎ䯈DŽ
ʄ Ꮖ߱ྟ࣪ⱘ⹀ӊ䜡㕂䳔㽕कߚᯖ䌉ⱘ⹀ӊবᴹׂ䯂乬DŽ㗠ӊ᳔া䳔㽕ᮄϔϾ
ROMˈ䖭ϔᮍ⊩Ў㒣⌢DŽ䖭⾡ᚙމϟӊᏆ㒣៤Ўњׂ㢃⠛㒘⹀ӊ㔎䱋ⱘϔϾЏ㽕
↉DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
䱣ⴔᵓ䕑ⱘѠᵕㅵ៤ᴀⱘᰒ㨫䰡Ԣˈᇍᵓवҹঞᵓ䕑䆒ⱘ䕃ӊ䜡㕂ህবᕫৃ㛑њDŽᘏ㒓
⦄Ꮖ㒣ৃҹᵮВњ˗䕃ӊ㋏㒳ˈࣙᣀ %,26 ˈݙ䛑ৃҹ㕂Ѣጠܹᓣ䆒Ёˈ᭄ᚙމϟ䛑
ৃҹᬃ䜡ᑊ⒵䎇ҪӀⱘ䌘⑤䳔∖DŽ
Ң䭓䖰ⱘ㾦ᑺⳟ݊䍟ᰃϡᣖ䕑ѢІ㸠ᘏ㒓ⱘೈ䆒ᑊ≵᳝Փ⫼ᑊ㸠䆒᠔Փ⫼ⱘ䙷ѯ
Ӵ㒳䌘⑤DŽ 86% ᰃϔѯ䖭ḋⱘ՟ᄤˈϔϾІ㸠ᘏ㒓ৃҹՓ⫼Ⳍᔧᇥⱘৠϔ⹀ӊ䌘⑤ᴹᬃ
ᣕᕜ 86% 䆒DŽ
ϔѯ催ッ᳡ࡵ఼Ϟˈᘏ㒓ⱘ߱ྟ࣪䖛বᕫᵕ݊ᴖˈ䖭ϔᴖᗻᰃ⬅䳔㽕ᅮԡ᠔᳝ৃ
㛑䕧ܹˈ䕧ߎҹঞਃࡼ䆒㗠ᏺᴹⱘDŽ
(ᅠˈ࠽ԭ 11 义)
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Ѡゴ
ᴀⱘ (), ᶊᵘ
៥Ⳍֵᷛ↣ˈޚϾҎ䛑ᑨ䆹᳝
---Ш⊏ 㥿㔫
EFI ᦣ䗄њᇍᑇৄⱘϔϾৃ㓪ⱘষˈ䖭ϾᑇৄࣙᣀЏᵓˈ㢃⠛㒘ˈЁ༂໘⧚ऩ˄ܗCPU˅
݊Ҫ㒘៤䚼ߚDŽEFI ܕ䆌᪡㋏㒳乘໘⧚ˈ䖭䞠乘໘⧚ agents ৃҹᰃ OS loaders, 䆞ᮁᑣˈ
ϔѯ㋏㒳ⱘᑨ⫼䕃ӊᠻ㸠ঞⳌ䗮᠔䳔㽕ⱘ݊ᅗᑨ⫼ᑣˈࣙᣀ EFI 偅ࡼ EFI ᑨ⫼ᑣDŽEFI
Ў偅ࡼᑨ⫼ᑣᦤկњϔϾ䴲ᐌ⏙᱄ⱘষ㾘㣗ˈ䖭ϔゴЁ៥Ӏ䞡⚍ᣛߎ䖭Ͼষⱘϔѯ
ᶊᵘ䕂ᒧDŽ䖭Ͼᶊᵘ䕂ᒧࣙᣀњ EFI 㾘㣗Ёᦣ䗄ⱘϔ㒘ᇍ䈵ষDŽ
Ѣ EFI ӊ᠔ㅵ⧚ⱘᇍ䈵
Handle ᭄ᑧ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Protocols
Sample GUID
#define EFI_COMPONENT_NAME_PROTOCOL_GUID \
{0x107a772c,0xd5e1,0x11d4,0x9a,0x46,0x0,0x90,
0x27,0x3f,0xc1,0x4d}
Protocol Interface Structure
typedef struct _EFI_COMPONENT_NAME_PROTOCOL {
EFI_COMPONENT_NAME_GET_DRIVER_NAME
GetDriverName;
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
EFI_COMPONENT_NAME_GET_CONTROLLER_NAME
GetControllerName;
CHAR8
*SupportedLanguages;
} EFI_COMPONENT_NAME_PROTOCOL;
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Ƶ&RQ,Qᦤկᄫヺ䕧ܹⱘ᳡ࡵᑣ
Ƶ&RQ2XWᦤկᄫヺ䕧ߎⱘ᳡ࡵᑣ
Ƶ6WG(UUᦤկ䫭䇃ֵᙃ䕧ߎⱘ᳡ࡵᑣ
ƵPULPDU\&RQ,Qϔ㑻㾚䕧ܹࠊৄ
Ƶ9JD0LQL3RUWᦤկ㾚乥ᔶⶽ䰉䕧ߎⱘ᳡ࡵᑣDŽ
Ƶ8VE$WDSL 86% ᘏ㒓Ϟᢑ䈵ऎഫ䆓䯂ⱘ᳡ࡵᑣ
(), ᑨ⫼ᑣᎹࣙгࣙњ㛑ϔѯᑇৄᡒࠄⱘ (),3URWRFROV
Ƶ333'HDPRQ⚍ᇍ⚍ण䆂偅ࡼ
Ƶ5DPGLVN䱣ᴎᄬপᄬ˄఼ټ5$0˅㓧ކ䞠䴶ⱘ᭛ӊ㋏㒳
Ƶ7&3,3Ӵ䕧ࠊ㔥㒰䗮䆃णᅮ
Protocols ⱘՓ⫼
Ͼ Protocols ⱘᅲ՟
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Tag GUID
EFI Images
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
㸼,PDJH㉏ൟⱘᦣ䗄
Image ⱘ㉏ൟ ᦣ䗄
EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION.ᠻ㸠ᯊˈᔧ image 䗔
ߎҢܹষ⚍䖨ಲᯊ䖭⾡ image Ӯ㹿㞾ࡼौ䕑.
OS loader ϔ⾡⡍⅞㉏ൟⱘⱘᑨ⫼ᑣˈ䗮ᐌϡӮ䖨ಲ䗔ߎˈⳌডⱘˈᅗӮ䇗
⫼ EFI Boot Service gBS->ExitBootServices()ᴹᡞᑇৄⱘࠊᴗҢӊ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Ѹ㒭᪡㋏㒳DŽ
EFI_IMAGE_SUBSYSTEM_BOOT_SERVICE_DRIVER 㗙
EFI_IMAGE_SUBSYSTEM_RUNTIME_DRIVERDŽབᵰ䖭⾡ iamge 䖨
ಲ EFI_SUCCESSˈ䙷МᅗϡӮ㹿ौ䕑DŽབᵰҪ䖨ಲ䫭䇃ҷⷕˈ䙷Мᅗ
Ӯ㹿㞾ࡼҢ㋏㒳ݙᄬЁौ䕑DŽ㋏㒳ݙᄬЁ偏⬭ⱘ㛑ᰃ偅ࡼᑨ⫼
ᑣϡৠⱘഄᮍDŽЎ偅ࡼ㛑ݙᄬЁ偏⬭ˈ᠔ҹҪӀ㛑ᦤկ᳡ࡵ
ᑣ㒭݊Ҫ偅ࡼᑨ⫼ᑣˈ㗙᪡㋏㒳DŽা᳝䖤㸠ᯊ偅ࡼ(runtime
drivers)䇗⫼ gBS->ExitBootServices()ҹৢ䖬㛑偏⬭ݙᄬDŽ
Hybrid driver ϔ⾡䙉ᕾ EFI Driver Model ⱘ偅ࡼᑊϨݐᆍњ device drivers bus
drivers ⱘ⡍⚍ˈ䖭Ͼ⡍ᗻᣛˈ Driver Binding Protocol ⱘ start()ߑ᭄
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᑨ⫼ᑣ
ϔϾ EFI ⱘᑨ⫼ᑣҢᅗⱘܹষ⚍ᓔྟᠻ㸠ˈᑊϨϔⳈᠻ㸠Ⳉࠄܹষ⚍Ё⺄ࠄ䖨ಲ㗙
boot service ⱘ EXIT()ߑ᭄㹿䇗⫼DŽᔧ㒧ᴳᯊˈᅗⱘ Image Ӯ㹿ҢݙᄬЁौ䕑DŽϔ㠀ⱘ EFI ᑨ
⫼ᑣⱘ՟ᄤ᳝ EFI shellˈEFI shell ⱘᣛҸˈࠋ flash 㢃⠛ⱘᎹˈ䆞ᮁᎹDŽҢᑨ⫼ᑣЁ䇗
⫼݊Ҫᑨ⫼ᑣᰃᅠܼৃҹⱘDŽ
OS loader
偅ࡼ
EFI1.02 偅ࡼ
џӊӏࡵⱘӬܜ㑻
Ў EFI ϡᬃᣕЁᮁˈ᠔ҹᅗ㒭њдᛃѢЁᮁ偅ࡼൟⱘ偅ࡼᓔথ㗙ϔϾᣥDŽপ㗠ҷПⱘˈ
EFI ᦤկ䕂䆶ⱘ偅ࡼDŽEFI 偅ࡼᇍѢџӊ᳔ᐌ⫼ⱘ⫼⊩ˈᰃ⫼ timer џӊᴹܕ䆌偅ࡼᴹ਼ᳳᗻⱘ
䕂䆶䆒DŽ 2.5 ሩ⼎њ EFI ᠔ᬃᣕⱘϡৠ㉏ൟⱘџӊঞ䖭ѯџӊП䯈ⱘ݇㋏DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
㸼 2.2 џӊ㉏ൟⱘᦣ䗄
џӊ㉏ൟ ᦣ䗄
ㄝᕙџӊ 䖭⾡џӊⱘ䗮ⶹߑ᭄↣ᔧ㹿⹂䅸Փ໘Ѣㄝᕙⱘᯊ㹿ᠻ㸠DŽ
㾺থџӊ 䖭⾡џӊⱘ䗮ⶹߑ᭄↣ᔧџӊҢㄝᕙ⢊ᗕ䖛⏵ࠄ㾺থ⢊ᗕⱘᯊ㹿䅵ߦᠻ
㸠DŽ
Timer ϔϾ㉏ൟ㾺থџӊˈ䖭ϾџӊӮϔϾᣛᅮᯊ䯈䖛ৢҢㄝᕙ⢊ᗕ䖛⏵ࠄ㾺
џӊ থ⢊ᗕDŽᬃᣕ਼ᳳ timer џӊऩᠻ㸠 Timer џӊˈᔧϔϾ⡍ᅮᯊ䯈䖛ৢˈ
䖭Ͼџӊⱘ䗮ⶹߑ᭄㹿䅵ߦᠻ㸠DŽ
਼ᳳ timer ϔϾ㉏ൟ㾺থџӊˈ䖭ϾџӊӮҹϔᅮⱘ乥⥛Ңㄝᕙ⢊ᗕ䖛⏵ࠄ㾺থ⢊ᗕDŽ
џӊ ᔧϔϾ⡍ᅮᯊ䯈䖛ৢˈ䖭Ͼџӊⱘ䗮ⶹߑ᭄㹿䅵ߦᠻ㸠DŽ
ऩ ᠻ 㸠 ϔϾ㉏ൟ㾺থџӊˈ䖭ϾџӊӮϔᅮᯊ䯈਼ᳳ䖛ৢҢㄝᕙ⢊ᗕ䖛⏵ࠄ㾺
Timer џӊ থ⢊ᗕDŽᔧϔϾ⡍ᅮᯊ䯈䖛ৢˈ䖭Ͼџӊⱘ䗮ⶹߑ᭄㹿䅵ߦᠻ㸠DŽ
↣Ͼџӊ᳝ҹϟⱘ 3 Ͼܗ㋴˖
ƵџӊⱘӏࡵӬܜ㑻˄73/˅
Ƶ䗮ⶹߑ᭄
Ƶ䗮ⶹ⦃๗
ㄝᕙџӊⱘ䗮ⶹߑ᭄џӊ㹿⹂䅸㹿㕂Ѣㄝᕙ⢊ᗕᯊ㹿ᠻ㸠ˈ㾺থџӊⱘ䗮ⶹߑ᭄↣ᔧ
џӊҢㄝᕙ⢊ᗕ䕀ᤶࠄ㾺থ⢊ᗕᯊ㹿ᠻ㸠ˈ䗮ⶹ⦃๗↣䗮ⶹߑ᭄㹿ᠻ㸠ⱘᯊ㹿Ӵ䗦㒭
䗮ⶹߑ᭄DŽTPL ᰃ䗮ⶹߑ᭄㹿ᠻ㸠ⱘӬܜ㑻ᅮНDŽ㸼 2.3 ՟ߎњᔧࠡᅮНⱘ 4 Ͼ TPL Ӭܜ㑻DŽ
ⱘ TPL ৃ ҹ ҹ ৢ 㹿 ᅮ Н ߎ ᴹ DŽ ↨ བ ϔ Ͼ ݐᆍ ⱘ TPL list ৃ ҹ TPL_NOTIFY
TPL_HIGH_LEVEL П䯈ࡴϔ㋏߫ⱘЁᮁ TPLˈᴹЎ EFI ᦤկЁᮁᮍᓣⱘ I/O ᬃᣕDŽ
ӏࡵӬܜ㑻 ᦣ䗄
73/B$33/,&$7,21 (),,PDJHᠻ㸠ⱘӬܜ㑻
73/B&$//%$&. ᭄䗮ⶹߑ᭄ⱘӬܜ㑻
73/B127,)< ᭄,2᪡ᠻ㸠ⱘӬܜ㑻
73/B+,*+B/(9(/ 7LPHUЁᮁⱘӬܜ㑻
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᇍѢӬܜ㑻ᅮНˈা᳝ৠᯊџӊ᳝Ͼџӊ໘Ѣ㾺থ⢊ᗕⱘᯊˈԴᠡӮ⫼ࠄ䖭ϾᴎࠊDŽ
䖭ѯᚙމϟˈᑨ⫼ᑣܜᠻ㸠㹿⊼ݠ៤催Ӭܜ㑻ⱘ䗮ⶹߑ᭄DŽৠᯊˈ催Ӭܜ㑻ⱘ䗮ⶹߑ᭄㛑
ЁᮁԢӬܜ㑻䗮ⶹߑ᭄ⱘᠻ㸠DŽ
ϝゴ
(), 偅ࡼൟ
ϛџϛ⠽ᑨ䆹ሑ䞣ㅔऩˈ㗠ϡᰃㅔऩDŽ
—Albert Einstein
ᇍѢϔϾ⡍ᅮⱘᑇৄˈ⬅ӊ᳡ࡵᑣˈᘏ㒓偅ࡼᑣ䆒偅ࡼᑣᵘ៤ⱘ㒘ড়ᕜৃ㛑
Ӯ⬅ϡৠⱘॖଚᴹ⫳ѻˈ䖭ѯॖଚࣙᣀ 2(0ǃ,%9 ,+9DŽ㗠ᴹ㞾ϡৠॖଚⱘ䖭ѯ㒘ӊᖙ乏ⳌѦ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Ўԩ㽕 26 ਃࡼПࠡᓎゟ偅ࡼൟਸ਼˛
偅ࡼ߱ྟ࣪
GULYHULPDJH ᭛ӊᖙ乏Ңᶤ⾡㉏ൟⱘၦҟЁࡴ䕑ˈ䖭ѯၦҟࣙᣀ 520ˈ䮾ᄬˈ⹀Ⲭˈ䕃Ⲭˈ
ˈⲬܝ㗙⫮㟇Ѣ㔥㒰㒓䏃DŽϔᮺϔϾ GULYHULPDJH 㹿㋏㒳Ẕ⌟ࠄПৢˈ䆹 LPDJH ህӮ㹿ਃࡼ
᳡ࡵⱘ /RDG,PDJH ࡴ䕑ࠄ㋏㒳ⱘݙᄬ˄/RDG,PDJH ⫼Ѣࡴ䕑 3(&2)) Ḑᓣⱘ LPDJH 䖯ܹࠄ
㋏㒳ݙᄬ˅DŽৠᯊ䆹偅ࡼⱘ KDQGOH 㹿⫳៤ˈᑊϨϔϾ /RDGHG,PDJH3URWRFRO ՟㹿ᣖ䕑ࠄ䆹
KDQGOH Ϟˈ㗠᳝ࣙ /RDGHG,PDJH3URWRFRO ՟ⱘ KDQGOH ি خLPDJHKDQGOHDŽℸࠏ䆹偅ࡼ
ᑊ≵᳝ᓔྟˈ ݊াᰃ偏⬭ݙᄬПЁㄝᕙᓔྟDŽ ሩ⼎њ偅ࡼⱘ LPDJHKDQGOH 㹿 /RDG,PDJH
䇗⫼Пৢⱘ⢊ᗕDŽ
偅ࡼ㹿ਃࡼ᳡ࡵⱘ /RDG,PDJH ࡴ䕑Пৢˈᅗ䳔㽕䗮䖛ਃࡼ᳡ࡵⱘ 6WDUW,PDJH 䖯㸠ਃࡼˈ
䖭䗖⫼Ѣ (), ㋏㒳Ё㛑㹿ࡴ䕑ਃࡼⱘ⾡㉏ൟⱘ (), ᑨ⫼ᑣ偅ࡼDŽ䙉ᕾ (), 偅ࡼൟ
ⱘ偅ࡼⱘܹষᑣᖙ乏䙉ᕾϔѯϹḐⱘ㾘߭˖佪ˈܜϡܕ䆌⍝ঞ ӏԩ⹀ӊⱘ᪡ˈҙҙܕ䆌䗝
ᢽᗻⱘᅝ㺙ϔѯण䆂՟ࠄ㞾Ꮕⱘ LPDJHKDQGOH Ϟˈ 䙉ᕾ (), 偅ࡼൟⱘ偅ࡼᖙ乏ᅝ㺙ϔϾ
'ULYHU%LQGLQJ3URWRFRO ࠄ㞾Ꮕⱘ LPDJHKDQGOH Ϟˈˈᅗ䖬ৃҹ䗝ᢽᗻഄᅝ㺙ϔѯण䆂ˈ
՟བ 'ULYHU&RQILJXUDWLRQ3URWRFROˈ'ULYHU'LDJQRVWLFV3URWRFROˈ㗙 &RPSRQHQW1DPH
3URWRFRODŽ䰸ℸПৢˈབᵰ偅ࡼᏠᳯৃҹ㹿ौ䕑ˈᅗৃҹ䗝ᢽᗻⱘᮄ /RDGHG,PDJH3URWRFRO
ҹℸᴹᦤկ㞾Ꮕⱘ 8QORDG ষDŽ᳔ৢˈབᵰ偅ࡼ䳔㽕ਃࡼ᳡ࡵⱘ ([LW%RRW6HUYLFHV ࡳ㛑
㹿䇗⫼ⱘᯊᠻ㸠ϔѯ⡍⅞ⱘ᪡ˈᅗৃҹ䗝ᢽᗻⱘ߯ᓎϔϾᏺ᳝䗮ⶹࡳ㛑ⱘџӊˈᔧਃࡼ᳡
ࡵⱘ ([LW%RRW6HUYLFHV ࡳ㛑㹿䇗⫼ⱘᯊˈ䆹䗮ⶹࡳ㛑ህӮ㹿㾺থDŽ᳝ࣙ 'ULYHU%LQGLQJ
3URWRFRO ՟ⱘ LPDJHKDQGOH 㹿䅸Ўᰃ GULYHULPDJHKDQGOHDŽ ডњ Ё᠔⼎ⱘ
LPDJHKDQGOH ਃࡼ᳡ࡵ 6WDUW,PDJH 㹿䇗⫼ৢⱘৃ㛑䜡㕂DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Џᴎᘏ㒓ࠊ఼
偅ࡼⱘܹষᑣЁ偅ࡼϡܕ䆌᪡ӏԩⱘ⹀ӊDŽℸˈ㱑✊偅ࡼ㹿ࡴ䕑ਃࡼˈԚᰃҪ
Ӏ䛑ㄝᕙ㹿ਞⶹএㅵ⧚䆹㋏㒳ЁⱘϔϾ㗙Ͼࠊ఼DŽ)( ڣ, ਃࡼㅵ⧚఼䖭ḋⱘϔϾᑇৄ
㒘ӊˈӮ䋳䋷ㅵ⧚偅ࡼࠊ఼П䯈ⱘ䖲DŽৃᰃˈेՓϔϾ偅ࡼࠊ఼㹿䖲Пࠡˈ
ᶤѯ᳔߱ⱘ ᳝ⱘ ࠊ఼䳔㽕ᄬᴹ㹿偅ࡼㅵ⧚ˈ䖭ѯ᳔߱ⱘ ᳝ⱘ ࠊ఼ህᰃᆊⶹ䘧
ⱘЏᴎᘏ㒓ࠊ఼DŽЏᴎᘏ㒓ࠊ఼᠔ᦤկⱘ ,2 ᢑ䈵ᰃ⬅ (),偅ࡼൟ㣗ೈПⱘӊ㒘ӊ
᠔ѻ⫳ⱘˈЏᴎᘏ㒓ࠊ఼ⱘ GHYLFHKDQGOH ,2 ᢑ䈵ᖙ乏⬅ᑇৄϞⱘӊݙḌ㗙ৃ㛑ϡ
䙉ᕾ (), 偅ࡼൟⱘ (), 偅ࡼѻ⫳DŽԧ䇋খ✻ 3&,+RVW%ULGJH,23URWRFRO 㾘㣗Ϟ䴶ᇍ 3&,
ᘏ㒓 ,2 ᢑ䈵ⱘ՟ᄤDŽ
ϔϾᑇৄৃҹⳟᰃϔ㒘 &38 ϔ㒘ৃ㛑ࣙϔϾ㗙ϾЏᴎᘏ㒓ⱘ㢃⠛㒘ӊⱘ㒘ড়DŽ
ሩ⼎њϔϾᢹ᳝ Q Ͼ &38 ࣙ P ϾЏḹⱘ㢃⠛㒘ⱘᑇৄDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
(), Ёˈ↣ϾЏḹ㹿㸼⦄ЎϔϾࣙњ 'HYLFH3DWK3URWRFRO ՟ⱘ GHYLFHKDQGOHˈ
ϔϾᢑ䈵ߎЏᴎᘏ㒓ৃҹᠻ㸠ⱘ ,2 ᪡ⱘण䆂՟DŽ՟བˈ3&, Џᴎᘏ㒓ࠊ఼ᬃᣕ 3&,+RVW
%ULGJH,23URWRFRODŽ ሩ⼎њϔϾ 3&,Џḹⱘ GHYLFHKDQGOH ⱘ՟ᄤDŽ
3&, ᘏ㒓偅ࡼ㛑䖲ࠄ䆹 3&, ЏḹˈᑊϨЎ㋏㒳Ёⱘ↣Ͼ 3&, 䆒߯䗴 FKLOGKDQGOHVˈ
✊ৢ 3&, 䆒偅ࡼ䳔㽕 㹿 䖲ࠄ䖭ѯ FKLOGKDQGOH ϞˈᑊϨѻ⫳ৃ⫼Ѣਃࡼ (), ݐᆍⱘ 26
ⱘ ,2 ᢑ䈵DŽϟᴹⱘゴ㡖ᇚӮᦣ䗄Ѣ (), 偅ࡼൟᅲ⦄ⱘϡৠ㉏ൟⱘ偅ࡼDŽ(), 偅ࡼൟᰃ
䴲ᐌ♉⌏ⱘˈ᠔ҹ䖭䞠ϡӮ䅼䆎᠔᳝ৃ㛑ⱘ偅ࡼ㉏ൟDŽ៥Ӏ䖭䞠া䆆䗄Џ㽕ⱘ⾡偅ࡼ㉏ൟˈ
䖭ѯ偅ࡼ㉏ൟৃҹЎ䆒䅵ᅲ⦄݊Ҫ㉏ൟ偅ࡼⱘ⸔DŽ
䆒偅ࡼ
䆒偅ࡼϡܕ䆌߯䗴ӏԩⱘᮄⱘ GHYLFHKDQGOHˈⳌডᅗাᰃ⦄ᄬⱘ䆒 KDQGOH Ϟᅝ㺙
݊ᅗⱘण䆂ষDŽ᭄ᐌ㾕㉏ൟⱘ䆒偅ࡼ䋳䋷ᡞ ,2 ᢑ䈵ᣖࠄ⬅ᘏ㒓偅ࡼ᠔߯䗴ⱘ䆒
KDQGOH Ϟˈ䆹 ,2 ᢑ䈵ৃҹ㹿⫼Ѣਃࡼ (), ݐᆍⱘ᪡㋏㒳ˈ䖭ѯ ,2 ᢑ䈵ህࣙᣀ՟བ 6LPSOH
7H[W2XWSXW6LPSOH,QSXW%ORFN,2 6LPSOH1HWZRUN3URWRFRODŽ ሩ⼎њϔϾ䆒
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
⫼ᶤϾ⡍ᅮण䆂ষⱘ㒘ӊ߫㸼DŽ
ᘏ㒓偅ࡼ
Ң (), 偅ࡼൟⱘ㾖⚍ᴹⳟˈᘏ㒓偅ࡼ䆒偅ࡼᅲ䋼ϞᰃϔḋˈଃϔⱘᏂ߿Ѣᘏ㒓偅
ࡼӮЎ䆹ᘏ㒓Ϟথ⦄ⱘᄤࠊ఼߯䗴ᮄⱘ GHYLFHKDQGOHDŽℸˈᘏ㒓偅ࡼ↨䍋䆒偅ࡼᴹӮ
ᖂ᳝⚍ᴖˈԚᰃড䖛ᴹ䖭гㅔ࣪њ䆒偅ࡼⱘ䆒䅵ᅲ⦄DŽᘏ㒓偅ࡼЏ㽕᳝ϸ⾡㉏ൟˈ
ϔ⾡ᰃϔ䇗⫼ 6WDUW ᯊᘏ㒓偅ࡼӮЎ᠔᳝ⱘᄤࠊ఼߯䗴 KDQGOHˈѠ⾡ᰃܕ䆌䗮䖛
ᇍ 6WDUW ࡳ㛑ⱘ䇗⫼ᴹЎ᠔᳝ᄤࠊ఼߯䗴 KDQGOHDŽѠ⾡㉏ൟⱘᘏ㒓偅ࡼᬃᣕᖿ䗳
ਃࡼⱘ㛑Ϟᰃ䴲ᐌ᳝⫼ⱘˈᅗܕ䆌↣߯䗴Ͼ⫮㟇ᰃϔϾᄤ KDQGOHˈ䳔㽕㢅䌍ᕜ䭓ᯊ䯈
এᵮВ᠔᳝ⱘᄤࠊ఼ⱘᘏ㒓Ϟ˄䅀བ 6&6, ᘏ㒓˅ˈ䖭ৃҹᑇৄਃࡼ䖛Ё㡖ⳕᕜⱘᯊ䯈DŽ
ሩ⼎њ 6WDUW 㹿䇗⫼ࠡৢⱘᘏ㒓ࠊ఼ⱘᷥ㒧ᵘDŽ䖯ܹᘏ㒓ࠊ఼㒧⚍ⱘ㰮㒓ҷ㸼њࠄ
ᘏ㒓ࠊ఼ⱘ⠊䕜ࠊ఼ⱘ䫒ˈབᵰᘏ㒓ࠊ఼ᴀⳕህᰃϔϾЏᴎᘏ㒓ࠊ఼ˈ䙷Мᅗ≵᳝
⠊䕜ࠊ఼DŽ㒧⚍ $ǃ%ǃ&ǃ' ( ҷ㸼ᘏ㒓ࠊ఼ⱘ Ͼᄤࠊ఼DŽ
ϔϾᬃᣕ䇗⫼ϔ 6WDUW ✊ৢ߯䗴ϔϾᄤ KDQGOH ⱘᘏ㒓偅ࡼৃ㛑Ӯ䗝ᢽ佪ܜЎ & ᄤࠊ
఼߯䗴 KDQGOHˈ✊ৢᰃЎ (ˈϟᴹᰃЎ $% 'ˈᇍѢ䖭⾡㉏ൟⱘ㸠Ўˈ'ULYHU%LQGLQJ3URWRFRO
ⱘ 6XSSRUWHG ǃ6WDUW 6WRS ϝϾࡳ㛑ᰃ䎇♉⌏ⱘDŽ
ᘏ㒓偅ࡼ䳔㽕Ўᅗ߯䗴ⱘ↣Ͼᄤ䆒 KDQGOH ᅝ㺙ण䆂ষˈ㟇ᇥˈᅗ䳔㽕Ўᄤࠊ఼ᅝ㺙
ϔϾण䆂ষˈ䆹ষᦤկњᘏ㒓᳡ࡵⱘ ,2 ᢑ䈵DŽབᵰᘏ㒓偅ࡼ߯䗴њϔϾҷ㸼⠽⧚䆒ⱘ
ᄤ KDQGOHˈ䙷Мᘏ㒓偅ࡼᖙ乏䆹ᄤ KDQGOH Ϟᅝ㺙ϔϾ 'HYLFH3DWK3URWRFRO ՟DŽᘏ㒓偅
ࡼৃҹЎ↣Ͼᄤ KDQGOH 䗝ᢽᗻⱘᅝ㺙ϔϾ %XV6SHFLILF'ULYHU2YHUULGH3URWRFROˈ䆹ण䆂
᳝Ͼ偅ࡼ㹿䖲ࠄᄤࠊ఼ᯊ㹿Փ⫼DŽᮄⱘਃࡼ᳡ࡵ &RQQHFW&RQWUROOHU ӮՓ⫼ᶊᵘϞᅮ
НⱘӬܜ㾘߭Ў㒭ᅮⱘࠊ఼䗝ᢽ᳔ড়䗖ⱘ偅ࡼDŽ᧰㋶偅ࡼᯊˈ%XV6SHFLILF'ULYHU2YHUULGH
3URWRFRO ⱘӬܜ㑻催Ѣϔ㠀ⱘ偅ࡼˈԢѢ 3ODWIRUP'ULYHU2YHUULGH3URWRFRODŽ3&, ᘏ㒓Ϟህ
᳝ᘏ㒓⡍ᅮ偅ࡼ䗝ᢽⱘ՟ᄤˈ3&, ࠊ఼ RSWLRQ520 Ёⱘ 3&, ᘏ㒓偅ࡼ↨ᑇৄ݊Ҫഄᮍⱘ 3&,
ᘏ㒓偅ࡼ᳝催ⱘӬܜ㑻DŽሩ⼎њϔϾ՟ᄤˈ⬅ ;<= ᘏ㒓偅ࡼ߯ᓎⱘᄤ䆒 KDQGOH ᬃ
ᣕϔϾ EXVVSHFLILFGULYHURYHUULGH ⱘᴎࠊDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᑇৄ㒘ӊ
(), 偅ࡼൟЁˈᶤϾᑇৄϞ偅ࡼࠊ఼П䯈ⱘ䖲ᮁᓔⱘࡼᰃ໘Ѣᑇৄӊ
ⱘࠊПϟⱘˈ䖭䗮ᐌᰃ⬅ (),%RRW0DQDJHU ᴹᅠ៤ˈгৃ㛑᳝݊ҪⱘᮍᓣDŽᑇৄӊৃҹՓ
⫼ਃࡼ᳡ࡵᮄⱘ &RQQHFW&RQWUROOHU 'LVFRQQHFW&RQWUROOHU ᴹ߸ᮁાѯࠊ఼Ꮖ㒣㹿偅
ࡼˈાѯ䖬≵᳝DŽབᵰᑇৄᏠᳯᠻ㸠㋏㒳ⱘ䆞ᮁ㗙ᰃᅝ㺙ϔϾ᪡㋏㒳ˈ䙷Мᅗৃҹ䗝ᢽЎ
᠔᳝ৃ㛑ⱘਃࡼ䆒䖲偅ࡼDŽབᵰᶤϾᑇৄᏠᳯਃࡼϔϾ乘ᅝ㺙ⱘ᪡㋏㒳ˈᅗৃҹ䗝ᢽা
Ў ਃ ࡼ 䆹 ᪡ ㋏ 㒳 ᠔ ᖙ 䳔 ⱘ 䆒 䖲 偅 ࡼ DŽ (), 偅 ࡼ ൟ 䗮 䖛 ᮄ ⱘ ਃ ࡼ ᳡ ࡵ
&RQQHFW&RQWUROOHU 'LVFRQQHFW&RQWUROOHU ᬃᣕϞ䗄ϸ⾡ᓣⱘ᪡DŽ䰸ℸПˈ⬅Ѣ䋳
䋷ਃࡼᑇৄⱘᑇৄ㒘ӊᖙ乏ձ䴴䆒䏃ᕘᴹᅲ⦄ࠊৄ䆒ਃࡼ䗝乍ࡳ㛑ˈ᠔ҹ (), 偅ࡼ
ൟЁ᠔᳝ⱘ᳡ࡵण䆂݊ᅲᏆ㒣䗮䖛䆒䏃ᕘӬ࣪䖛њDŽ
⛁ᦦᢨџӊ
䖛এˈ乘ਃࡼ⦃๗Ё㋏㒳ӊϡᖙএ໘⧚⛁ᦦџӊDŽ✊㗠䱣ⴔ ڣ86% 䖭ḋⱘᘏ㒓ⱘߎ
⦄ˈ᳔㒜⫼᠋ৃҹӏԩᯊ䯈⏏ࡴ⿏䰸䆒ˈᇍѢ (), 偅ࡼ㉏ൟᴹ䇈ˈ⹂ֱ㛑ᦣ䗄䖭ѯ㉏ൟ
ⱘᘏ㒓ᰃ䴲ᐌ䞡㽕ⱘDŽᇍѢϔϾᬃᣕ⛁⏏ࡴ㗙⛁⿏䰸䆒ⱘᘏ㒓ᴹ䇈ˈ݊ᘏ㒓偅ࡼ㽕ᦤկᇍ
䖭ѯџӊⱘᬃᣕDŽᇍѢ䖭ѯ㉏ൟⱘᘏ㒓ˈϔѯᑇৄⱘㅵ⧚ᇚϡᕫϡ⿏ܹࠄᘏ㒓偅ࡼЁDŽ՟བˈ
ϔϾᑇৄϞᔧϔϾ䬂Ⲭ㹿⛁⏏ࡴࠄ 86% ᘏ㒓Ёˈ᳔㒜⫼᠋ᇚӮᳳᳯ䆹䬂Ⲭ㹿偅ࡼDŽ86% ᘏ㒓偅
ࡼᑨ䆹㛑Ẕ⌟䆹⛁⏏ࡴџӊˈᑊϨЎ䆹䬂Ⲭ䆒߯䗴ϔϾᄤ KDQGOHDŽ✊㗠ˈ⬅Ѣ䰸䴲
&RQQHFW&RQWUROOHU 㹿䇗⫼৺߭偅ࡼᇚϡӮϢࠊ఼䖲ˈ䆹䬂ⲬᇚϡӮ៤ЎϔϾৃ⫼ⱘ䕧ܹ
䆒 DŽ ᠔ ҹ ᔧ ϔ Ͼ ⛁ ⏏ ࡴ џ ӊ থ ⫳ ᯊ ˈ 㽕 Փ 䬂 Ⲭ 偅 ࡼ ৃ ⫼ ˈ 86% ᘏ 㒓 偅 ࡼ 㽕 এ 䇗 ⫼
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
&RQQHFW&RQWUROOHU DŽ ˈ ᔧ ϔ Ͼ ⛁ ⿏ 䰸 џ ӊ থ ⫳ ᯊ 86% ᘏ 㒓 偅 ࡼ ᇚ ᖙ 乏 䇗 ⫼
'LVFRQQHFW&RQWUROOHU DŽ
䆒偅ࡼгӮফ䖭ѯ⛁ᦦᢨџӊⱘᕅડDŽ ڣ86% 䖭ḋⱘᘏ㒓ˈ䆒ৃҹ≵᳝ӏԩ乘ܜ䗮
ⶹⱘᚙމϟ㹿⿏ࡼDŽ䖭ህᛣੇⴔˈ86% 䆒偅ࡼⱘ 6WRS ࡳ㛑ᖙ乏ЎϔϾ㋏㒳Ёϡݡᄬⱘ䆒
㒜ℶ偅ࡼˈ᠔ҹˈӏԩϡ㛑ᅠ៤ⱘ ,2 䇋∖ᖙ乏ϡ᪡䆒⹀ӊⱘᚙމϟ㹿⏙䰸DŽ
䗮ᐌˈ⏏ࡴᇍ⛁ᦦᢨџӊⱘᬃᣕⱘࡴњᘏ㒓偅ࡼ䆒偅ࡼⱘᴖᗻDŽᰃ৺ࡴ䖭
⾡ᬃᣕᰃ⬅偅ࡼ㓪ݭҎਬއᅮⱘˈℸᖙ乏乱ᴖᑺˈ偅ࡼᇣ乘ਃࡼ⦃๗ᇍ䖭Ͼ⡍ᗻ
ⱘ䳔∖П䯈ᴗ㸵DŽ
ϟ䴶ⱘϸϾᅲ՟ҷⷕ⌕ֱ䆕њ䆒偅ࡼᑣਬབԩᶹᡒ偅ࡼᴀ䑿ㅵ⧚ⴔⱘ䗝⹀ӊ䆒
DŽ䖭ѯᴎࠊࣙᣀϔϾ՟ᄤЁⱘᶹⳟࠊ఼ KDQGOH ѠϾ՟ᄤЁⱘẔᶹ䆒䏃ᕘDŽ
extern EFI_GUID gEfiDriverBindingProtocolGuid;
EFI_HANDLE gMyImageHandle;
EFI_HANDLE DriverImageHandle;
EFI_HANDLE ControllerHandle;
EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath;
//
// Use the DriverImageHandle to get the Driver Binding Protocol
// instance
//
Status = gBS->OpenProtocol (
DriverImageHandle,
&gEfiDriverBindingProtocolGuid,
&DriverBinding,
gMyImageHandle,
NULL,
EFI_OPEN_PROTOCOL_HANDLE_PROTOCOL
);
if (EFI_ERROR (Status)) {
return Status;
}
//
// EXAMPLE #1
//
// Use the Driver Binding Protocol instance to test to see if
// the driver specified by DriverImageHandle supports the
// controller specified by ControllerHandle
//
Status = DriverBinding->Supported (
DriverBinding,
ControllerHandle,
NULL
);
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
if (!EFI_ERROR (Status)) {
Status = DriverBinding->Start (
DriverBinding,
ControllerHandle,
NULL
);
}
return Status;
//
// EXAMPLE #2
//
// The RemainingDevicePath parameter can be used to initialize
// only the minimum devices required to boot. For example,
// maybe we only want to initialize 1 hard disk on a SCSI
// channel. If DriverImageHandle is a SCSI Bus Driver, and
// ControllerHandle is a SCSI Controller, and we only want to
// create a child handle for PUN=3 and LUN=0, then the
// RemainingDevicePath would be SCSI(3,0)/END. The following
// example would return EFI_SUCCESS if the SCSI driver supports
// creating the child handle for PUN=3, LUN=0. Otherwise it
// would return an error.
//
Status = DriverBinding->Supported (
DriverBinding,
ControllerHandle,
RemainingDevicePath
);
if (!EFI_ERROR (Status)) {
Status = DriverBinding->Start (
DriverBinding,
ControllerHandle,
RemainingDevicePath
);
}
return Status;
Ӿҷⷕ
ϔϾⱘᅲ⦄⊩߭ᰃϔϾㅔऩⱘ䆒偅ࡼˈ䆹偅ࡼϡӮ߯䗴ӏԩⱘ KDQGOHˈᅗাᰃᇚ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
䆒偅ࡼ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ಯゴ
Դᑨ䆹ⶹ䘧ⱘSURWRFROV
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᐌ䆚ᑊϡᰃ䇈ӫ᠔਼ⶹDŽ
—Will Rogers
ഫৡ⿄:
helloworld.c
ᨬ㽕:
ϟ䴶ᰃϔϾㅔऩⱘഫˈ⫼ᴹሩ⼎ϔϾᴀⱘ EFI ᑨ⫼ᑣⱘ⊩ݭDŽ
㗙:
Waldo
⠜ᴀग़˖
--*/
#include "efi.h"
EFI_STATUS
InitializeHelloApplication (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
UINTN Index;
//
// Send a message to the ConsoleOut device.
//
SystemTable->ConOut->OutputString (
SystemTable->ConOut,
L"Hello application started\n\r");
//
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Example
Shell> hello
EFI OS Loaders
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
4.OS ᳝ᇚਃࡼ䏃ᕘਃࡼ䗝乍ҹ⦃๗ব䞣ⱘᔶᓣᄬټ䴲ᯧ༅ᗻᄬټ䆒Ёⱘ䗝ᢽᴗDŽ
OS Loader ৃ㛑䳔㽕Փ⫼ᄬټ䴲ᯧ༅ᗻᄬټ䆒Ёⱘ⦃๗ব䞣DŽ OS Loader ৃ㛑г䳔
㽕Ӵ䗦ᶤѯ⦃๗ব䞣ࠄ OS kernel ЁDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
᳔ৢϔℹ߫ߎњᣛ᠔᳝㋏㒳䜡㕂㸼ˈ㋏㒳ᔧࠡⱘݙᄬᇘ㸼᠔᳝㋏㒳⦃๗ব䞣ⱘᣛ䩜DŽ
᠔᳝ℹ偸ᠻ㸠ৢˈOS loader 䇗⫼ ExitBootServices()DŽ
BS->HandleProtocol(
ImageHandle,
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
&LoadedImageProtocol,
LoadedImage
);
BS->HandleProtocol(
LoadedImage->DeviceHandle,
&DevicePathProtocol,
&DevicePath
);
Print (
L"Image device : %s\n",
DevicePathToStr (DevicePath)
);
Print (
L"Image file : %s\n",
DevicePathToStr (LoadedImage->FilePath)
);
Print (
L"Image Base : %X\n",
LoadedImage->ImageBase
);
Print (
L"Image Size : %X\n",
LoadedImage->ImageSize
);
OS loader ⱘ䆒䏃ᕘϟ䆓䯂᭛ӊ
Ϟϔ㡖ⓨ⼎ⱘᰃᗢḋ㦋প䆒䏃ᕘOS Loader䬰ڣ䏃ᕘDŽϟᴹⱘҷⷕ⠛ᮁᇚⓨ⼎ᗢḋ
⫼䖭ѯֵᙃᴹᠧᓔϔϾিOSKERNEL.BINⱘ᭛ӊˈ䖭Ͼ᭛ӊϢOS LoaderⳌৠⳂᔩϟDŽ佪
⫼ܜHandleProtocolᴹ㦋পҢϞϔ㡖ᕫࠄⱘdevice handleⱘFILE_SYSTEM_PROTOCOL
ষˈ✊ৢˈ⺕Ⲭोᠡৃҹ㹿ᠧᓔˈ᭛ӊᄬপ៤Ўৃ㛑ˈ᳔㒜ⱘ㒧ᵰᰃˈব䞣CurDir៤ЎOS Loader
᠔ߚऎⱘϔϾ᭛ӊhandleDŽ
BS->HandleProtocol(
LoadedImage->DeviceHandle,
&FileSystemProtocol,
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
&Vol
);
Vol->OpenVolume (
Vol,
&RootFs
);
CurDir = RootFs;
StrCpy(FileName,DevicePathToStr(LoadedImage->FilePath));
for(i=StrLen(FileName);i>=0 && FileName[i]!='\\';i--);
FileName[i] = 0;
StrCat(FileName,L"\\OSKERNEL.BIN");
CurDir->Open (CurDir, &FileHandle, FileName,
EFI_FILE_MODE_READ, 0);
Size = 0x00100000;
BS->AllocatePool(EfiLoaderData, Size, &OsKernelBuffer);
FileHandle->Read(FileHandle, &Size, OsKernelBuffer);
FileHandle->Close(FileHandle);
ᇏᡒ OS ߚऎ
ᇍ㋏㒳ⱘ↣Ͼߚऎᴹ䇈,EFI⼎՟⦃๗ᅲ⦄њϔϾBLOCK_IO_PROTOCOLᅲ՟DŽOS Loader
㛑ձ䴴ᇏᡒ᠔᳝ⱘBLOCK_IO䆒ᴹ᧰㋶㋏㒳ߚऎDŽϟ䴶ⱘҷⷕ⠛ᮁ⫼LibLocateHandle()
㦋ᕫBLOCK_IO device handle ߫㸼DŽ䖭ѯhandles⫼ᴹẔ㋶↣ϾBLOCK_IO䆒ⱘϔϾ
blockDŽHandleProtocol() APIᰃ⫼ᴹ㦋প↣ϾBLOCK_IO䆒ⱘDEVICE_PATH_PROTOCOL
BLOCK_IO_PROTOCOLⱘᅲ՟DŽব䞣BlkIoᰃϔϾՓ⫼BLOCK_IO_PROTOCOLষⱘ
BLOCK_IO䆒ⱘhandleDŽѢℸˈReaddBlocks()ৃ⫼ᴹ䇏প䆒ⱘϔϾblockDŽ⼎՟OS
Loaderҙҙᰃᡞblockⱘݙᆍᰒ⼎ߎᴹњˈᅲ䰙ϞˈOS Loaderࡵᖙ⌟䆩䇏প↣Ͼblockˈ⹂
ֱ↣ϾߚऎᰃৃⶹⱘDŽৃⶹⱘߚऎᡒࠄПৢˈOS Loader㛑ᅲ⦄ϔϾㅔऩⱘ㋏㒳᭛ӊ偅ࡼˈ
䖭Ͼ偅ࡼӮ⫼EFI API ReadBlock()ҢߚऎЁ㺙䕑乱ⱘ᭄DŽ
㦋ᕫᔧࠡⱘ㋏㒳䜡㕂ֵᙃ
㋏㒳䜡㕂ֵᙃৃҹ䗮䖛SystemTableⱘ᭄㒧ᵘᕫࠄ˄SystemTableӮ㹿Ӵ㒭OS
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
loader˅DŽ᪡㋏㒳Loaderᴀ䑿ᰃϔϾEFIⱘᑨ⫼ˈᅗ䍋ࠄ≳䗮ӊᑇৄϢ᪡㋏㒳П䯈ⱘḹṕ
⫼DŽSystem Talble⫼ᴹਞⶹLoader˖ৃ⫼ⱘӊᑇৄ᳡ࡵ˄՟བҢၦҟ㺙䕑OS Kernel binary
㽕⫼ࠄⱘblockࠊৄ᳡ࡵ㺙䕑OS偅ࡼПࠡ⫼᠋㛑Փ⫼ⱘblockࠊৄ᳡ࡵ˅䆓䯂Ꮉ
Ϯᷛޚ㸼ˈབACPIˈSMBIOSㄝDŽৃ⫼ⱘ5Ͼ㸼Ḑⱘ㒧ᵘݙᆍᅗӀ㞾ⱘspecЁ᳝䯤䗄DŽ
㦋পᔧࠡݙᄬᇘ㸼
EFIࡳ㛑ᑧ㛑䞞ᬒEFI᠔⫼ⱘݙᄬ䌘⑤DŽLoader䖤㸠ⱘᯊݙˈᄬ⬅ᑇৄӊᴹㅵ⧚ˈ
ᑇৄӊᏆ㒣㒭ӊߦߚњݙᄬ˄boot services memory˅ˈгߦߚњ݊ᅗ䳔㽕ϔⳈֱᣕࠄOS
runtimeⱘݙᄬ䌘⑤˄runtime memory˅DŽⳈࠄ㺙䕑ᑣᡞ᳔ৢⱘࠊᴗѸ㒭OS Kernelᑊ䇗⫼
ExitBootServices()ПࠡˈEFIᑇৄӊϔⳈᥠㅵⴔݙᄬⱘߚ䜡DŽ䖭ህᰃ䇈OS Loader݊ҪEFI
ᑨ⫼ᑣৃҹ䗮䖛ݙᄬᇘ᳡ࡵᴹᶹᯢݙᄬߚ䜡DŽ
ϟ䴶ⱘҷⷕ⠛ᮁⓨ⼎ϔϾᶹᯢݙᄬᇘᑊᰒ⼎݊ݙᆍⱘߑ᭄ⱘ⫼⊩DŽOS Loaderᖙ乏⡍߿
⊼ᛣMapKey䖭Ͼখ᭄ˈᔧ↣EFIׂᬍ݊᠔Փ⫼ⱘݙᄬᇘᯊˈMapKeyህӮࡴDŽOS Loader
䳔㽕ᇚᔧࠡݙᄬᇘѸ㒭OS KernelDŽབᵰݙᄬᇘ㹿䞞ᬒ䇗⫼ExitBootServices()ᳳ䯈䇗
⫼OS Loaderࡳ㛑ˈݙᄬᇘৃ㛑Ӯ㹿ᬍࡼDŽϔ㠀ᴹ䇈ˈOS Loaderᑨ䆹䇗⫼
ExitBootServices()Пࠡ䞞ᬒݙᄬDŽབᵰЎMapKeyϡऍ䜡ᇐ㟈ExitBootServices()ࡳ㛑༅䋹ˈ
OS Loader䳔㽕㦋ᕫϔӑᮄⱘݙᄬᇘࡃᴀݡ䞡ᮄᇱ䆩DŽ
㦋প⦃๗ব䞣
䖛⏵ࠄ OS Kernel
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Ѩゴ
(),5XQWLPH
㒭ϔϾᏆ㒣ᓊ䖳ⱘ䕃ӊ乍ⳂࡴҎˈাӮՓᅗࡴᓊ䖳DŽ
--Ꮧ剕߭⊩ܟ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
䲒䘧ϡᰃা᳝ϔ⾡ݙᄬ৫˛
ᔧ EFI ݙᄬߚ䜡ҹৢˈᅗህᏆ㒣㹿ᣝ✻ᶤ⾡ߚ㉏ᮍ⊩ߦߚ៤ϔ⾡㉏ൟⱘݙᄬњˈ䖭⾡ߚ㉏ᮍ
⊩ᣛᯢњ⾡⡍ᅮݙᄬ㉏ൟⱘϔ㠀⫼䗨DŽ↨བᔧ៥Ӏ䳔㽕ϔഫ㓧ކЁⱘ᭄Ⳉࠄᑇৄ᪡ⱘ䖤
㸠ᯊ䰊↉г㛑ֱᣕৃ⫼ˈ䙷៥Ӏህৃҹ䗝ᢽ⫼ EfiRuntimeServicesData ㉏ൟᴹᇍ䖭ഫ㓧ކ䖯
㸠ߚ䜡DŽߚ䜡ݙᄬⱘᯊৃˈ㛑᳝ҎӮᛇˈЎњҹ䰆ϛϔˈЎҔМϡᡞ᠔᳝ⱘݙᄬ䛑ҹ䖤㸠
ᯊݙᄬ㉏ൟᴹ䖯㸠ߚ䜡ਸ਼˛ॳѢˈ䖭⾡㸠Ўᰃॅ䰽ⱘˈЎᔧᑇৄҢਃࡼ᳡ࡵ䰊↉ߛᤶࠄ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
䖤㸠ᯊ䰊↉ҹৢˈ᠔᳝ҹ䖤㸠ᯊ㉏ൟߚ䜡ⱘݙᄬᇍ᪡㋏㒳ᴹ䇈䛑ᰃ㹿ޏ㒧ˈϡ㛑㹿Փ⫼ⱘDŽ
᳝䖭МϔϾ䱤؛䆒ˈ᠔᳝䇋∖ߚ䜡䖤㸠ᯊݙᄬⱘҷⷕ䛑ⶹ䘧ᅗӀخҔМDŽབᵰ៥Ӏাᰃ؛
ᅮা᳝ϔ⾡㉏ൟݙᄬⱘߚ䜡ⱘ䆱ˈ៥Ӏৃҹᛇ䈵ࠄݙᄬ⊘䴆ⱘᠽᬷDŽѢ䖭⾡㗗㰥ˈEFI ᓎゟњ
ϔ༫ݙᄬ㉏ൟˈ䖭݊Ёⱘ↣ϔ⾡ݙᄬ㉏ൟ䛑᳝ᶤ⾡ᣛᅮⱘՓ⫼ᛃ՟ᅗӀⳌᇍᑨDŽ
ࡽ䆄ヺ ᦣ䗄
EfiReservedMemoryType Փ⫼
EfiBootServicesCode ࡴ䕑ⱘਃࡼ᳡ࡵ偅ࡼⱘҷⷕ䚼ߚDŽ
ࡴ䕑ⱘਃࡼ᳡ࡵ偅ࡼⱘ᭄䚼ߚ,ਃࡼ᳡ࡵ偅ࡼߚ䜡 pool
EfiBootServicesData
ݙᄬᯊⱘ咬䅸᭄ߚ䜡㉏ൟDŽ
EfiRuntimeServicesCode ࡴ䕑ⱘ䖤㸠ᯊ᳡ࡵ偅ࡼⱘҷⷕ䚼ߚDŽ
ࡴ䕑ⱘ䖤㸠ᯊ᳡ࡵ偅ࡼⱘ᭄䚼ߚ,䖤㸠ᯊ᳡ࡵ偅ࡼߚ䜡
EfiRuntimeServicesData
pool ݙᄬᯊⱘ咬䅸᭄ߚ䜡㉏ൟDŽ
EfiConventionalMemory ぎ䯆(ߚ䜡)ݙᄬDŽ
EfiUnusableMemory ⌟ࠄ䫭䇃ⱘݙᄬDŽ
EfiACPIMemoryNVS 乘⬭㒭ӊՓ⫼ⱘഄഔぎ䯈DŽ
⫼ᴹ㒭㋏㒳ӊ䇋∖ݙᄬᇘ IO ऎඳˈ᪡㋏㒳ᡞݙᄬ
EfiMemoryMappedIO ᇘ IO ऎඳᇘࠄ㰮ᢳഄഔˈ䖭ḋ䖭ѯऎඳህ㛑㹿 EFI 䖤㸠
ᯊ᳡ࡵ䆓䯂ࠄњDŽ
໘⧚఼⫼ᴹᡞݙᄬ਼ᳳ䕀࣪Ў IO ਼ᳳⱘ㋏㒳ݙᄬᇘ IO
EfiMemoryMappedIOPortSpace
ऎඳDŽ
EfiPalCode ӊ乘⬭㒭໘⧚఼ϔ䚼ߚᑣⱘഄഔぎ䯈DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
✊㗠ˈЎњདⱘ䇈ᯢ䖭ѯݙᄬ㉏ൟᑇৄਃࡼⱘ䖤㸠ᯊ䰊↉ᰃབԩ㹿Փ⫼ⱘˈ៥Ӏ⫼㸼
ᴹ䯤ᯢ᪡㋏㒳ࡴ䕑఼䇗⫼ ([LW%RRW6HUYLFHV Пৢ䖭ѯ (), ݙᄬ㉏ൟᰃབԩ㹿Փ⫼ⱘˈ
㸼ᯢҢ乘ਃࡼ䰊↉ࠄ䖤㸠ᯊ䰊↉ⱘ䕀বDŽ
ࡽ䆄ヺ ᦣ䗄
EfiReservedMemoryType Փ⫼
EfiLoaderCode ࡴ䕑఼/᪡㋏㒳ৃҹᅗӀ䅸Ўড়䗖ⱘᯊՓ⫼䖭⾡
ݙᄬDŽ⊼ᛣ˖䇗⫼ ExitBootServices()ⱘ᪡㋏㒳ࡴ䕑఼Փ
⫼њϔϾ㗙Ͼ EfiLoaderCode ऎඳDŽ
EfiLoaderData ࡴ䕑఼/᪡㋏㒳ৃҹᅗӀ䅸Ўড়䗖ⱘᯊՓ⫼䖭⾡
ݙᄬDŽ⊼ᛣ˖䇗⫼ ExitBootServices()ⱘ᪡㋏㒳ࡴ䕑఼Փ
⫼њϔϾ㗙Ͼ EfiLoaderData ऎඳDŽ
EfiBootServicesCode ϔ㠀Փ⫼ৃҹ䆓䯂ⱘݙᄬDŽ
EfiBootServicesData ϔ㠀Փ⫼ৃҹ䆓䯂ⱘݙᄬDŽ
EfiConventionalMemory ϔ㠀Փ⫼ৃҹ䆓䯂ⱘݙᄬDŽ
EfiUnusableMemory ᳝䫭䇃ⱘݙᄬˈϡ㛑㹿Փ⫼DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
EfiMemoryMappedIO ᪡㋏㒳ϡՓ⫼䖭⾡ݙᄬDŽ㋏㒳䞠᠔᳝ⱘݙᄬᇘ IO ֵᙃ
䛑ᴹ㞾Ѣ ACPI 㸼DŽ
EfiMemoryMappedIOPortSpace ᪡㋏㒳ϡՓ⫼䖭⾡ݙᄬDŽ㋏㒳䞠᠔᳝ⱘݙᄬᇘ IO ッষ
ぎ䯈ֵᙃ䛑ᴹ㞾Ѣ ACPI 㸼DŽ
㸼 Ёˈ៥Ӏৃҹⳟࠄ䖤㸠ᯊݙᄬ㉏ൟᰃᗢḋ㹿ֱᡸⱘˈৃҹⳟࠄਃࡼ᳡ࡵ㉏ൟⱘݙ
ᄬᰃᗢМ㹿᪡㋏㒳ಲᬊˈᔧخ㞾ᏅৃҹՓ⫼ⱘݙᄬDŽ
䖤㸠ᯊ᳡ࡵᰃབԩሩ⼎ߎᴹⱘ˛
䗮䖛 (), 䜡㕂㸼ሩ⼎ߎᴹⱘֵᙃˈᇚӮϡৠⱘᑇৄᅲ⦄П䯈㸼⦄ߎ䍞ᴹ䍞ⱘᏂᓖᗻDŽ
✊㗠䳔㽕⊼ᛣⱘϔϾ݇䬂⚍ᰃˈϢ *8,'ᣛ䩜ᇍⳌ݇㘨ⱘ *8,' ᅮНњ៥ӀᗢМএ⧚㾷ᣛ䩜᠔ᣛ
ⱘ᭄DŽᣛ䩜᠔ᣛⱘݙᆍৃҹᰃϔϾߑ᭄㗙 $3,ˈৃҹᰃϔᓴ᭄㸼ˈгТৃҹᰃ݊Ҫ
ⱘӏԩϰ㽓DŽ ВϾ՟ᄤˈ 䗮䖛 (), 䜡㕂㸼ሩ⼎ߎᴹⱘֵᙃ㉏ൟৃҹᰃ 60%,26ˈ
$&3, 03WDEOHˈ
гৃҹᰃϔഫ 81', ݐᆍ㔥वⱘߑ᭄ॳൟDŽ ᰃϔᓴড (), 䜡㕂㸼ϔϾߑ᭄ॳൟᅲ՟བ
ԩѸѦⱘ՟DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᯊ䯈᳡ࡵ
㸼(), 䖤㸠ᯊ᳡ࡵ㸼ЁѢᯊ䯈ⱘߑ᭄
䖨ಲᔧࠡⱘᯊ䯈᮹ᳳҹঞᑇৄⱘᯊ䯈ֱᣕ
*HW7LPH 䖤㸠ᯊ
㛑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ЎҔМ㽕ᢑ䈵ᯊ䯈˛
㦋পᯊ䯈
˄Page76-85 ᅠ៤˅
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
݁ゴ
(),ࠊৄ᳡ࡵ
ϡ㽕ЎԴϡⶹ䘧བԩᥠⱘ䫭䇃ᚙᔶ⌟خ䆩
䖭ѯষ䗮䖛ߑ᭄䇗⫼ⱘᅮНࡴҹ䆺䗄ˈҹ֓ᅲ⦄Ёᕫࠄ᳔ⱘ♉⌏ᑺDŽ՟བˈϔϾヺ
ড়㾘㣗ⱘ㋏㒳ᑊϡϔᅮ䳔㽕䬂ⲬሣᐩϢ݊Ⳉ䖲DŽা㽕ߑ᭄ⱘ䇁Нᕫҹֱ⬭ˈᅗⱘᅲ⦄ህ
ৃҹӏᛣՓ⫼䖭ѯষᴹᓩᇐֵᙃ⌕ˈা㽕㛑៤ࡳഄᇚֵᙃӴ䗦㒭㋏㒳⫼᠋ेৃDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ㅔऩ᭛ᴀ䕧ܹण䆂
Ƶ Reset - 䆹ߑ᭄ᇚ䕧ܹ䆒⹀ӊԡDŽЎ߱ྟ࣪䖛ⱘϔ䚼ߚˈӊ/䆒䖯㸠ϔ
ᖿ䗳Ԛড়⧚ⱘᇱ䆩ᴹ偠䆕䆒ᰃ৺ᎹℷᐌDŽ䖭⾡⹀ӊ偠䆕䖛ᰃϡৠⱘᅲ⦄㗠ᓖⱘˈϨᅗ
㹿⬭㒭ӊ/ EFI 偅ࡼᑣᴹᅲ⦄DŽ
Ƶ ReadKeyStroke - 䆹ߑ᭄Ң䕧ܹ䆒䇏পϟϔϾߏ䬂DŽབᵰ≵᳝ৢ㓁ߏ䬂ˈ߭䆹ߑ᭄
䖨ಲϔϾ EFI Not Ready 䫭䇃DŽབᵰ᳝ৢ㓁ߏ䬂ˈ߭䖨ಲϔϾ EFI 䬂DŽϔϾ EFI 䬂⬅ϔϾᠿᦣⷕ
ϔϾ Unicode ᄫヺ㒘៤DŽ݊Ёⱘ Unicode ᄫヺᰃᅲ䰙ৃᠧॄⱘᄫヺˈ㗙㢹䆹䬂≵᳝⫼ৃ
ᠧॄᄫヺ㸼⼎ᯊ߭ℸ Unicode ᄫヺЎ䳊ˈ↨བࠊ䬂ࡳ㛑䬂DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ㅔऩ᭛ᴀ䕧ߎण䆂
ϔϾাᬃᣕڣᓣⱘ㾚乥䆒ᖙ乏㛑ӓⳳ᭛ᴀᓣⱘࡳ㛑DŽ䕧ߎᄫヺІЁϡܕ䆌ࣙ
䰸㸼 6.1 ҹⱘ݊ᅗӏԩࠊⷕDŽܝᷛ㕂ԡা㛑䗮䖛 SetCursorPosition()ߑ᭄ᴹᅠ៤DŽ䖭䞠ᔎ
⚜ᓎ䆂ᇚ StdErr 䆒䕧ߎⱘ᭛ᴀ䰤ࠊЎІ㸠ᄫヺІ䕧ߎDŽᤶহ䆱䇈ˈϡᓎ䆂 StdErr 䕧ߎ
ⱘ⍜ᙃЁՓ⫼ ClearScreen() SetCursorPosition()ˈҹՓ៥Ӏ㛑⏙᱄ഄᤩ㦋㾖ⳟࠄ䕧ߎ
ֵᙃDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ㅔऩ᭛ᴀ䕧ߎण䆂䖬ࣙ䆌᭛ᴀ䕧ߎⳌ݇ⱘߑ᭄DŽԚᰃˈᴀゴা䅼䆎᳔ᐌ⫼ⱘϾ˖
䗮䖛ᦤկϔ⾡ܕ䆌ࠊৄ䆒˄བ㾚乥偅ࡼᑣ˅ѻ⫳᭛ᴀষⱘᢑ䈵ˈ䖭ৃҹϢӴ㒳
ӊⱘ INT 10h ᬃᣕⳌႆ㕢DŽㅔऩ᭛ᴀ䕧ߎষⱘ⫳៤㗙䋳䋷ᇚ Unicode ᭛ᴀᄫヺЎ䆹䆒䕀ᤶ
៤ℷ⹂ⱘᄫൟDŽᔧϔϾϡ㛑㹿䆚߿ⱘ Unicode ᄫヺ䗕ࠄ OutputString() API ᯊˈൟⱘ㒧ᵰᰃ
ѻ⫳ϔϾ䄺ਞˈᦤ⼎䖭ѯᄫヺᇚ㹿ᗑ⬹DŽ
Ƶ ClearScreen - 䆹ߑ᭄㛑⏙䰸ϔϾϾ䕧ߎ䆒ⱘᰒ⼎ݙᆍˈᑊᇚ݊䖬ॳ៤ᔧࠡ䗝
ᅮⱘ㚠᱃㡆DŽৠᯊܝᷛⱘԡ㕂ᇚ㹿㕂Ѣതᷛ˄0ˈ0˅໘DŽ
Ƶ SetCursorPosition - 䆹ߑ᭄⫼ᴹ䆒㕂ܝᷛᔧࠡԡ㕂ⱘതᷛDŽሣᐩᎺϞ㾦㹿ᅮНЎതᷛ
˄0ˈ0˅
䖰ࠊৄᬃᣕ
ᴀゴⱘࠡ㡖䆆䗄њ䚼ߚ᭛ᴀ䕧ܹ䕧ߎण䆂ˈᑊՓ⫼њϔѯ䗮䖛ᴀഄ䆒⫳៤ⱘ՟ᄤDŽ
EFI ৠḋᬃᣕ⾡䖰ࠊৄDŽ䖭⾡ᬃᣕ߽⫼њᏆ᳝ⱘᴀഄষˈԚᅗᅲ⦄њ䖯ߎ䖤㸠Ёⱘᑇৄ
䆒ⱘ᭄ⱘ䏃⬅DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ࠊৄߚ⾏఼
ᦣ䗄⾡ࠊৄ䆒ⱘ㛑ᵘ៤њᮄⱘ᳝䍷ⱘৃ㛑ᗻDŽϞϔҷӊЁˈᑣਬা㛑䗮䖛
ϔ⾡䗨ᕘᴹᦣ䗄᭛ᴀ I/O ⱘᴹ⑤ⳂⱘഄDŽ⦄ˈ㾘ᅮાѯࠊৄᰃ⌏ࡼࠊৄⱘ EFI ব䞣⬅
䆒䏃ᕘ㾘ᅮDŽ䖭⾡ᚙމϟˈ䖭ѯ䆒䏃ᕘᰃᅲ՟ⱘˈ䖭ᛣੇⴔৃҹ᳝ѢϔϾⱘⳂᷛ䆒
ৃЎ⌏ࡼ䕧ܹ㗙⌏ࡼ䕧ߎDŽ՟བˈབᵰᑣਬᛇ䅽ᑨ⫼ᑣᇚ᭛ᴀৠᯊᠧॄࠄᴀഄሣᐩ
䖰㒜ッⱘሣᐩϞˈ䗮䖛ᅮࠊ䕃ӊᴹᅲ⦄䖭⾡⡍⅞ᑨ⫼ᇚᰃ䴲ᐌϡߛᅲ䰙ⱘDŽ EFI ᦤկⱘᮍ
ḜЁˈ䗮䖛ࠊৄߚ⾏/ড়ᑊ㛑ˈᑨ⫼ᑣৃҹাՓ⫼ EFI ᦤկⱘᷛޚ᭛ᴀষˈࠊৄߚ⾏
఼Ӯᇚ䖭ѯ᭛ᴀ䇋∖䗕㟇ড়䗖ⱘऩϾϾⳂᷛ䆒ϞDŽ䖭⾡ᮍ⊩ᇍ䕧ܹ䕧ߎ⌕䛑ৠḋ䗖⫼DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᴀষЎण䆂㹿ᅝ㺙ˈϨࠊৄߚ⾏఼Ў㒭ᅮⱘࠊৄব䞣ֱ⬭ϔϾ⫼᠋䗝ᅮⱘ䆒ⱘ䖤㸠
ᷛ䆄ˈབ ConOut, ConIn, ErrOutDŽ
㔥㒰ࠊৄ
EFI гᦤկњϢ㔥㒰Ё䖰ᑇৄᓎゟ᭄䖲ⱘ㛑DŽা㽕ᅝ㺙њড়䗖ⱘ偅ࡼᑣˈᑣਬ
гৃҹ䅽ヺড় EFI 㾘㣗ⱘᑇৄᬃᣕϔ༫᭛ᴀ I/O ⱘᢑ䈵DŽࠡ䴶䅼䆎䖛ˈ⹀ӊষ˄՟བˈІ㸠
䆒ǃ䬂Ⲭǃ㾚乥ǃ㔥㒰ষव˅䛑᳝ϔϾᢑ䈵DŽϢ䖭ϔὖᗉ㉏Ԑˈ݊Ҫ䚼ӊᓎゟ䖭⾡⹀ӊ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᢑ䈵ⱘ⸔ПϞˈᴹᦤկϔϾᎹ䕃ӊᷜDŽ
Ƶ 㔥㒰ষ䆚߿ - 䖭ᰃϔϾ⬅䗮⫼㔥㒰偅ࡼᑣষ˄UNDI˅ѻ⫳ⱘৃ䗝ण䆂ˈᅗ⫼Ѣ
⫳៤ㅔऩ㔥㒰ण䆂DŽ䖭Ͼण䆂া᳝ᑩሖ㔥㒰ষᰃ 16 ԡ UNDI, 32/64 ԡ S/W UNDI, H/W
UNDI ᯊᠡᰃᖙ乏ⱘDŽᅗ㹿⫼ᴹ㦋পᑩሖ㔥㒰ষⱘ㉏ൟ⠜ᴀֵᙃDŽ
Ƶ ㅔऩ㔥㒰ण䆂---䖭Ͼण䆂㒭㔥㒰䗖䜡఼ᦤկњϔϾֵᙃࣙϔ㑻ⱘষDŽᅗ䖬ᦤկ
њ߱ྟ࣪㔥㒰ষǃথ䗕ࣙǃᬊࣙ݇䯁㔥㒰ষⱘ᳡ࡵDŽ
Ўњ㾷䞞ϔϾ䗮⫼㔥㒰ࠊৄⱘൟˈԴৃҹᦣ䗄ϔϾ߱ྟⱘ⹀ӊᢑ䈵ˈᅗϢ UNDI 偅ࡼ
ᑣѻ⫳ⱘ㔥㒰ষࠊ఼˄NIC˅Ⳉ䗮ֵDŽ䖭㒻㗠᳝ϔϾԡѢ UNDI ПϞⱘㅔऩ㔥㒰ण䆂ሖDŽ
ᅗ㛑ᦤկᴀⱘ㔥㒰ᢑ䈵ষˈབ Send ReceiveDŽℸПϞৃ㛑Ӯᅝ㺙ϔϾӴ䕧ण䆂˄བ
TCP/IP ण䆂ᷜ˅DŽᇍѢ᭄㋏㒳㗠㿔ˈϔᮺᦤկњϔϾ⹂ᅮⱘӴ䕧ᴎࠊˈ៥Ӏৃҹᑇৄݙ
ᨁᓎ⾡ᠽሩᑣˈབ Telnet Daemonˈৃҹ䅽䖰⫼᠋䗮䖛㔥㒰䖲ᴹⱏᔩ㋏㒳DŽ᳔㒜ˈ
䖭ϾᅜᡸᑣӮ⫳៤ᑊ䋳䋷໘⧚Ꮖ㒣ࠡ䴶ゴ㡖ᦣ䗄䖛ⱘℷᐌ᭛ᴀ I/O ষDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ϗゴ
ϡৠ㉏ൟⱘᑇৄ
ḋᗻᰃ⫳⌏ⱘ䇗᭭ˈᅗ䅽⫳⌏ЄᆠᔽDŽ
----࿕ᒝ•㗗ᶣ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
⏅ܹ PC ӊⱘϾ㒘៤䚼ߚⱘࡴ䕑Пࠡˈܜಲ乒ϔϟ݊ҪϔѯᑇৄDŽ݊ЁࣙᣀԢࡳ㗫
IA32 ⱘ CPU Intel XScale ໘⧚఼ⱘ᮴㒓ϾҎ᭄ᄫࡽ⧚DŽ✊ৢݡᇚᑇৄᠽࠄ᳡ࡵ఼DŽབ 7.3
᠔⼎DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᦤկϔ㋏߫ⱘ᳡ࡵˈབ㦋প䆒㕂㋏㒳ᯊ䯈DŽDŽ䆒㕂㋏㒳ᯊ䯈ᇚӮ៥Ӏⱘᑇৄᓩ⫼㉏Ёᴹࡴҹ
ᅵᶹDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
(), ব䞣ৃҹᄬټ䮾ᄬⱘϾഄᮍ˄᳡ࡵ఼ϞⱘϔϾ᳡ࡵ໘⧚఼Ё˅ˈℸˈ䳔㽕ϔϾ
偅ࡼᑣᴹᢑ䈵࣪ব䞣ⱘᄬټDŽߎѢᅝܼ㗗㰥ˈկᑨଚৃҹ㽕∖䖭ᮍ䴶ⱘ㒘ӊᮄㅒ㕆ഫ
⌒䘷ЎϔϾৃֵᑇৄഫ˄730˅DŽᅝܼ偅ࡼᑣᇚᢑ䈵࣪ⱘ䖭ѯᅝܼ㗗䞣DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ৠḋⱘˈ(),VKHOO %'6ձ✊ԡѢ䆹ण䆂ߚሖⱘ乊䚼DŽㅔऩⱘ᭛ӊ㋏㒳˄)6˅ण䆂ⱘᅲ
՟ᦤկњᑨ⫼ᑣ䇏ݭᓔਃ݇䯁᭛ӊⱘࡳ㛑DŽ)6 ण䆂ԡѢ⺕Ⲭ ,2 ण䆂ПϞDŽ⺕Ⲭ ,2 ᦤկ
ᄫ㡖㑻䆓䯂ҹ䴶ऎඳЎᇐⱘഫ䆒DŽℸˈ⺕Ⲭ ,2 ᰃଃϔϔϾᦤկᇍ⹀ӊ⡍ᅮⱘഫ ,2
ᢑ䈵࣪ᇘⱘ㒃䕃ӊ偅ࡼ఼ˈ⺕Ⲭ ,2 ሖ㒻ᡓњᕜⱘഫ ,2 ⱘᅲ՟DŽഫ ,2 ण䆂ᰃ⬅Ⳍ݇ഫ
䆒থᏗⱘˈབ ';( Ёᢑ䈵 ,&+ ЁⱘІ㸠䖲˄6$7$˅⺕Ⲭࠊ఼ⱘ ,&+ 偅ࡼᑣDŽ⺕Ⲭ偅ࡼ
ᑣՓ⫼њ 3&, ഫ ,2 ण䆂ᴹ䆓䯂 ,&+ 䚼ӊⱘࠊ⢊ᗕᆘᄬ఼DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ܿゴ
ो᭛ӊऎഫ
6 ো˖ԴᡒҔМ˛
2 ো˖៥Ӏᛇ㽕ֵᙃDŽ
6 ো˖Դ䇕ϔӭ˛
2 ো˖䖭Ͼϡ㛑䇈DŽ៥Ӏ䳔㽕⍜ᙃ……⍜ᙃ……⍜ᙃDŽ
6 ো˖ԴӀᡒϡࠄⱘDŽ
2 ো˖गᮍⱒ䅵ˈ៥ӀӮⱘ.
—Patrick McGoohan, The Prisoner
᭛ӊᰃ䅵ㅫᴎ䞠᳔ᴀⱘὖᗉПϔ䖭ᇍѢ᭄⫼᠋ᴹ䇈ᰃᄬټᄬټၦԧ ↨བ⹀Ⲭ
ⲬܝϞⱘϔѯ᭄ⱘ䲚ড়гᰃ䚼ߚᑣਬ⧚㾷䅵ㅫᴎᎹॳ⧚ⱘϔϾᴀὖᗉDŽ᭛ӊᰃ
ᕜᴀⱘὖᗉ᭄ᑣਬⳳⱘϡ⫼ᇍᅗ᳝ⱘ㗗㰥བᵰ⹂ᅲ䳔㽕㗗㰥ҪӀ㗗㰥ⱘᰃ᭛
ӊ߯ᓎ䇏ݭߴ䰸ҪӀⶹ䘧Դৃҹ᭛ӊЁᄬټ᭄ϔ㠀ᴹ䇈ᰃ᭄ⱘⶶ䞣ᑊϨ䖭ѯ᭄
ᰃ䴲ᯧ༅ᗻⱘ
⫼᠋ᑣਬгⶹ䘧᭛ӊᰃᄬټ⹀Ⲭ䕃Ⲭ8 Ⲭ㗙݊ᅗᄬټၦԧϞⱘDŽԚᰃӊ 䖭䞠
ⱘӊᣛ ELRV ᑣਬ䗮ᐌᕜᇥՓ⫼Ӵ㒳ⱘᄬټ䆒ᴹᄬټҪӀⱘ᭛ӊ᭄DŽℸˈӊՓ⫼
Ӵ㒳ὖᗉⱘ᭛ӊᴹᄬټᰃ䴲ᐌᇥ㾕ⱘᚙᔶϡ䖛 IUDPHZRUNЁᡞᑣ᭄ᄬټ᭛ӊЁ
ᰃϔ⾡᳔ᴀⱘ㒧ᵘ䳔㽕⡍߿⊼ᛣⱘᰃ䖭䞠᠔䇈ⱘ᭛ӊঞ᭛ӊ㋏㒳ⱘՓ⫼ᰃϡৠѢ (), ᶊ
ᵘЁ⫼ᴹㅵ⧚ᓩᇐߚऎⱘ᭛ӊঞ᭛ӊ㋏㒳ⱘDŽ
)UDPHZRUN Ѣ᪡㋏㒳ⱘॳ߭ᅮНњᅗՓ⫼ⱘ᭛ӊⱘᴀᴎࠊԚⳂᷛ⦃๗䅽䖭ѯ᭛ӊ
Ӵ㒳᭛ӊⱘὖᗉজ᳝᠔ϡৠDŽ
ᴃ䇁˖
ⳟ䍋ᴹ䖭䞠ⱘ⾡ḋⱘᴃ䇁ህ᪡㋏㒳䞠ⱘᏂϡϟ䴶ⱘᴃ䇁Փ⫼ IUDPHZRUN
Ё䞡㽕ⱘᰃ㽕⊼ᛣᔧϟ䴶ⱘᴃ䇁Ϣ⦄Դ᠔Փ⫼ⱘ᪡㋏㒳Ёⱘᴃ䇁᳝ৃ㛑ⳌৠԚᅗӀ᠔
ᦣ䗄ⱘࡳ㛑ᰃϡⳌৠⱘ
ӊो˄)9˅ऩϾӊ䆒Ϟߦߚߎⱘ䖲㓁ⱘϔϾ䚼ߚᑊḐᓣৢⱘो䖭䞠ᯢ⹂ⱘ⽕ℶ
ϔϾ )9 ᴹ㞾ѢϾⱘ )'˄㱑✊៥Ӏ䆄ᕫˈϔϾ )' ৃҹᴹ㞾Ѣ䆒˅DŽϡৠѢ᭄᪡㋏㒳ˈ
᠔᳝ӊ䆒Ёⱘӊो˄)9˅䛑ৃҹাऴ⫼ℸӊ䆒᳝ᬜぎ䯈Ёⱘϔ䚼ߚ)9V )' Ё
ⱘԡ㕂ৃҹ㓪䆥ⱘᯊᅮН✊ৢ⬅偅ࡼᴹᦣ䗄ʽᤶϔ⾡䇈⊩ˈᅗϡ䳔㽕ӊो˄)9˅ৃ㹿থ
⦄ⱘˈ䖭ԡ㕂ৃ㛑াᰃᦤࠡⶹ䘧ᑊ⬅݊ᅗ偅ࡼ฿ࠄܙℸ偅ࡼᑣⱘේᷜЁDŽ↨བ )9 䞠ⱘ偅
ࡼৃҹᦣ䗄ⱘ )9VDŽҢᅮНˈህᏆ㒣ⶹ䘧 )9 ᰃᓩᇐ䞣ⱘⳂᷛDŽⶹ䘧㞾Ꮕⱘᆊાྟ㒜ᰃ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ഫ˄VHFWLRQ˅˖ϔϾ᭛ӊⱘᄤऎඳDŽᅗᰃ᳝㉏ൟⱘԚ≵᳝ੑৡⱘDŽ䖭䞠᳝ϸ⾡㉏ൟⱘഫ˖ᆍ
఼ऎඳᖿ˄гিخᇕ㺙ऎඳᖿ˅ᔶऎඳഫ˅ DŽᆍ఼ࣙⱘऎඳഫ㗠㒧⚍ϡࣙDŽ
ᆍ఼ऎඳഫᬃᣕڣय़㓽ᅝܼㄝ⡍⅞⡍ᗻDŽൟⱘ᪡ࣙᠿᦣϔϾ᭛ӊⱘ⡍⅞㉏ൟⱘऎඳഫ
䇏প䖭ѯऎඳഫ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
)9V ⱘሖ㒧ᵘ
z 䆒䅵㑺ᴳ˖
ӊⱘᄬټ䆓䯂ᴎࠊᔎ⚜ফӊⱘՓ⫼ӊ᳝ৃ㛑㹿ټᄬⱘϔѯၦԧⱘᕅડDŽਃ
ࡼ䞣
ਃࡼ䞣ᣛӊ䆒ⱘϔϾᅮഄഔDŽ᭛ӊ㋏㒳ᖙ乏㛑ֱ䆕᳝ϔϾ᭛ӊ㗙݊ᅗ㒧ᵘ᭄
ϔᅮഄഔҹ⹂ֱ㋏㒳乎߽ⱘᅠ៤ਃࡼᴖⱘ໘⧚఼ϡӮՓ⫼Ӵ㒳ὖᗉⱘਃࡼ䞣Ԛ
ᰃҡ✊Ӯ⹂ֱ㟇ᇥ᳝ϔϾ㗙᳝ৃ㛑Ͼᅮऎඳਃࡼӊ䆒 ') ڣЁ
᳝䍷ⱘᰃ䆒䅵ৢᴹⱘ㒣偠Ё䇗ᶹথ⦄ਃࡼ䞣ᰃଃϔ䳔㽕ⶹ䘧ⱘഄഔᔧ߱䆒䅵ⱘ
ᯊⱘᎹⳂᷛܕ䆌ӏᛣ᭄䞣ⱘᅮഄഔ᭛ӊ㹿䆕ᯢᰃϡᖙ㽕ࡴњᴖᑺ⡍⅞ⱘᚙމ
ϟ䳔㽕ऩ⣀໘⧚
ᇍ唤
㱑✊ᕜᇥ㽕∖᭛ӊोЁⱘ⹂ߛԡ㕂ԚᰃᇍѢ᭄᭛ӊЁⱘ⡍ᅮ䖍⬠ഄഔᮍ䴶⹂ᰃ᳝䴲
ᐌⱘ㽕∖↨བ᳝ѯ䅵ㅫᴎᶊᵘᖙ乏ҢϔϾ ᄫ㡖䖍⬠ഄഔᓔྟ䖤㸠䖭ḋг㛑Փ᪡ࡴ
᳝ᬜDŽ
ㅔऩⱘ䆓䯂
㔩㾕ⱘܹݭ
ҸҎ༈⮯ⱘ䮾ᄬ
䖭ѯᄬټњӊⱘ䆒᳝ҪӀ⡍᳝ⱘᴖᗻ䆒㕂䍋߱ˈਃࡼӊᰃᄬټা䇏ᄬټ㢃⠛
˄520˅䞠ⱘ䖭⾡ᄬ఼ټᰃϡৃˈⱘݭᑊϨ䗮ᐌᰃ≵᳝ߚऎⱘὖᗉDŽ
Ҟˈⱘӊ䛑Ꮖ㒣ᄬټ䮾ᄬ䆒䞠DŽ䖭⾡䆒ᰃৃҹ䱣ᴎ䇏পⱘˈԚᇍܹݭ᪡ৃ
㛑া㛑ҹϔϾऎഫЎऩԡᴹܹݭDŽ䖭ḋⱘ䰤ࠊԐТ≵᳝ᇍ⹀Ⲭ偅ࡼ఼ⱘ㾘ᅮ咏⚺ˈ⹀Ⲭা㛑
ҹऎЎ᳔ᇣऩԡܹݭDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Ԛᰃϡᑌⱘᰃˈ↨䍋⹀ⲬЁऎⱘᇣᴹ䇈ˈഫⱘᇣⳌᇍѢℸ㉏䆒ᴹ䇈䛑ⳌᔧⱘDŽ
↨བϔѯা᳝ .% ⱘᄬټ䚼ߚাߚЎ ഫDŽ
˄ᣝ✻䖭ḋⱘ䘏䕥ˈ៥Ӏᛇڣϔϟㅵ⧚ϔϾ 0%
ⱘ䕃Ⲭা᳝ Ͼऎ㗠ϡᰃ ˅DŽൟⱘᰃ 0% 㹿ߚЎ ഫˈⳌᇍѢ䮾ᄬⱘᇣˈՓ⫼䖭
МሎᇌⱘഫӮᇐ㟈ϡ㛑᳝ᬜ߽⫼䮾ᄬⱘ䯂乬DŽ⡍߿ᰃˈӴ㒳ⱘ᪡㋏㒳Փ⫼ᭈ᭄Ͼऎᴹᄬ
ټ᭛ӊⱘᅲ䏉ᮍ⊩䖭䞠Ꮖ㒣বᕫϡߛᅲ䰙DŽ佪ˈܜ᭛ӊⱘ᭄䞣ফࠄഫⱘ᭄䞣ⱘ䰤ࠊˈ䞡㽕
ⱘᰃᇍഫⱘϡᅠᭈՓ⫼㗠ᔶ៤ⱘݙ䚼⠛ᇐ㟈䮾ᄬ߽⫼ᬜ⥛ԢϟDŽབ ᠔⼎˖
ݙ䚼⠛
⬅Ѣ䮾ᄬ↣ԡⱘ催៤ᴀℸՓ⫼䮾ᄬⱘᬜ⥛䯂乬ⱘय़ৃ㛑㽕催Ѣ乘ᳳᆍ䞣↨䕗ᇣⱘ䮾ᄬ
㢃⠛ᰃⳂࠡৃ⫼ⱘᄬ఼ټЁ៤ᴀ↨䕗催ⱘϔ⾡ℸ៥Ӏᑨ䆹哧ࢅՓ⫼ᮄⱘᡔᴃᴹ᳝ᬜⱘՓ
⫼䮾ᄬᇍѢ᪡㋏㒳ⱘ᭛ӊ㋏㒳 IUDPHZRUN ⱘ᭛ӊ㋏㒳ˈг䆌᳔ⱘϡৠᰃ UDPHZRUN ⱘ᭛
ӊ㋏㒳᭛ӊഫП䯈㔎ᇥӏԩⱘᇍ唤DŽ
(), ӫⱘᠻ㸠⦃๗Ёˈ偅ࡼᑣ᭛ӊৃ㛑ⱘᰃҢ䴲Ӵ㒳ⱘᄬټ䆒䇏পߎᴹⱘ
↨བᴹ㞾Ѣ㔥㒰⦃๗⹀ⲬϞⱘ䱤㮣ߚऎ䖭ѯ᭛ӊϡᰃ⬅៥Ӏ䖭䞠᠔䇈ⱘӊ᭛ӊण䆂ᴹㅵ
⧚ⱘ䖭гϡᰃ៥Ӏℸゴ᠔㽕䅼䆎ⱘݙᆍ
z %DQN6ZLWFKLQJ
䮾ᄬϡᘏᰃҹ㒓ᗻⱘᔶᓣߎ⦄ݙᄬЁˈᅗ䗮ᐌᰃ᳡ࡵ఼݊ᅗ㋏㒳ЁՓ⫼䞣ⱘ䮾ᄬ㢃
⠛Ёⱘ↨䕗ᇥⱘϔ䚼ߚᴹϢ㋏㒳ݙᄬП䯈䖯㸠ഫѸᤶབ ᠔⼎䖭䞠Փ⫼ϔϾ ,2 ッষ ˄㾷
ⷕ䖛ⱘ˅ᴹ䗝ᢽ䮾ᄬЁⱘϔ义ᇘࠄ㋏㒳ݙᄬぎ䯈ⱘϔϾにষDŽ䖭㽕ᛇӏԩഄᮍᠻ㸠ᰃϡ
ৃ㛑᠔ҹ 3(, ᢑ䈵ሖϡՓ⫼䖭⾡ᴎࠊDŽ ˄,WLVQRWHDVLO\SRVVLEOHWRH[HFXWHRXWRIDQ\
EXWWKHGHIDXOWEDQNLQEDQNVZLWFKHGSDUWVVR3(,DEVWUDFWLRQVGRQRWVXSSRUWWKLV˅
ˠ˴ˡ䞠ˈ䆒ᰃ㚠ৢ㹿ᢑ䈵ⱘᇘࠄϔϾ⚍DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
z ᆍ䫭㛑
བᵰᏆ㒣⹂ᅮӊⱘϔ䚼ߚᄬ䫭䇃ˈ㋏㒳ᇚ᮴⊩ਃࡼˈⳈࠄ䖭ᄬ䫭䇃ⱘ䮾ᄬ㢃⠛পϟᴹ
ᑊϨᤶϞᏆ㒣ܹݭᑣ᭄ⱘᮄⱘ䮾ᄬ㢃⠛DŽ䖭⾡ᴎ㛑ᰃ⬉㛥Ёӏԩ㒘ӊ䛑᮴⊩↨ᢳⱘDŽ
ᔧ៥Ӏ᳝䖭ो㑻ᆍ䫭ⱘ㛑ˈ៥Ӏ㟇ᇥ㛑䅽㋏㒳⬅䚼ⱘ䌘⑤Ң㟈ੑ䫭䇃Ёᘶˈ䗮ᐌᰃ
ᮄ䮾ᄬⱘᯊ϶༅⬉⑤DŽ
䖭ᰃᆍ䫭ᮄⱘㅫ⊩乎ᑣDŽ)9V ᳝ϸϾⳌৠݙᆍⱘࡃᴀˈᑊϨݡ䖭ϸϾࡃᴀП䯈ⳌѦ㸹DŽᅗ
ⱘॳ⧚ህᰃܜᮄ≵᳝Փ⫼ⱘ䙷ϔञ䮾ᄬˈ✊ৢݡᮄϔञDŽབ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Ⳍᇍㅔऩⱘ㾷އᮍḜᰃ⹂ᅮ᠔Փ⫼ⱘ㢃⠛㒘ˈ↨བLQWHOⱘ,&+ˈᅗᬃᣕϔϾ⡍ᗻህᰃ
723B6:$3DŽ㒣䗝ᢽˈഄഔⱘԡഄഔ㒓㋏㒳ݙᄬⱘ催.%ᰃডⱘDŽ8SRQVHOHFWLRQELW
RIWKHDGGUHVVOLQHWRWKHWRS.%RIPHPRU\LVLQYHUWHG7KLVKDVWKH
HIIHFWRIPDNLQJWKHWRS.%WKHQH[WORZHU.%DQGGHFRGLQJWKHQH[WWRWRS
.%DVWKHWRS.%DVVKRZQLQ)LJXUH
z 7R)LOHRU1RWWR)LOH
݊Ё᳔ϡൟⱘᬍবᰃӴ㒳ⱘ᪡㋏㒳ⱘ᭛ӊㅵ⧚ὖᗉᰃㅵ⧚᠔᳝ၦԧⱘぎ䯈㗠᮴䳔ो
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
䞠䴶ㅵ⧚ʽ䖭ৠḋᰃ᳝⫼ⱘˈ՟བˈৠḋⱘ)'᭛ӊ㋏㒳ᬃᣕ(),ব䞣ԚᰃᄬټӊोЁⱘব䞣
ϡϔᅮᬃᣕDŽ
䖭ᑊϡᰃ)9᭛ӊ㋏㒳ⱘᔅ⚍DŽ䖭ᰃᬙᛣ䖭ḋ䆒䅵ⱘDŽ៥Ӏ᮴⊩⫼ϔϾᴎࠊᴹ⒵䎇᠔᳝ⱘ䳔
∖ˈᅗᰃЎ᭄ৃ㛑ⱘ䳔∖㗠䆒䅵ⱘDŽব䞣ⱘሲᗻ䗮ᐌϢ)'䞠ⱘ᭄᭄ᰃϡৠⱘ˖䖭䞠
ⱘ᭄ᰃ䴲ᯧ༅ᗻⱘˈ᭄ݭ᪡↨䕗乥㐕ˈ㗠Ϩ↣ⱘܹݭ᭄ⱘ᭄䞣䛑↨䕗ᇣ˄䗮ᐌা᳝
᭄ⱒⱘᄫ㡖˅
DŽ
Փ⫼䖭⾡᭛ӊ㋏㒳ᴹᬃᣕব䞣ᑊ䴲ϡ᮴ৃ㛑ˈ៤ࡳⱘᅲ䏉䛑䆕ᯢ䖭ᰃৃ㸠ⱘDŽ ϡ
䖛䖭ᑊϡᰃᖙ䳔ⱘDŽ䖭ᰃ䅽㋏㒳䆒䅵ਬᴹ䗝ᢽℷ⹂ⱘ䗨ᕘҹ⒵䎇㋏㒳ⱘ䳔∖DŽ
ᅮН᭛ӊ㋏㒳Փ⫼䖭ϔऎඳᰃЎњḍӊोˈгህᰃ)9䅽݊ᅗⱘӊो3(,਼ᳳⱘᯊ
ৃҹ䆓䯂ࠄDŽ䖭ᰃЎ3(,䇗ᑺ఼ᰃⳈ䆓䯂᭛ӊⱘˈℸ䳔㽕ϔϾ㒳ϔⱘᄬټᏗሔDŽ
z ᭛ӊ㉏ൟ
)UDPHZRUNЁՓ⫼᭛ӊ㉏ൟϢӴ㒳ⱘ᪡㋏㒳ЁՓ⫼᭛ӊ㉏ൟ䛑ᰃߎѢৠḋⱘॳ˖䛑
ᰃЎњऎ߿⾡ḋⱘᴖх᮴ᑣⱘ᭛ӊDŽ
ᇥ᭄᭛ӊᰃ)UDPHZRUN᠔⡍ֱ᳝⬭ⱘ㉏ൟDŽ↨བ3(,þݙḌÿ
ˈ';(ࡴ䕑఼ˈ';(þݙḌÿDŽ
䖭䞠ᰃ⫼᭛ӊ㉏ൟᴹᣛߎ᭛ӊⱘৃᠻ㸠ᗻˈ3(,0V';(偅ࡼˈ(),ᑨ⫼ᑣDŽ
བϞ᭛Ё᠔䗄ˈ)UDPHZRUNЁोᰃϡܕ䆌ᄤⳂᔩᄬⱘDŽⳌডⱘᰃˈ䖭ܕ䆌᭛ӊࣙोˈ
䖭Փᕫϔѯߚሖⱘ᭛ӊ㋏㒳ϡᯢⱑ䖭⾡⡍ᗻDŽ䇋খ䯙ᴀゴĀ&DSVXOHVāᇣ㡖ⱘ՟ᄤDŽ
᭛ӊϡ⹂ᅮᅮНЎӏԩ㒧ᵘˈ᠔ҹৃ㛑᳝ϸ⾡㉏ൟ˖IUHHIRUPUDZDŽ)UHHIRUP᭛ӊᰃҹ
VHFWLRQЎᴀऩԡᄬˈⱘټ㗠UDZैᰃ䖲㓁ⱘѠ䖯ࠊ᭛ӊⱘ᭄DŽՓ⫼䖭ϔ⾡ϸ⾡Ḑᓣᰃৃ
䅽⫼᠋ᅮНⱘDŽ
䖭ӊोण䆂*HW1H[W)LOHܕ䆌䗮䖛ᠿᦣोᴹ⹂ᅮᶤѯ⡍ᅮ㉏ൟ᭛ӊ˄㗙ӏᛣ㉏ൟ˅DŽ
z 6HFWLRQ㉏ൟ
᭄IUDPHZRUN䞠ⱘ᭛ӊ䛑⬅VHFWLRQV㒘៤DŽ䞣VHFWLRQ㉏ൟᅮНⱘϡৠⱘܗ㋴ৃ㛑
Ꮖ㒣ᄬټњ᭛ӊ䞠㉏ԐѢ*HW1H[W)LOHӊोण䆂гᦤկњ*HW6HFWLRQVᴹᠿᦣVHFWLRQDŽ
6HFWLRQߚЎϸ㉏ˈᇕ㺙VHFWLRQVHFWLRQDŽᇕ㺙VHFWLRQࣙ݊ᅗVHFWLRQˈ㗠VHFWLRQ
≵᳝DŽ
䆒䅵ⱘᯊˈVHFWLRQⱘ䆒䅵ᰃ䴲ᐌㅔऩⱘDŽা䳔㽕ᅗⱘ㉏ൟᅗᄬ఼ټЁⱘ䭓ᑺˈ᳝
ⱘVHFWLRQ䖬᳝ᠽሩ༈ᷛDŽ
˄⡍߿ᰃՓ⫼*8,'V˅
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
᱂䗮ⱘᄤഫ㉏ൟ
Ƶϔ⾡ⱘ㉏ൟᰃЎњ↣ϔϾৃᬃᣕⱘᠻ㸠Ḑᓣ˖3(ڣǃϢԡ㕂᮴݇ⱘҷⷕ˄3,&˅
ˈڣҹঞㅔ⋕ⱘᠻ㸠˄7(˅DŽ3,&ҷⷕᰃϔ⾡ৃ䞡ᮄ䚼㕆ҷⷕˈ㛑ӏԩഄഔᠻ㸠˄ফᇍ唤
ⱘ䰤ࠊ˅DŽ䖬᳝ϔϾϧ⫼ⱘ VHFWLRQ㉏ൟᰃЎݐᆍഫ˄&60˅ⱘৃᠻ㸠ᑣֱ⬭ⱘDŽ
Ƶ㱑✊ϡᰃᖙ䳔ⱘˈЎњࡴ⫼᠋টདᮍᓣⱘㅵ⧚ⱘ᭛ӊˈᅮНњϔ⾡⠜ᴀ᭛ӊৡഫDŽ
Ƶӊोڣᰃϔ⾡㛑ᡞोᄬټ᭛ӊЁⱘഫ㉏ൟ
Ƶ㞾⬅ᔶᗕⱘᄤ㉏ൟ*8,'HG㻌ⱘഫ᭛ӊЁⱘᛣНⳌৠDŽ
᭛ӊⱘ᪡
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ߚ⌒఼བԩ䆩⫼ोǃ᭛ӊഫ˛
';(ߚ⌒఼ⱘЏ㽕ᎹᰃЎњᇏᡒߚ⌒偅ࡼDŽߚ⌒఼Փ⫼ӊ᭛ӊ⸔ᶊᵘᴹᅠ៤䖭ѯ
ࡼDŽ䗮䖛䖭ḋˈخᅗᦤկњ݇ѢབԩՓ⫼ )9Vǃ᭛ӊഫⱘϔ⾡ᴖⱘ՟ᄤDŽ㋏㒳ⶹ䘧ⱘ↣
ϔϾ )9 䛑ᰃ䗮䖛ϔϾण䆂ᴹ㸼䖒ⱘDŽѢ䖭Ͼџᅲˈߚ⌒఼⬅׳ㄝᕙϔ⾡ᮄ⠜ᴀⱘण䆂˄䗮䖛
(),ⱘ 5HTXHVW3URWRFRO1RWLI\ ᳡ࡵ˅ᴹᇏᡒᮄोDŽ3(, 䰊↉Ёথ⦄ⱘोˈ䗮䖛 +2% Ӵ䗦㒭ߚ⌒
఼ⱘˈߚ⌒఼Ӯ߱ྟ࣪㞾䑿ⱘᯊ䖯㸠໘⧚DŽᔧߚ⌒఼ᕫࠄϔϾᮄोߎ⦄ⱘ䗮ⶹᯊˈᅗՓ⫼
)ULPZDUHYROXPHⱘण䆂ᴹᠿᦣ ';(偅ࡼ㉏ൟⱘ᭛ӊDŽᔧᅗᡒࠄњ䖭ѯ᭛ӊˈᅗህӮ᧰㋶ձ䌪
ᗻ݇㋏ഫDŽҪՓ⫼䖭ѯഫⱘֵᙃЎ䖭Ͼ偅ࡼ䆒ᅮϔϾߚ⌒乎ᑣDŽᔧߚ⌒఼އᅮߚ⌒ϔϾ偅ࡼᠻ
㸠ˈᅗҢձ䌪㸼䖒ᓣⳌ݇ⱘ䙷Ͼ᭛ӊЁ䇏প 3(&2))ڣഫDŽ✊ৢߚ⌒䖭Ͼ偅ࡼᠻ㸠DŽ
ݙ䚼ⱘḐᓣ
㱑✊ )UDPHZRUN ⱘⳂⱘᰃᬃᣕᇚӏᛣ᭄䞣ⱘ᭛ӊ㋏㒳ˈᅗᓔᴎⱘᯊᖙ乏ձ䌪ѢϔϾⱘ
᭛ӊ㋏㒳ˈᠡৃ㛑ᡒࠄਞ䆝ᅗབԩ䆓䯂݊Ҫ᭛ӊ㋏㒳ⱘഫDŽ䖭ህᰃ᠔䇧ⱘ )UDPHZRUN ᭛ӊ㋏
㒳Ḑᓣˈгህᰃ ))6
ᴀḐᓣ
ӊो㹿ᅮНЎࣙϔѯ᭛ӊⱘϔѯ㒓ᗻ᭄ഫDŽ᭛ӊ᳝ϔϾ༈ˈ᭄ԧˈϔϾĀሒᏈāDŽ
ӊोҹ༈䚼᳔Ԣഄഔᓔྟˈ䖭Ͼ༈䚼ࣙњϔϾ *8,'ǃोᇣҹঞ݊ҪⳌ᭄݇ⱘሲᗻDŽ
⬅Ѣोⱘ༈䚼ᓔྟѢ᳔Ԣⱘഄഔˈ᠔ҹ㛑ㅔऩᯢ⹂ഄᡒࠄᅗⱘԡ㕂DŽ
᭛ӊोЁҢो༈䚼㒧ᴳⱘԡ㕂ᓔྟ䖲㓁ഄᄬټDŽ᭛ӊ༈ࣙৡᄫ˄*8,' ǃᇣǃ㉏ൟˈ
ሲᗻǃᅠᭈᗻ᷵偠⢊ᗕDŽ䖭Ͼᇣᣛⱘᰃ᭛ӊⱘᇣDŽ
᭛ӊ㋏㒳ᕫҹ䗮䖛ᅠᭈᗻ᷵偠ᴹ⹂䅸᭛ӊᰃ৺ߎ䫭DŽሲᗻ߭ࣙ䎳䖭Ͼ᭛ӊⳌ݇ⱘ⾡ᷛ
ᖫDŽ᳔䞡㽕ⱘᷛᖫᰃ᭛ӊⱘ᭄䚼ߚⱘᇍ唤˄ϡᰃ᭛ӊ༈˅DŽ䖭ᅲ䰙Ϟᰒ⼎њ䰸њ༈ҹ䳔㽕
䏇䖛ⱘᄫ㡖᭄ˈ䖭Փᕫ᭄ऎҹ䖍⬠ᓔྟᓔྟDŽᶤѯⳈᇘࠄ⹀ӊⱘ᭛ӊ䳔㽕䖭ḋⱘᮍᓣDŽ
Ёᇍ唤ᮍᓣ⎉ⲪњҢ ᄫ㡖 . ᄫ㡖ⱘ䚼ߚ ⱘᐖDŽ
⢊ᗕֵᙃᰃᇚ㹿⫼ᮄ᪡ⱘϔ䚼ߚDŽᮄ᪡ᴀ䋼Ϟᴹ䆆ህᰃߴ䰸ݭ᪡DŽ⢊ᗕֵ
ᙃⱘⳂⱘᰃֱ䆕䖭Ͼ䖛ⱘॳᄤᗻDŽгህᰃˈᮄЁⱘӏԩ⢊ᗕϟˈ㗕ⱘ᭛ӊᮄⱘ᭛ӊ᳝
Ϩা᳝ϔϾᰃ᳝ᬜⱘDŽℸᅲ⦄؛ᅮϡ᪺䰸ᭈϾऎഫⱘᚙމϟˈၦԧ㛑䕏ᵒഄҢϔϾؐব៤
ⱘؐ˄བҢ ࠄ ˅ˈᇍ⦄ⱘܗӊᴹ䇈ˈ䖭ᰃᇍⱘDŽ)' ᪺䰸ⱘ⢊ᗕ䗮ᐌ㹿䅸Ўᰃ )' ⱘᵕ
࣪DŽϔϾ )' ⱘᵕֵ࣪ᙃ㹿ᄬټᅗⱘ༈䚼DŽ
)9 ⱘㅵ⧚
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
᭛ӊोЁҢᑩ䚼˄᳔Ԣഄഔ໘˅ᓔྟˈ✊ৢϔϾϢϔϾ䖲˄ܕ䆌ᇍ唤㗠ѻ⫳ぎ䱭˅ˈ
Ⳉࠄ乊䚼ⱘ᭛ӊDŽᮄⱘ᭛ӊӮࠄݭПࠡ߮ⱘܹݭ᭛ӊԡ㕂ПϞDŽߴ䰸᭛ӊˈϡӮゟࠏᓩ䍋Ϟ䴶
ⱘ᭛ӊԡ㕂থ⫳ҢϞࠄϟⱘবࡼDŽ᭛ӊӮᬍব༈䚼ⱘߴ䰸ᷛᖫԡüüҢ᪺䰸⢊ᗕবЎ䴲᪺䰸⢊
ᗕ˄䆥⊼˖ܹݭ᭛ӊᯊϡӮݭ᪺䰸ᷛᖫԡˈे䆹⢊ᗕԡⱘ߱ྟ⢊ᗕᰃ᪺䰸⢊ᗕˈ䗮ᐌ )ODVK
ⱘᶤϔԡ᪺䰸ᯊ䆹ԡಲࠄ ˈা᳝ ܹݭᯊᠡবЎ ˅DŽ
ᔧぎ䯈ϡ䎇㗠ϡ㛑ડᑨⱘݭ䇋∖ˈড়ᑊⱘ᪡֓Ӯѻ⫳DŽ䖭᳝⚍㉏ԐѢᮽᳳⱘ᭛ӊ㋏㒳
VYLQWDJH ˈ᳝ⴔㅔऩˈৃ乘ᳳⱘᇣ䰤ࠊˈԢऎഫो⥛ⱘ⡍⚍DŽ≵᳝ϔ⾡ऩϔⱘϧ䮼
ᮍᓣএড়ᑊ )9V䗝ᢽϔ⾡ᴎࠊⱘᯊ䆒䅵㗙ᖙ乏ᴗ㸵ৃ⫼䌘⑤ǃᆍ䫭㛑㽕∖݊ᅗ㋴DŽ
ϔϾⳌᔧㅔऩⱘᓣህᰃᣋ䋱≵᳝ߴ䰸ⱘ᭛ӊࠄݙᄬⱘ㓧఼ކЁᓎゟϔϾᮄⱘ )9 ⱘڣDŽ᪺
䰸ॳ᳝ⱘ )9✊ৢܹݭᮄⱘ )9 ڣ䖭ϡᰃϔ⾡ᆍ䫭㾷އᮍḜˈԚᇍᕜᑨ⫼ᰃৃҹফⱘDŽ
ϔ⾡ᴎࠊᰃֱᄬϸϾӊोˈҹĀЦЧāⱘᮍᓣᴹՓ⫼䖭ϸϾӑ䖭ᰃϔ⾡ᆍ䫭ⱘᮍᓣ
؛䆒ℸ⾡ᚙމϟ偅ࡼⶹ䘧ાϾोᰃᮄⱘ˅ˈԚᰃ៤ᴀ催њDŽᓔথ㗙Ӏৃҹᛇߎᕜ⾡݊ᅗ
ⱘᮍḜᴹDŽ))6 ⢊ᗕⱘ᭄ৃҹ⫼ᴹᅲ⦄ᅝܼⱘᮄ㗙ࠋⱘݭᴎࠊDŽ
㋏㒳᭛ӊПϟ
ᬃᣕ᪡㋏㒳ⱘ᭛ӊ㋏㒳ⱘ偅ࡼᑣ㛑ᇚᣝ✻ഫ䆒ᇘ៤Ўⱘ᭛ӊⱘᮍᓣㅵ⧚DŽ䖭Ͼ
Ḛᶊ )UDPHZRUN гᰃϔḋⱘDŽ
偅ࡼⱘේᷜ
ϔϾӊोᰃЎӊोण䆂˄)LUHZDUHYROXPHSURWRFRO˅ᴹᰒ⼎ⱘDŽӏԩ᭛ӊ㋏㒳䛑
ৃҹᰒ⼎䖭Ͼण䆂ˈҢ㗠߯ᓎϔϾᮄⱘ᭛ӊोDŽ
)UDPHZRUN))6ᅮНњϔ༫ষˈᅗܕ䆌ᓎゟϔϾ偅ࡼේᷜˈབ DŽՓᕫᰒ⼎᭛ӊोේ
ᷜⱘ偅ࡼᑣϡ䳔㽕↣ϔϾ䛑䞡ᮄᅲ⦄DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ӊोⱘഫষ
ᴀゴЁ)UDPHZRUNষᕜ㉏ԐѢ᪡㋏㒳ⱘষˈ⡍߿ᰃ )9%ষህ䖥Ѣ᪡㋏㒳
Ϟⱘߚऎˈাϡ䖛䖭䞠ᰃഫⱘὖᗉDŽ
Ƶ,2᪡˖䆒䗮䖛䇏ݭ᪡䖭ḋⱘᴀࡳ㛑ᴹᅠ៤ҪӀⱘᎹDŽ
Ƶ᪺䰸˖ড়ᑊ᪡ⱘϔϾ䚼ߚህᰃՓ⫼(UDVH%ORFNV᪺䰸ऎഫDŽ
ব䞣
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
&DSVXOH
&DSVXOHV ⱘ㒧ᵘ
&DSVXOHV ⬅ϔϾϾ༈ӊो㒘៤ˈা᳝ӊोӮখϢ䞡ᮄᓩᇐⱘ䖛DŽ༈˄ᷛ䆄ԡ˅
ᰃ⫼Ѣ߯ᓎ䗮⫼ⱘ &DSVXOHV ໘⧚ᑣDŽℸˈᅗࣙ᠔ FDSVXOH˄㛑㹿ӏᛣ᭄䞣ⱘ䇁㿔ᅮ
ԡ˅ⱘܹষ˄՟བ݇Ѣݙᆍⱘⷁ䭓ⱘ 81,&2'( ᦣ䗄˅ᴎࠊܕ䆌 FDSVXOH 㹿ߚࡆ៤Ͼഫৢ
㛑䞡㒘DŽ
䞡㽕ⱘϔ⚍ˈՓ⫼䆒ᯊˈ&DSVXOHV ࣙᣀϔϾᇍ䆒ᦣ䗄˄䆒ⱘᦣ䗄ϡࣙᣀ䏃ᕘ
ֵᙃ˅ⱘᦣ䗄DŽ䖭ᰃᕜ᳝ᖙ㽕ⱘˈৃҹ䅽ᓔথҎਬϡձ䴴ⶹ䘧䕑᳝䆹偅ࡼᑣ RSWLRQ520
वᦦῑⱘԡ㕂䖯㸠ᮄDŽ䆒ᦣ䗄ヺᷛ䆚њ䆒ˈᮄᑣৃҹ݇㘨ࠄϔϾ㗙Ͼ㋏㒳Ёℷ
㽕ᮄⱘ䆒DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
䗮䖛䞡ਃӴ䗦
ϔᮺ࠹ᥝҪⱘ༈䚼ˈ&)9ᇚ㹿ᄬټϔϾϡৃѸᤶⱘݙᄬऎඳ˄Ўњֱ䆕䞡ਃⱘᯊᄬ
5$0 䞠˅ˈབ ˄E
ᔧ UHVHW䇋∖ࠄᴹᯊˈᭈϾ㋏㒳ⱘࠊҢ᪡㋏㒳ಲӴ㒭 (),ILUPZDUHDŽ᠔ҹˈ᪡㋏㒳
㽕䖤㸠ⱘ᪡ㄝৠϢ 6 ࠄ 6$&3, 䕀ᤶ᠔ⱘخ᪡˄䕃ਃࡼϡֱ⬭ݙᄬ᭄˅DŽ⦄ ILUPZDUH
ᢹ᳝њᭈϾ㋏㒳DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ⱘϔ⾡ᮍᓣⱘ䞡ਃ
؛䆒ᡒࠄϔϾഄഔˈ㒧ᵘഄഔᰃ᳝ᬜⱘDŽབᵰᰃ᮴ᬜⱘˈ߭ਞϔϾ⢊ᗕᑊϨϢ 6 ㄝᬜ
UHVHW ᓔྟњDŽ
7KH&DSVXOHLQ';(
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
бゴ
';( ⸔˖⸔Ḛᶊǃ
䇗ᑺ఼䆒偅ࡼ
៥ϡᆇᗩ䅵ㅫᴎˈ៥ᆇᗩⱘᰃབᵰ≵᳝њ䅵ㅫᴎDŽ
üü㡒㧼ܟ.䰓㽓㥿
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
';( ⸔Ḛᶊ
DXE ⸔Ḛᶊ᳝ৃ⿏ỡⱘ⡍⚍ˈᅗϡձ䌪Ѣ⡍ᅮⱘ໘⧚఼ǃ㢃⠛㒘㗙ऩϾᑇৄDŽᅗ
᳝ҹϟ⡍ᕕ˖
ƵDXE ⱘ⸔Ḛᶊⱘ߱ྟ࣪ҙҙձ䌪Ѣ HOB 䫒㸼ˈ䖭⾡ㅔऩⱘձ䌪݇㋏ᛣੇⴔᅗϡӮ䇗⫼
ӏԩҹࠡⱘ䰊↉Ё߯ᓎⱘ᳡ࡵˈℸϔᮺ HOB 䫒㸼㹿Ӵ䗦㒭 DXEˈПࠡⱘ᠔᳝䰊↉Ёⱘ᭄
᳡ࡵ䛑Ӯ㹿䞞ᬒDŽ
ƵDXE 䰊↉ϡՓ⫼⹀㓪ⷕⱘഄഔぎ䯈DŽℸ DXE ⱘ⸔Ḛᶊৃҹ⠽⧚ݙᄬⱘӏԩԡ㕂㹿
ࡴ䕑ˈ㗠Ϩ᮴䆎ݙᄬⱘӏԩഄᮍˈ᮴䆎ӊो˄firmware volume˅ԡѢ໘⧚఼ⱘӏԩഄഔ
ぎ䯈ˈDXE ⱘҷⷕ䛑㛑㹿ℷ⹂ᠻ㸠DŽ
ƵDXE ⱘ⸔Ḛᶊϡࣙᣀӏԩ⡍ᅮ໘⧚఼ǃ⡍ᅮ㢃⠛㒘ǃ⡍ᅮᑇৄⱘֵᙃDŽЎˈDXE ⱘ
⸔ḚᶊᰃҢ㋏㒳⹀ӊᢑ䈵ߎᴹˈ䗮䖛ϔ㋏߫ protocol ষᶊᵘᅲ⦄ⱘDŽ䖭ѯ protocol ষ
⬅ϔ㋏߫ DXE 䆒偅ࡼ߯ᓎߎᴹⱘˈ䖭ѯ偅ࡼষӮ㹿 DXE 䇗ᑺ఼䇗⫼DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
DXEⱘ⸔Ḛᶊ߯ᓎEFI㋏㒳㸼ҹঞϔ㋏߫ⱘEFIਃࡼ᳡ࡵEFI䖤㸠ᯊ᳡ࡵDŽDXE⸔Ḛᶊг
ࣙᣀњDXE䇗ᑺ఼ˈ䇗ᑺ఼ⱘЏ㽕⫼ᰃথ⦄ᑊᠻ㸠ᄬټӊो(firmware volume)ЁⱘDXE
䆒偅ࡼDŽDXE䆒偅ࡼⱘᠻ㸠乎ᑣপއѢϔ㒘ৃ䜡㕂ⱘձ䌪݇㋏ᦣ䗄᭛ӊ˄খ㗗DXE䇗ᑺ఼
ϔ㡖˅ҹঞ偅ࡼЁⱘձ䌪ẔᶹDŽӊो᭛ӊḐᓣܕ䆌ձ䌪㸼䖒ᓣ䱣ৠৃᠻ㸠ⱘDXE偅ࡼڣϔ
䍋㹿ᠧࣙDŽDXE偅ࡼ⊓⫼PE/COFFڣḐᓣˈℸˈDXE䇗ᑺ఼гᖙ乏ࣙᣀPE/COFFḐᓣ㾷䞞
఼⫼ᴹࡴ䕑ᑊᠻ㸠DXE偅ࡼDŽ
DXEḚᶊ㒧ᵘгᖙ乏ㅵ⧚ϔϾহᶘ᭄ᑧDŽহᶘ᭄ᑧᰃϔϾϾহᶘⱘ߫㸼ˈৠᯊˈ
হᶘᰃϔϾϾprotocol GUIDsˈ䖭Ͼprotocol GUIDs䛑ᰃ⣀ϔ᮴ѠⱘDŽϔϾহᶘᰃϔ㋏߫
᳡ࡵⱘ䕃ӊᢑ䈵DŽϔѯহᶘᴹ㞾I/O䆒ˈ݊Ҫⱘᢑ䈵㞾ϔ㋏߫ⱘ䗮⫼ⱘ㋏㒳᳡ࡵDŽϔϾൟⱘ
হᶘࣙᣀϔ㋏߫APIsϔѯ᭄↉DŽ↣Ͼprotocol䛑⫼ϔϾGUIDᴹᷛ䆚DŽDXEḚᶊ㒧ᵘᦤկњ
ϔѯ᳡ࡵ⫼ᴹহᶘ᭄ᑧЁ⊼ݠprotocolDŽЎDXE䇗ᑺ఼Ӯᠻ㸠DXE䆒偅ࡼˈϔѯࣙᣀ
ᑇৄ⡍ᗻֵᙃⱘprotocolৃҹ㹿⏏ࡴ䖯হᶘ᭄ᑧˈᑊ᳔㒜ৠDXE Architectural Protocolsϔ
䍋㹿DXE䇗ᑺ఼䇗⫼DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Hand-Off Block(HOB) 䫒㸼
9 3 HOB List
';(ᶊᵘ3URWRFROV
DXEⱘḚᶊ㒧ᵘᰃҢᑇৄ⹀ӊᢑ䈵ߎᴹˈᑊ⬅ϔ㋏߫DXEᶊᵘprotocol㒘៤ⱘDŽDXEḚᶊ
㒧ᵘᇚ䖭ѯprotocolߚ៤EFIਃࡼ᳡ࡵEFI䖤㸠ᯊ᳡ࡵDŽҢӊोЁࡴ䕑ⱘDXE䆒偅ࡼ߯ᓎњ
DXEᶊᵘprotocolDŽҢ䖭Ͼ䆒䅵Ё៥ӀৃҹⳟߎˈDXEḚᶊ㒧ᵘϔᓔྟᖙ乏ࣙ䎇ⱘ᳡ࡵ
⫼Ѣࡴ䕑ਃࡼDXE䆒DŽ
DXEḚᶊ㒧ᵘⱘHOB䫒㸼ᖙ乏ࣙ㋏㒳ݙᄬⱘᦣ䗄ֵᙃ㟇ᇥϔϾӊोDŽHOB䫒㸼Ёⱘ
㋏㒳ݙᄬᦣ䗄ֵᙃ㹿⫼߱ྟ࣪EFI᳡ࡵDŽᭈϾ㋏㒳ᖙ乏䖤㸠ऩ໘⧚఼ϟˈᑊϨ≵᳝Ёᮁ᳡ࡵ
ⱘᑇഺ⠽⧚ݙᄬᓣ(flat physical mode)DŽ䗮䖛HOB㹿Ӵ䗦㒭DXE䇗ᑺ఼ⱘӊोᖙ乏ࣙᣀϔ
Ͼা䇏ⱘFFS偅ࡼˈ䖭Ͼা䇏FFS偅ࡼ⫼ᴹ㾷ᵤᑊ᧰㋶ᣛᅮӊोЁⱘձ䌪ᦣ䗄᭛ӊDXE䆒
偅ࡼDŽᔧϔϾ偅ࡼ㹿ᡒࠄˈᑊϨձ䌪݇㋏㹿⒵䎇ᯊˈDXE䇗ᑺ఼ህӮՓ⫼PE/COFF㾷ᵤ఼ࡴ䕑
ᑊ䖤㸠䖭ϾDXE偅ࡼDŽDXEᶊᵘprotocolӮ㹿ᮽᳳⱘDXE偅ࡼ߯ᓎߎᴹˈҹ֓ᰮⱘDXE⸔
㒧ᵘ㛑߯ᓎߎܼ䚼ⱘEFIਃࡼ᳡ࡵEFI䖤㸠ᯊ᳡ࡵDŽ9.4ᰒ⼎њϔϾ㹿Ӵ䗦㒭DXE䰊↉ⱘHOB
䫒㸼DŽDXE⸔ᶊᵘՓ⫼DXEᶊᵘprotocol߯ᓎњEFI㋏㒳㸼ˈEFIਃࡼ᳡ࡵ㸼EFI䖤㸠ᯊ᳡ࡵ㸼DŽ
9.4ࣙᣀњDXE䰊↉᠔᳝ⱘЏ㽕㒘ӊDŽᎺ䖍ⱘEFIਃࡼ᳡ࡵ㸼DXE᳡ࡵ㸼㹿ߚ䜡EFIਃࡼ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
᳡ࡵݙᄬЁDŽ䖭⾡ߚ䜡ᮍᓣ㸼ᯢˈEFIਃࡼ᳡ࡵ㸼DXE᳡ࡵ㸼᪡㋏㒳ਃࡼৢӮ㹿䞞ᬒᥝDŽ
ে䖍ⱘEFI㋏㒳㸼EFI䖤㸠ᯊ᳡ࡵ㸼ᰃߚ䜡EFI䖤㸠ᯊ᳡ࡵݙᄬЁⱘˈᅗӀӮ᪡㋏㒳䖤㸠䰊
↉偏⬭ݙᄬЁDŽ
9.4ЁᎺ䚼ⱘDXEᶊᵘprotocolᰃ⫼ᴹ߯ᓎEFIਃࡼ᳡ࡵⱘDŽDXE⸔㒧ᵘˈDXE䇗ᑺ఼ˈ
ҹঞᎺ䖍ⱘprotocolӮ᪡㋏㒳䖤㸠ᯊ㹿䞞ᬒᥝDŽে䖍ⱘDXEᶊᵘprotocolᰃ⫼ᴹ߯ᓎEFI
䖤㸠ᯊ᳡ࡵⱘDŽ䖭ѯprotocolӮ᪡㋏㒳䖤㸠䰊↉ҡ✊偏⬭ݙᄬЁDŽЁ䯈ⱘ䙷Ͼ䖤㸠ᯊᶊ
ᵘprotocol↨䕗⡍⅞DŽ䖭ϾprotocolӮPOSTࠄ᪡㋏㒳䖤㸠䰊↉ˈ⫼Ѣᇚ䖤㸠ᯊ᳡ࡵⱘഄഔ
Ң⠽⧚ഄഔ䕀ᤶࠄ㰮ᢳഄഔぎ䯈DŽᔧഄഔ䕀ᤶᅠ៤ৢˈ䖭ѯ䖤㸠ᯊ᳡ࡵᇍѢPOST䖛ЁⱘBIOS
ᴹ䇈ᇚᰃϡৃ䆓䯂ⱘDŽ
ҹϟᰃϔѯDXEᶊᵘprotocolⱘㅔ㽕ҟ㒡˖
Ƶᅝܼᶊᵘprotocol˖⫼ѢDXE⸔ᶊᵘ偠䆕ӊोЁⱘ᭛ӊᰃ৺ᰃৃ⫼ⱘDŽ
Ƶ CPUᶊᵘprotocol˖ᦤկ⫼Ѣㅵ⧚㓧ᄬˈЁᮁˈ໘⧚఼乥⥛ᘶˈѢ໘⧚఼ⱘᯊ䩳
ᶹ䆶᳡ࡵDŽ
Ƶ㡖ᢡ఼ᶊᵘprotocol˖ᦤկ䅽໘⧚఼᱖ذᑊㄝᕙϔ↉ᯊ䯈ⱘ᳡ࡵDŽ
Ƶ ᯊ䩳ᶊᵘprotocol˖ᦤկDXE⸔㒧ᵘЁՓ⫼ⱘheartbeat timerЁᮁ᳡ࡵDŽ
Ƶ BDSᶊᵘprotocol˖ᦤկϔϾDXE䰊↉㒧ᴳᯊⱘܹষഄഔˈᅗӮ᠔᳝DXE䆒偅ࡼ
ᅠ៤ࡴ䕑ৢ㹿䇗⫼DŽᅗ䋳䋷㋏㒳䖤㸠ҢDXE䰊↉ࠄBDS䰊↉ᯊˈᓎゟࠊৄᑊՓਃࡼ᳡ࡵᓔྟ䖤
㸠DŽ
Ƶ Watchdog Timerᶊᵘprotocol˖ᦤկ⫼ѢਃࡼЁℶᑇৄⲥ㾚ᯊ䩳ⱘ᳡ࡵDŽ
Ƶ䖤㸠ᯊᶊᵘprotocol˖ᦤկ䖤㸠ᯊ᳡ࡵҢ⠽⧚ഄഔ䕀ᤶࠄ㰮ᢳഄഔⱘ᳡ࡵⱘ䖤㸠ᯊ偅
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ࡼDŽ
Ƶব䞣ᶊᵘprotocol˖ᦤկ⦃๗ব䞣䇏পЈᯊব䞣ⱘᄬټ᳡ࡵDŽ
Ƶݭব䞣ᶊᵘprotocol˖ᦤկ∌Йֱᄬব䞣ⱘᄬټ᳡ࡵDŽ
Ƶऩϔ䅵᭄ᶊᵘprotocol˖ᦤկ⫼ѢDXE⸔㒧ᵘⱘϔϾ64ԡ䅵఼᭄DŽ
Ƶ 䞡㕂ᶊᵘprotocol˖ᦤկ⫼Ѣ䞡㕂݇䯁㋏㒳ⱘ᳡ࡵDŽ
Ƶ⢊ᗕⷕᶊᵘprotocol˖ᦤկ໘⧚DXE⸔㒧ᵘDXE䆒偅ࡼ䖨ಲⷕⱘ᳡ࡵˈ䖨ಲⱘ⢊
ᗕⷕৃҹ㹿ᄬټ᮹ᖫЁ㗙থ䗕㒭݊Ҫ䆒DŽ
Ƶᅲᯊᯊ䩳ᶊᵘprotocol˖ᦤկ䆒㕂ᔧࠡᯊ䯈᮹ᳳⱘ᳡ࡵˈৠᯊгࣙᣀৃ䗝ᢽⱘ⫼Ѣ
䝦ࡳ㛑ⱘ䅵ᯊ఼
(), ㋏㒳㸼
DXE⸔㒧ᵘ߯ᓎњEFI㋏㒳㸼ˈ㋏㒳㸼ᰃ⬅᠔᳝DXE䆒偅ࡼBDS䰊↉䇗⫼ⱘৃᠻ㸠
݅ڣৠ䇗⫼ⱘDŽᅗࣙᣀ㹿DXE⸔㒧ᵘ᠔᳝DXE䆒偅ࡼ䇗⫼ⱘ᠔᳝㒘ӊ᳡ࡵDŽ9.5ᄬټ
EFI㋏㒳㸼ⱘ⾡ৃ⫼㒘ӊDŽ
DXE⸔㒧ᵘ߯ᓎњEFIਃࡼ᳡ࡵˈEFI䖤㸠ᯊ᳡ࡵˈҹঞѢDXEᶊᵘprotocolⱘ⾡᳡ࡵDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
EFI㋏㒳㸼ᦤկᑇৄϞ᠔᳝ৃ⫼䆒䆓䯂ᮍ⊩ˈҹঞϔ㋏߫ⱘEFI䜡㕂㸼DŽEFI䜡㕂㸼ᰃϔϾৃᠽሩ
ⱘ㸼䲚ˈ䖭ѯ㸼ᦣ䗄њᑇৄϞⱘ䜡㕂ֵᙃˈࣙᣀDXE᳡ࡵˈHOB䫒㸼ˈACPIˈSMBIOSSAL
㋏㒳㸼DŽ䖭Ͼ㸼䲚䖬ৃҹᴹᠽሩ⾡ᮄⱘ㉏ൟⱘ㸼DŽϢℸৠᯊˈӏԩৃᠻ㸠ৃڣҹ䗮䖛
EFIਃࡼ᳡ࡵ㸼ЁⱘProtocol Handle Services䆓䯂হᶘ᭄ᑧ᠔᳝Ꮖ⊼ݠDXE偅ࡼ㸼Ёⱘ
protocolষDŽ
ᔧ᪡㋏㒳䖯ܹ䖤㸠ᯊ⢊ᗕҹৢˈ䖭ѯহᶘ᭄ᑧˈ⦄᳝ⱘࠊᮍ⊩ˈEFIਃࡼ᳡ࡵDXE
偅ࡼᦤկⱘ⾡᳡ࡵ䛑Ӯ㹿ЁℶDŽ䞞ᬒⱘݙᄬぎ䯈Ӯ⬭㒭᪡㋏㒳Փ⫼ˈEFI㋏㒳㸼ˈEFI䖤㸠ᯊ
᳡ࡵ㸼ˈҹঞ㋏㒳䆒㕂㸼Ӯᄬᑊҡ✊㹿⫼Ѣ᪡㋏㒳ⱘ䖤㸠ᯊ⦃๗ЁDŽᔧ✊Դгৃҹ䗝ᢽᇚ
᠔᳝ⱘEFI䖤㸠ᯊ᳡ࡵҢ⠽⧚ഄഔ䕀ᤶ៤᪡㋏㒳ㅵ⧚ϟⱘ㰮ᢳഄഔDŽഄഔ䕀ᤶা㛑䖤㸠ϔDŽ
(), ਃࡼ᳡ࡵ㸼
ҹϟᰃEFIਃࡼ᳡ࡵ㸼ⱘ⾡᳡ࡵⱘㅔ㽕ҟ㒡˖
Ƶ ӏࡵӬܜ㑻᳡ࡵ˖ᦤկⱘ᳡ࡵ⫼Ѣᦤ催䰡ԢᔧࠡⱘӏࡵӬܜ㑻߿DŽ䖭⾡Ӭܜ㑻ᴎࠊৃ
ҹ⫼Ѣᅲ⦄ㅔऩⱘ䫕ҹঞՓ䅵ᯊ఼Ёᮁϔᇣ↉ᯊ䯈DŽ䖭Ͼ᳡ࡵձ䌪ѢCPUᶊᵘprotocolDŽ
Ƶ ݙᄬ᳡ࡵ˖ᦤկߚ䜡䞞ᬒ4Kⱘ义䴶ˈҹঞߚ䜡䞞ᬒҹᄫ㡖Ў᳔ᇣऩԡⱘݙᄬ∴ㅵ⧚
᳡ࡵDŽᅗ䖬ᦤկњ㦋পᔧࠡᑇৄⱘ⠽⧚ݙᄬߚ䜡ᇘ㸼DŽ
Ƶ џӊ䅵ᯊ఼᳡ࡵ˖ᦤկ⫼Ѣ߯ᓎџӊˈ㾺থџӊˈᶹ䆶џӊ⢊ᗕˈㄝᕙџӊ݇䯁џ
ӊⱘ᳡ࡵDŽ݊Ёϔ㉏џӊᰃ䅵ᯊ఼џӊˈ䅵ᯊ఼џӊᬃᣕ⾡乥⥛ⱘ਼ᳳᗻ䅵ᯊ఼ˈϔᇣ↉
ㄝᕙᯊ䯈ⱘџӊDŽ䖭ѯ᳡ࡵձ䌪ѢCPUᶊᵘprotocolˈ䅵ᯊ఼ᶊᵘprotocolˈ㡖ᢡ఼ᶊᵘ
protocolᯊ䩳ⲥ㾚ᶊᵘprotocolDŽ
Ƶ Protocolহᶘ᳡ࡵ˖ᦤկњহᶘ᭄ᑧЁ⏏ࡴߴ䰸হᶘⱘ᳡ࡵDŽᅗৠᯊгᦤկњ
হᶘЁ⏏ࡴߴ䰸protocolⱘ᳡ࡵDŽℸ䖬ࣙᣀ⫼Ѣ݊Ҫ㒘ӊহᶘ᭄ᑧЁᶹᡒˈᠧᓔ݇
䯁হᶘⱘ᳡ࡵDŽ
Ƶڣ᳡ࡵ˖ᦤկࡴ䕑ˈਃࡼˈ䗔ߎौ䕑PE/COFFḐᓣⱘڣ᳡ࡵDŽ䖭ѯ᳡ࡵձ䌪Ѣᅝ
ܼᶊᵘprotocolDŽ
Ƶ 偅ࡼᬃᣕ᳡ࡵ˖Ўᑇৄ䆒ᦤկਃ⫼⫼ذ偅ࡼⱘ᳡ࡵDŽBDS䰊↉䖭ѯ᳡ࡵ㹿⫼Ѣਃ⫼
᠔᳝䆒㗙ҙਃ⫼᳔ᇣ᭄䞣ⱘ䆒ˈҹ֓ᅠ៤ࠊਃࡼࠄ᪡㋏㒳DŽ䖭⾡᳔ᇣ࣪ਃ⫼ㄪ⬹
㹿⫼Ѣᖿ䗳ਃࡼᴎࠊЁDŽ
(), 䖤㸠ᯊ᳡ࡵ㸼
ҹϟᰃEFI䖤㸠ᯊ᳡ࡵ㸼ⱘ⾡᳡ࡵⱘㅔऩҟ㒡˖
Ƶ⦃๗ব䞣᳡ࡵ˖Ў∌Йᄬ⦃ⱘټ๗ব䞣ᦤկᶹᡒˈ⏏ࡴˈߴ䰸ⱘ᳡ࡵDŽ䖭ѯ᳡ࡵձ䌪Ѣ
ব䞣ᶊᵘprotocolݭব䞣ᶊᵘprotocolDŽ
Ƶ ᯊ䯈᮹ᳳ᳡ࡵ˖ᦤկ䇏ݭᔧࠡᯊ䯈᮹ᳳⱘ᳡ࡵDŽৠᯊгᦤկ䇏প䆒㕂ৃ䗝ⱘ䝦䅵
ᯊ఼ⱘ᳡ࡵDŽ䖭ѯ᳡ࡵձ䌪Ѣᯊ䯈᮹ᳳᶊᵘprotocolDŽ
Ƶ䞡㕂᳡ࡵ˖ᦤկ⫼Ѣ䞡㕂݇䯁㋏㒳ⱘ᳡ࡵDŽ䖭ѯ᳡ࡵձ䌪Ѣ䞡㕂ᶊᵘprotocolDŽ
Ƶ⢊ᗕⷕ᳡ࡵ˖ᦤկ໘⧚⢊ᗕⷕⱘ᳡ࡵˈৃҹথ䗕⢊ᗕⷕࠄ᮹ᖫ㗙ϔϾ䕧ߎ䆒DŽ䖭ѯ
᳡ࡵձ䌪Ѣ⢊ᗕⷕᶊᵘprotocolDŽ
Ƶ 㰮ᢳݙᄬ᳡ࡵ˖ᦤկDXEⱘ䖤㸠ᯊ᳡ࡵҢ⠽⧚ഄഔ䕀ᤶࠄ㰮ᢳഄഔⱘᇘ᳡ࡵDŽ䖭Ͼ᳡
ࡵা㛑⠽⧚ഄഔぎ䯈Ё㹿䇗⫼ϔDŽϔᮺ䕀ᤶᅠ៤ˈ㹿䕀ᤶഄഔⱘ᳡ࡵᇚϡ㛑ݡ㹿䇗⫼њDŽ
䖭ѯ᳡ࡵձ䌪Ѣ䖤㸠ᯊᶊᵘprotocolDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
';( ᳡ࡵ㸼
ҹϟᰃDXE᳡ࡵ㸼ⱘ⾡᳡ࡵⱘㅔऩҟ㒡˖
Ƶ GCDㅵ⧚᳡ࡵ(Global Coherency Domain Services)˖ᦤկ⫼Ѣㅵ⧚ᑇৄϞI/O䌘
⑤ˈMMIO䌘⑤ˈҹঞ㋏㒳ݙᄬ䌘⑤ⱘ᳡ࡵDŽ䖭ѯ᳡ࡵ㹿⫼Ѣ໘⧚఼ⱘGCDЁࡼᗕࡴߴ
䰸䌘⑤DŽ
Ƶ DXE䇗ᑺ఼᳡ࡵ˖ᦤկㅵ⧚㹿䇗ᑺ఼ࡴ䕑䖤㸠ⱘDXE䆒偅ࡼⱘ᳡ࡵDŽ
ܼሔ݅ѿ᳡ࡵ
ܼሔ݅ѿ(GCD)᳡ࡵ㹿⫼ᴹㅵ⧚໘⧚఼ਃࡼ䖛Ёⱘৃ⫼ݙᄬI/O䌘⑤DŽ䖭ѯ䌘⑤䗮䖛ϸ
Ͼᴹㅵ⧚˖
ƵGCDݙᄬぎ䯈ߚ䜡
ƵGCD I/Oぎ䯈ߚ䜡
GCDݙᄬぎ䯈ߚ䜡I/Oぎ䯈ߚ䜡ݙᄬI/O䌘⑤㹿ࡴǃޣᇥǃߚ䜡ǃ䞞ᬒᯊӮ㹿
ࡼᗕᮄDŽৠᯊGCD᳡ࡵгᦤկњᘶ䖭ϸϾ䌘⑤ߚ䜡ⱘᮍ⊩DŽ
GCD᳡ࡵৃߚЎϸϾ䚼ߚDŽϔϾ⫼ᴹㅵ⧚໘⧚఼ਃࡼ䖛Ёⱘৃ⫼ݙᄬ䌘⑤ˈϔϾ⫼ᴹ
ㅵ⧚ৃ⫼I/O䌘⑤DŽ⬅Ѣᑊϡᰃ᠔᳝ⱘ໘⧚఼䛑ᬃᣕՓ⫼I/O䌘⑤ˈ᠔ҹ⫼Ѣㅵ⧚I/O䌘⑤ⱘ᳡ࡵ
ᑊϡᰃᖙ乏ⱘDŽ᮴䆎བԩˈ⬅Ѣ㋏㒳ݙᄬ䌘⑤MMIOᇍѢDXE⦃๗ᰃᖙ㽕ⱘˈ᠔ҹ⫼Ѣㅵ⧚
ݙᄬ䌘⑤ⱘ᳡ࡵᰃᖙ乏ⱘDŽ
*&' ݙᄬ䌘⑤
GCD᳡ࡵ⫼Ѣㅵ⧚ݙᄬⱘᮍ⊩Џ㽕᳝ҹϟ⾡˖
ƵAddMemorySpace()
ƵAllocateMemorySpace()
ƵFreeMemorySpace()
ƵRemoveMemorySpace()
ƵSetMemorySpaceAttributes()
GCD᳡ࡵЁ⫼ѢᘶGCDݙᄬぎ䯈ߚ䜡᳝ҹϟϸ⾡˖
ƵGetMemorySpaceDescriptor()
ƵGetMemorySpaceMap()
GCDݙᄬぎ䯈ߚ䜡ⱘ߱ྟ࣪᠔ᖙ乏ⱘֵᙃᰃᴹ㞾DXE⸔ḚᶊЁⱘHOB䫒㸼DŽ䫒㸼Ё᳝
ϔ㉏HOB㡖⚍⫼ᴹᦣ䗄ݙᄬഄഔᘏ㒓ⱘˈഄഔᘏ㒓ৃҹ㹿⫼ᴹ䆓䯂ݙᄬ䌘⑤DŽ䖭ѯֵᙃᰃ⫼ᴹ
߱ྟ࣪GCDݙᄬぎ䯈ߚ䜡ⱘ⢊ᗕDŽӏԩ䍙ߎഄഔᘏ㒓ⱘݙᄬᇍѢGCDݙᄬ䌘⑤ㅵ⧚᳡ࡵᴹ
䇈䛑ᰃϡৃ⫼ⱘDŽGCDݙᄬぎ䯈ߚ䜡Փ⫼ϔϾ64ԡഄഔㅵ⧚ৃ⫼ݙᄬDŽGCDݙᄬ䌘⑤ㅵ⧚
ⱘ᠔᳝ݙᄬऎඳ䛑ᰃҹ↨⡍Ў᳔ᇣऩԡ䆓䯂DŽ䖬᳝ϔ㉏HOB㡖⚍⫼Ѣᦣ䗄㋏㒳ݙᄬⱘԡ㕂ˈݙ
ᄬᇘI/O䌘⑤ⱘԡ㕂ˈӊ䆒ⱘԡ㕂ˈӊो(firmware volumes)ⱘԡ㕂ˈ乘⬭ぎ䯈ⱘԡ㕂ˈ
ҹঞߚ䜡㒭DXEḚᶊ㒧ᵘՓ⫼ⱘ㋏㒳ݙᄬⱘԡ㕂DŽDXEḚᶊ㒧ᵘӮ㾷ᵤHOB䫒㸼䞠䴶ⱘ䖭ѯֵ
ᙃˈᑊϨֱ䆕䖭ѯ⫼ѢDXEḚᶊ㒧ᵘⱘഄഔ↉ᰃৃ⫼ⱘDŽ᠔ҹˈGCDݙᄬぎ䯈ߚ䜡ᖙ乏ᣝ✻
HOB䫒㸼Ёⱘᦣ䗄ᅠ៤ഄഔぎ䯈ⱘᇘDŽGCDݙᄬぎ䯈ߚ䜡ЎDXEḚᶊ㒧ᵘЁⱘݙᄬㅵ⧚ߑ
᭄ᦤկᖙ㽕ⱘֵᙃˈݙᄬㅵ⧚ߑ᭄՟བAllocatePages(), FreePages(), AllocatePool(),
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
FreeePool(), GetMemoryMap()DŽ
GCDݙᄬぎ䯈ߚ䜡Ёⱘݙᄬऎඳ᳝ಯ⾡⢊ᗕ˖
ƵNonexistent memory˄ϡৃ⫼ݙᄬ˅
ƵSystem memory˄㋏㒳ݙᄬ˅
ƵMemory-mapped ˄I/OݙᄬᇘI/O˅
ƵReserved memory˄ֱ⬭ݙᄬ˅
ݙᄬഫৃҹ⬅DXE⦃๗ϟⱘDXE偅ࡼߚ䜡䞞ᬒDŽˈDXE䆒偅ࡼ䖬ৃҹᣛᅮݙᄬഫⱘ
㓧ᄬሲᗻDŽ9.6ᰒ⼎њݙᄬഫGCDݙᄬぎ䯈ߚ䜡Ёⱘ⢊ᗕ䕀ᤶDŽ⬅GCD᳡ࡵㅵ⧚ⱘݙᄬ
ৃҹҢϔ⾡⢊ᗕ䕀ᤶ៤ϔ⾡⢊ᗕDŽGCD᳡ࡵᖙ乏㛑⿏ࡼⳌৠ⢊ᗕⱘݙᄬഫᑊᇚ݊ড়ᑊ៤ϔ
Ͼᮄⱘݙᄬഫˈ䖭ḋৃҹޣᇥGCDݙᄬぎ䯈ߚ䜡ⱘݙᄬഫ᭄䞣DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
*&',2 䌘⑤
GCD᳡ࡵ⫼Ѣㅵ⧚I/O䌘⑤ⱘᮍ⊩Џ㽕᳝ҹϟ⾡˖
ƵAddIoSpace()
ƵAllocateIoSpace()
ƵFreeIoSpace()
ƵRemoveIoSpace()
GCD᳡ࡵЁ⫼ѢᘶGCD I/Oぎ䯈ߚ䜡ⱘᮍ⊩᳝ҹϟϸ⾡˖
ƵGetIoSpaceDescriptor()
ƵGetIoSpaceMap()
GCD I/Oぎ䯈ߚ䜡ⱘ߱ྟ࣪᠔ᖙ乏ⱘֵᙃᰃᴹ㞾DXE⸔ḚᶊЁⱘHOB䫒㸼DŽ᳝ϔ㉏
HOB㡖⚍ᦣ䗄њ⫼Ѣ䆓䯂I/O䌘⑤ⱘഄഔ㒓᭄䞣DŽӏԩ䍙ߎ䖭Ͼഄഔ㒓ⱘI/OഄഔᇍѢGCD᳡ࡵ
ᴹ䇈䛑ᰃϡৃ⫼ⱘDŽGCD I/Oぎ䯈ߚ䜡Փ⫼ϔϾ64ԡഄഔᦣ䗄I/OഄഔֵᙃˈGCD I/Oぎ䯈
ߚ䜡ЁⱘI/Oഫ᳔ᇣऩԡᰃᄫ㡖DŽ
GCD I/Oぎ䯈ߚ䜡ⱘI/Oഫ᳝ϝ⾡⢊ᗕˈࣙᣀϡৃ⫼I/OˈI/Oˈҹঞֱ⬭I/ODŽI/O䌘⑤
ৃҹ⬅DXE⦃๗ϟⱘ䆒偅ࡼߚ䜡䞞ᬒDŽ9.7ᰒ⼎њI/Oഫⱘ⢊ᗕ䕀ᤶDŽ⬅GCD᳡ࡵㅵ⧚ⱘ
I/OৃҹҢϔ⾡⢊ᗕ䕀ᤶ៤ϔ⾡⢊ᗕDŽGCD᳡ࡵᖙ乏㛑⿏ࡼⳌৠ⢊ᗕⱘI/Oഫᑊᇚ݊ড়ᑊ៤
ϔϾᮄⱘI/Oഫˈ䖭ḋৃҹޣᇥGCD I/Oぎ䯈ߚ䜡ⱘI/Oഫ᭄䞣DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
';( 䇗ᑺ఼
DXE⸔Ḛᶊᅠ៤߱ྟ࣪ҹৢˈࠊᴗ㹿䕀Ѹ㒭DXE䇗ᑺ఼DŽDXE䇗ᑺ఼䋳䋷ࡴ䕑䇗⫼
ӊोЁⱘDXE偅ࡼDŽDXE䇗ᑺ఼ḍHOB䫒㸼Ёⱘᦣ䗄ֵᙃӊोЁᶹᡒ偅ࡼDŽ䱣ⴔᑣ
ᠻ㸠ˈ݊ҪⱘӊोӮ㹿Ⳍ㒻ᡒࠄDŽᔧᮄⱘӊो㹿ᡒࠄҹৢˈDXE䇗ᑺ఼гӮ᧰㋶ᮄⱘӊ
ोЁⱘ᠔᳝偅ࡼDŽ
ᔧϔϾᮄⱘӊो㹿ᡒࠄҹৢˈ៥ӀӮḍϔϾӬܜ㑻ᦣ䗄᭛ӊᴹᶹᡒ偅ࡼDŽ䖭ϾӬܜ㑻
ᦣ䗄᭛ӊՓ⫼ϔϾᅮⱘ᭛ӊৡᑊϨࣙᣀњᑨ䆹㹿Ӭࡴܜ䕑ᑊᠻ㸠DXE偅ࡼⱘࡴ䕑乎ᑣDŽ↣Ͼ
ӊो᳔া㛑᳝ϔϾӬܜ㑻ᦣ䗄᭛ӊˈԚᰃгܕ䆌≵᳝ӏԩӬܜ㑻ᦣ䗄᭛ӊDŽ䕗催Ӭܜ㑻
ⱘDXE偅ࡼ㹿ࡴ䕑ҹৢˈⳌ݇ⱘձ䌪㸼䖒ᓣӮ㹿ᮄᑊᡒߎϟϔϾ㹿ࡴ䕑ⱘDXE偅ࡼDŽӬܜ㑻
ᦣ䗄᭛ӊӮᦤկϔϾᅮᠻ㸠乎ᑣⱘDXE偅ࡼ߫㸼ˈ䖭ѯ߫㸼Ёⱘ偅ࡼⱘࡴ䕑ϡՓ⫼ձ䌪㸼䖒
ᓣDŽձ䌪㸼䖒ᓣᦤկ㒭࠽ϟⱘӬܜ㑻䕗ԢⱘDXE偅ࡼՓ⫼DŽ↣ϾDXE偅ࡼᠻ㸠ࠡˈ䛑ᖙ乏㒣
䖛ᅝܼᶊᵘprotocolⱘ偠䆕DŽ䖭⾡偠䆕ᰃЎњ⽕ℶࡴ䕑݊Ҫϡᯢᴹ⑤ⱘDXE偅ࡼᑣDŽ
Ӭܜ㑻ᦣ䗄᭛ӊЁⱘ偅ࡼ᠔᳝⒵䎇ձ䌪㸼䖒ᓣⱘDXE偅ࡼ䛑㹿ࡴ䕑ҹৢˈࠊᴗҢ
DXE䇗ᑺ఼㹿⿏Ѹ㒭BDSᶊᵘProtocolDŽBDSᶊᵘProtocol䋳䋷߯ᓎࠊৄ䆒ᑊᇱ䆩ਃࡼ᪡
㋏㒳DŽࠊৄ䆒⫼Ѣਃࡼ᪡㋏㒳ⱘ偅ࡼ䛑㹿߯ᓎᅠ៤ҹৢˈৃ㛑Ӯ᳝ᮄⱘӊो㹿থ
⦄DŽབᵰBDSᶊᵘProtocolϡ㛑ਃࡼࠊৄˈ㗙ϡ㛑পᕫਃࡼ᪡㋏㒳ⱘᴗ䰤ˈDXE䇗ᑺ఼Ӯ
㹿䞡ᮄ䇗⫼DŽ䞡ᮄਃࡼⱘDXE䇗ᑺ఼Ӯࡴ䕑ᑊᠻ㸠᳔䖥ϔᮄথ⦄ⱘӊोЁⱘ䆒偅ࡼDŽ
DXEࡴݡ䕑ᅠ᠔᳝ৃ⫼偅ࡼҹৢˈࠊᴗӮ䞡ᮄ㹿⿏Ѹ㒭BDSᶊᵘProtocolˈҹ֓㒻㓁ਃࡼ᪡
㋏㒳DŽ9.8ᦣ䗄њDXE䇗ᑺ఼ǃDXE偅ࡼBDSⱘᠻ㸠乎ᑣDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Ӭܜ㑻᭛ӊ
Ӭܜ㑻᭛ӊᰃӊोЁৃ㛑ࣙⱘϔϾ⡍߿ⱘ᭛ӊDŽ↣ϾӊोЁ᳔ৃҹࣙᣀϔϾӬܜ
㑻᭛ӊDŽӬܜ㑻᭛ӊՓ⫼ᏆⶹⱘGUID᭛ӊৡˈ᠔ҹDXE䇗ᑺ఼ᘏᰃ㛑䗮䖛䖭ϾGUIDᴹᡒࠄӬ
ܜ㑻᭛ӊDŽ↣ᔧᮄⱘӊो㹿থ⦄ҹৢˈDXE䇗ᑺ఼Ӯ佪䗝ᇱ䆩ᶹᡒ䖭ϾӬܜ㑻᭛ӊDŽӬܜ㑻
᭛ӊЁࣙᣀњӬܜ㑻䕗催ⱘϔϾDXE偅ࡼ߫㸼ˈ䖭ѯ偅ࡼᖙ乏݊Ҫ䕗ԢӬܜ㑻偅ࡼ㹿ࡴ䕑ࠡ
㹿ᠻ㸠DŽӬܜ㑻᭛ӊЁⱘ偅ࡼ߫㸼ᰃᣝ✻ᠻ㸠乎ᑣᥦ߫ⱘDŽབᵰ䖭ѯ偅ࡼ᳝ࣙձ䌪㸼䖒ᓣˈ
䙷М䖭ѯձ䌪㸼䖒ᓣӮ㹿ᗑ⬹ᥝDŽ
Ӭܜ㑻᭛ӊⱘⳂⱘᰃЎњᦤկϔϾᅮᠻ㸠乎ᑣⱘDXE偅ࡼ߫㸼DŽ݊ᅗḍձ䌪㸼䖒ᓣᠻ
㸠ⱘDXE偅ࡼӬܜ㑻䕗Ԣˈгህᰃ䇈ˈ䖭ѯ偅ࡼ㋏㒳ਃࡼ䖛Ёⱘࡴ䕑乎ᑣϡᰃᅮⱘDŽᔧ
✊ˈ᳝ᯊ䖭ѯ偅ࡼг䳔㽕ϔϾᅮⱘᠻ㸠乎ᑣDŽ՟བ⫼Ѣᦤկdebug DXE偅ࡼⱘ᳡ࡵ᳝ᯊ
ህᖙ乏㹿ࡴܹӬܜ㑻᭛ӊЁDŽ৺߭བᵰՓ⫼ձ䌪㸼䖒ᓣⱘ䆱ˈ䖭ѯ᳡ࡵৃ㛑Ӯᕜᰮᠡ㹿ࡴ䕑DŽ
བᵰ㛑ᮽⱘᯊࡴ䕑debug᳡ࡵˈ៥ӀህৃҹdebugⱘDXE⸔ᶊᵘDXE偅ࡼDŽ
ϔϾ՟ᄤᰃՓ⫼Ӭܜ㑻᭛ӊᴹᗑ⬹ձ䌪㸼䖒ᓣDŽ᳝ѯጠܹᓣᑇৄৃ㛑া䳔㽕ᇥ䞣ⱘDXE偅ࡼ
ᣝ✻ᅮ乎ᑣࡴ䕑DŽӬܜ㑻᭛ӊህৃҹᦤկϔϾϹḐᣝ✻ᅮ乎ᑣᴹࡴ䕑ⱘᮍ⊩ˈ㗠ϡՓ⫼ձ
䌪㸼䖒ᓣⱘ乎ᑣࡴ䕑DŽᔧ✊ձ䌪㸼䖒ᓣᦣ䗄њПࠡᖙ乏ࡴ䕑ⱘӊ偅ࡼˈ䖭⾡ᮍ⊩ৃҹֱᡸ
ӊぎ䯈ϡ㹿⸈ണDŽӬܜ㑻᭛ӊⱘ᳔Џ㽕ⳂⱘᰃЎњՓӊᑇৄⱘ䆒䅵ࡴ♉⌏DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ձ䌪ᗻ䇁⊩
DXE偅ࡼᰃҹ᭛ӊⱘᮍᓣᄬټӊोЁˈᅗऴ⫼ϔϾϾऎඳDŽ݊ЁϔϾऎඳᖙ乏ᰃ
PE/COFFڣDŽབᵰ䖭ϾDXE偅ࡼࣙᣀϔϾձ䌪㸼䖒ᓣˈ䙷М䖭Ͼձ䌪㸼䖒ᓣӮ㹿ᄬټϔϾ
⡍ᅮऎඳDŽDXE偅ࡼৃ㛑䖬ࣙᣀ乱ⱘऎඳ⫼Ѣय़㓽ࡴDŽᑊϨˈDXE䇗ᑺ఼ḍDXE偅ࡼⱘ
㉏ൟᴹ䕼䆚ϡৠⱘ偅ࡼDŽDXE䇗ᑺ఼ৃҹ䗮䖛ᶹᡒDXE偅ࡼ䰘ሲऎඳᴹᶹ䆶ձ䌪㸼䖒ᓣDŽ䰘ሲ
ऎඳࣙᣀ⬅ϔ⾡᭄⌕㉏ൟⱘ᪡᭄᪡ⷕ㒘៤ⱘձ䌪㸼䖒ᓣDŽ
Ўњ㡖ⳕぎ䯈ˈᄬټ䰘ሲऎඳЁⱘձ䌪㸼䖒ᓣᖙ乏㹿䆒䅵ⱘㅔⷁDŽˈᅗӀ䖬ᑨ䆹㛑
㹿ᕜᖿ㾷ᵤˈҹ֓䰡Ԣᠻ㸠ᯊ䯈DŽЎњ䖒ࠄ䖭ϸϾⳂⱘˈ៥Ӏᖙ乏䆒䅵ϔ⾡ㅔⷁˈѢᷜ㒧ᵘ
ⱘձ䌪㸼䖒ᓣ㓪ⷕDŽDXE䇗ᑺ఼ᖙ乏ᅲ⦄ϔ⾡⫼Ѣ㾷ᵤձ䌪㸼䖒ᓣⱘ㾷䞞ᑣDŽ㸼9.1㒭ߎњձ
䌪㸼䖒ᓣᬃᣕⱘϔѯ᪡ⷕDŽ
⬅Ѣৠϔᯊࠏৃ㛑᳝Ͼձ䌪㸼䖒ᓣؐ䛑Ўtrueˈ᠔ҹेՓᅠܼⳌৠⱘᑇৄӊЁˈ
ਃࡼᯊˈDXE偅ࡼⱘᠻ㸠乎ᑣ䛑ৃ㛑ᰃϡৠⱘDŽ䖭⾡ϡ⹂ᅮᗻህᰃЎҔМ䇈Փ⫼ձ䌪㸼䖒ᓣ
ᠻ㸠ⱘDXE偅ࡼⱘ乎ᑣᰃϡᅮⱘDŽ
';( 偅ࡼ
DXE偅ࡼৃҹߚЎϸ㉏˖
ƵDXE䰊↉ᮽᳳᠻ㸠ⱘDXE偅ࡼDŽ
Ƶᣝ✻EFI 1.1偅ࡼൟ߯ᓎⱘDXE偅ࡼDŽ
ϔ㉏DXEᮽᳳࡴ䕑ⱘ偅ࡼⱘᠻ㸠乎ᑣপއѢӬܜ㑻᭛ӊձ䌪㸼䖒ᓣDŽൟⱘᮽᳳᠻ
㸠ⱘDXE偅ࡼࣙᣀ໘⧚఼ǃ㢃⠛㒘ᑇৄ߱ྟ࣪ҷⷕDŽ䖭ѯᮽᳳࡴ䕑ⱘDXE偅ࡼ䖬Ӯ߯ᓎDXE
ᶊᵘProtocolˈ䖭Ͼprotocol㹿DXE⸔Ḛᶊ⫼ᴹ߯ᓎEFIਃࡼ᳡ࡵEFI䖤㸠ᯊ᳡ࡵDŽЎњޣᇥ
ਃࡼ᠔⫼ᯊ䯈ˈৃҹᇚሑৃ㛑䆒߱ྟ࣪ᬒܹѠ㉏ᣝ✻EFI 1.1偅ࡼൟ߯ᓎⱘDXE偅ࡼDŽ
ᔧѠ㉏DXE偅ࡼ㹿DXE䇗ᑺ఼䖤㸠ᯊˈ偅ࡼϡӮخӏԩ⹀ӊⱘ߱ྟ࣪DŽDXE䇗ᑺ఼Ӯᇚ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
%'6 䰊↉
ࠊৄ䆒
ࠊৄ䆒ᰃՓ⫼ㅔऩ᭛ᴀ䕧ܹ䕧ߎण䆂ⱘ䆒DŽѢFrameworⱘᑇৄϞˈӏԩ㛑ᬃ
ᣕㅔऩ᭛ᴀ䕧ܹ/䕧ߎण䆂ⱘ䆒䛑㛑㹿ЎϔϾࠊৄ䆒Փ⫼DŽϟ߫⾡㉏ൟⱘ䆒䛑ৃҹ
Ўࠊৄ䆒Փ⫼˖
ƵVGA䗖䜡఼˖ᣝ✻ㅔऩ᭛ᴀ䕧ߎण䆂䗖䜡఼ϞѢ᭛ᴀᰒ⼎䕧ߎDŽ
Ƶ䗮⫼ᔶ䗖䜡఼(UGA)˖䖭ѯ䗖䜡఼᳝ϔϾᬃᣕഫ䕀ᤶ᪡(BLT)ⱘⱘ䈵໘⧚ষDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
UGAৃҹ䗮䖛BLT᪡frame bufferЁথ䗕Unicode䈵ᴹᅲ⦄ㅔऩ᭛ᴀ䕧ߎण䆂DŽ
Ƶ Іষ㒜ッ˖Іষ㒜ッ䆒ৃҹৠᯊᅲ⦄ㅔऩ᭛ᴀ䕧ܹ䕧ߎण䆂DŽІষЁᮁ䴲ᐌ♉⌏ˈᅗ
ᬃᣕ⾡ण䆂՟བPC-ANSIˈVT-100ˈVT-100+ˈ䖬᳝VTUTF8DŽ
Ƶ Telnet˖telnetৃҹৠᯊᅲ⦄ㅔऩ᭛ᴀ䕧ܹ䕧ߎण䆂DŽІষϔḋˈtelnetᬃᣕⱘण䆂
ࣙᣀPC-ANSIˈVT-100ˈVT-100+ˈVTUTF8DŽ
Ƶ 䖰䈵ᰒ⼎(HTTP)˖䖰䈵ᰒ⼎гৃҹᅲ⦄ऩ᭛ᴀ䕧ܹ䕧ߎण䆂DŽ↨བՓ⫼HTTPण
䆂ᅲ⦄ˈℸৃҹѢFrameworkⱘᑇৄˈՓ⫼ᷛޚInternet⌣㾜఼ㅵ⧚
ਃࡼ䆒
Frameworkᬃᣕⱘਃࡼ䆒ࣙᣀ˖
ƵՓ⫼FATḐᓣ᭛ӊ㋏㒳ˈϨᬃᣕBlock I/O Protocol 䆒
ƵᬃᣕFile System Protocolⱘ䆒
ƵᬃᣕLoad File Protocolⱘ䆒
⺕Ⲭ䆒ϔ㠀ᬃᣕBlock I/O Protocolˈ㔥㒰䆒ϔ㠀ᬃᣕLoad File ProtocolDŽ
Frameworkгৃҹ䗝ᢽՓ⫼Ӵ㒳ⱘݐᆍ䆒DŽ䖭ѯ䆒Ӯᦤկ⫼ѢਃࡼࠄӴ㒳ⱘOSⱘ᳡
ࡵˈBDS䰊↉ᑨ䆹ᖙ乏ᬃᣕਃࡼࠄӴ㒳OSDŽ
Ёℶਃࡼ᳡ࡵ
OSࡴ䕑៤ࡳਃࡼᅠ៤ৢˈBDS䰊↉ህ㒧ᴳњDŽOSࡴ䕑఼㗙OS kernelৃҹ䗮䖛䇗⫼
ExitBootServices()᳡ࡵᴹЁℶBDS䰊↉DŽ䇗⫼㒧ᴳৢˈ᠔᳝ⱘਃࡼ᳡ࡵ䛑Ӯ䞞ᬒ݊Փ⫼䖛ⱘ䌘
⑤DŽ䇗⫼䖨ಲৢˈ㋏㒳䖯ܹRuntime(RT)䰊↉DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
कゴ
ण䆂㒧ᵘВ՟
䞣ⱘ㒧ᵘण䆂ᄬѢᑇৄЁDŽ䖭ѯण䆂ࡳ㛑ህڣ⾡ᮍᓣ䇗⫼Ёⱘ݊Ҫण䆂DŽଃϔϡ
ৠⱘᰃˈ䖭ѯण䆂ᰃ⬅ᑇৄⱘḌᖗ᳡ࡵ䇗⫼ˈ✊ৢ݊ԭⱘ偅ࡼᑨ⫼ᑣձ䇗⫼䖭ѯḌᖗ᳡
ࡵҹ⾡ᮍᓣᑇৄϞ▔⌏䖤㸠DŽϔ㠀ᴹ䇈ˈ㒧ᵘण䆂ⱘଃϔ⫼᠋ᰃḌᖗ᳡ࡵⱘᴀ䑿DŽ㒧ᵘण
䆂乘ਃࡼ⦃๗ᯊˈ㋏㒳ЁଃϔⱘϢ⹀ӊ䖯㸠≳䗮ⱘᢑ䈵⹀ӊDŽ݊Ҫϔߛ᳡ࡵᇍӏԩ⹀ӊ
ⱘ䇋∖䛑Ӯ䗮䖛ϢḌᖗ᳡ࡵ≳䗮DŽ 䇈ᯢњ䖭⾡催ሖⱘ䕃ӊ≳䗮DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
&38 ⱘᵘ䗴ण䆂
&38 ⱘᵘ䗴ण䆂ˠ˴ˡ⸔Ϟ⫼Ѣᢑ䈵ⱘ⡍⅞໘⧚఼ࡳ㛑DŽ䖭ࣙᣀ㓧ᄬ䖤⫼ˈਃ⫼⽕⫼
Ёᮁˈ䇗⫼Ёᮁ䞣ᓖᐌ䞣ˈ䇏ݙ䚼໘⧚఼ᅮᯊ఼ˈԡ໘⧚఼ˈᑊ⹂ᅮ໘⧚఼ⱘ乥⥛DŽ
䖭ϔण䆂ᖙ乏⬅ਃࡼ᳡ࡵ㗙䖤㸠ᯊⱘ ';( 偅ࡼᑣѻ⫳ˈᑊϨৃ㛑া㛑 ';( ⸔Ϟˈѻ
⫳ⱘℸ㒧ᵘण䆂ⱘ ';( 偅ࡼᑣϞ䖤㸠DŽ䗮䖛ܕ䆌⬅ϔϾᓩᇐ᳡ࡵ偅ࡼᑣѻ⫳ण䆂ˈᕜᰒ✊ˈ
䖭⾡ᢑ䈵ण䆂ϡӮᣕ㓁ᄬˈᔧᑇৄⱘਃࡼ᳡ࡵ㹿ᓩᇐࠄϔϾਃࡼⳂᷛˈ՟བ᪡㋏㒳㗠㒜ℶ
ᯊDŽ
*&' ݙᄬぎ䯈ᇘᰃ ';( ⸔ϞѢ +2% ߫㸼ⱘݙᆍ㹿߱ྟ࣪ⱘDŽ+2% ߫㸼ࣙϡৠⱘݙ
ᄬऎඳⱘࡳ㛑ˈԚᰃᅗϡࣙᅗӀᔧࠡⱘሲᗻDŽ';( 偅ࡼᑣ䋳䋷㓈ᡸ໘⧚఼㛑ৃ䆓䯂ࠄᕫᔧ
ࠡݙᄬऎඳⱘሲᗻDŽ
䖭ᛣੇⴔѻ⫳ &38 ᵘ䗴ण䆂ⱘ ';( 偅ࡼᑣᖙ乏䆄ᔩϟᇍ໘⧚఼㛑䆓䯂ࠄⱘݙᄬ᠔᳝ऎ
ඳⱘ߱ྟ⢊ᗕⱘሲᗻⱘ *&' ݙᄬぎ䯈ᇘDŽ';( ᳡ࡵߑ᭄ 6HW0HPRU\6SDFH$WWULEXWHV ܕ䆌ׂ
ᬍݙᄬ㣗ೈⱘሲᗻDŽ';( ᳡ࡵߑ᭄ 6HW0HPRU\6SDFH$WWULEXWHV 䗮䖛 &38 ᵘ䗴ण䆂ⱘ᳡ࡵߑ᭄
6HW0HPRU\$WWULEXWHV ᴹᠻ㸠DŽ
Ўњ߱ྟ࣪ *&' ⱘݙᄬぎ䯈ᇘⱘሲᗻ⢊ᗕˈ';( 偅ࡼᑣѻ⫳ⱘ &38 ᵘ䗴ण䆂ᖙ乏䇗⫼
';( ᳡ࡵᑣ 6HW0HPRU\6SDFH$WWULEXWHV˄˅Ӵ䗦ᔧࠡⱘሲᗻЎ໘⧚఼㛑ৃ㾕ⱘ᠔᳝ϡৠⱘ
ݙᄬऎඳDŽ䖭ড䖛ᴹᇚӮಲ䇗 &38 ⱘᵘ䗴ण䆂ⱘ 6HW0HPRU\$WWULEXWHV˄˅᳡ࡵᑣˈᑊϨ㞾Ң
';( ⸔ϞӮা㽕∖ᇍݙᄬऎඳⱘሲᗻ㹿䆒㕂Ўᔧࠡⱘ䆒㕂ˈ᠔᳝ⱘ䖭ѯ䇗⫼ᖙ乏䖨ಲ
(),B68&&(66DŽ *&' ݙᄬぎ䯈ᇘЁᔎ䖿ᇚᔧࠡⱘሲᗻ㹿䆒㕂Ўᔧࠡⱘ䆒ᅮDŽ䖭ѯ߱ྟ࣪ᅠ
៤ҹৢˈϟϔℹ䇗⫼ ';( ᳡ࡵᑣ *HW0HPRU\6SDFH0DS˄˅ᇚℷ⹂ഄᰒ⼎᠔᳝ⱘݙᄬऎඳⳂࠡⱘ
ሲᗻDŽℸˈҞৢӏԩ䇗⫼ ';( ᳡ࡵᑣ 6HW0HPRU\6SDFH$WWULEXWHV˄˅ᇚӮձ䇗⫼ &38 ⱘ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᵘ䗴ण䆂ˈ᠔ҹᇚӮⳟࠄབᵰ䖭ѯሲᗻ㹿ׂᬍˈ*&' ݙᄬぎ䯈ᇘᇚӮⳌᑨⱘ㹿ᮄDŽ
&38 ⱘᵘ䗴ण䆂Փ⫼ϟ䴶ⱘण䆂ᅮН˖
Protocol Interface Structure
typedef struct _EFI_CPU_ARCH_PROTOCOL {
EFI_CPU_FLUSH_DATA_CACHE FlushDataCache;
EFI_CPU_ENABLE_INTERRUPT EnableInterrupt;
EFI_CPU_DISABLE_INTERRUPT DisableInterrupt;
EFI_CPU_GET_INTERRUPT_STATE GetInterruptState;
EFI_CPU_INIT Init;
EFI_CPU_REGISTER_INTERRUPT_HANDLER
RegisterInterruptHandler;
EFI_CPU_GET_TIMER_VALUE GetTimerValue;
EFI_CPU_SET_MEMORY_ATTRIBUTES SetMemoryAttributes;
UINT32 NumberOfTimers;
UINT32 DmaBufferAlignment;
} EFI_CPU_ARCH_PROTOCOL;
ƵFlushDataCacheࠋᮄ㣗ೈⱘݙ໘⧚఼ⱘ᭄㓧ᄬDŽབᵰ໘⧚఼ϡ᭄ࣙ㓧ᄬˈ㗙
᭄㓧ᄬᰃᅠܼϔ㟈ⱘˈ䙷М䖭Ͼࡳ㛑Ӯ䖨ಲ(),B68&&(66DŽབᵰ໘⧚఼ϡᬃᣕࠋᮄ᭄㓧ᄬ
Ёഄഔ㣗ೈˈ䙷М᭄㓧ᄬЁⱘܼ䚼ᖙ乏㹿ࠋᮄDŽ䖭ࡳ㛑㹿䇗⫼ḍḹ,2ᢑ䈵ⱘ'0$᪡ࠋ
ᮄ᭄㓧ᄬDŽ
ƵEnableInterruptü໘⧚఼ਃ⫼Ёᮁ໘⧚DŽ㾕(QDEOH,QWHUUXSW ࡳ㛑ᦣ䗄DŽ䖭Ͼࡳ㛑㹿
%RRW6HUYLFH5DLVH73/ 5HVWRUH73/ ߑ᭄䇗⫼DŽ
ƵDisableInterruptü䗮䖛໘⧚఼⽕⫼Ёᮁ໘⧚DŽ㾕'LVDEOH,QWHUUXSW ࡳ㛑ᦣ䗄DŽ䖭Ͼࡳ
㛑㹿%RRW6HUYLFH5DLVH73/ 5HVWRUH73/ 䇗⫼DŽ
ƵGetInterruptStateüᕫࠄ䆹໘⧚఼ⱘᔧࠡⱘЁᮁ⢊ᗕDŽ
ƵInitü໘⧚఼ѻ⫳ϔϾ,1,7ЁᮁDŽℸࡳ㛑㹿⫼Ѣḍᣛᅮⱘਃࡼ䏃ᕘ䞡㕂㒧ᵘण䆂DŽབ
ᵰ໘⧚఼ϡ㛑ҹ㓪ᮍᓣ⫳៤ϔϾ≵᳝䚼⹀ӊᐂࡽⱘ,1,7ˈ䙷Мℸࡳ㛑䖨ಲ
(),B816833257('DŽ
ƵRegisterInterruptHandlerü໘⧚఼ⱘЁᮁ䞣㸼ЁᶹᡒϔϾⳌᑨⱘЁᮁ᳡ࡵ䖯DŽℸ
ࡳ㛑ൟⱘ㹿䇗⫼䅵ᯊ఼㒧ᵘण䆂㋏㒳Ё䇗⫼䅵ᯊ఼ЁᮁᯊDŽᅗг㛑ᶹᡒ䇗⫼ᓖᐌ
䞣㸼ᯊ㹿䇗⫼DŽ
ƵGetTimerValueü䖨ಲϔϾ໘⧚఼ݙ䚼ⱘ䅵ᯊ఼ⱘؐDŽ
ƵSetMemoryAttributes
ƵNumberOfTimersü㒭ϔϾ໘⧚఼Ёৃ⫼ⱘ䅵఼᭄ⱘ᭄䞣DŽ&38㒧ᵘण䆂㹿ᅝ㺙Пৢˈ
ℸᄫ↉ЁⱘؐᰃϔϾᐌ᭄ˈϡ㛑ׂᬍDŽ᠔᳝Փ⫼㗙ᖙ乏㾚ᅗЎা䇏ᄫ↉DŽ
ƵDmaBufferAlignmentҹᄫ㡖Ўऩԡᦤկߚ䜡'0$㓧ކऎᥦ߫᠔䳔ⱘᇣDŽ䖭ᰃᑇৄ
Ёൟⱘ᳔ⱘ᭄㓧ᄬ㸠ⱘᇣDŽ䗮䖛ᑇৄЁ᠔᳝⦄ᄬⱘ㓧ᄬЁᶹᡒ䖭Ͼ᭄㓧ᄬ㸠ⱘ
ᇣᑊϨ䖨ಲ᳔ؐ㗠އᅮℸؐDŽ䖭ѯ㹿ḍḹ,2ᢑ䈵ⱘण䆂Փ⫼ˈҹֱ䆕≵᳝Ͼ'0$㓧ކऎ݅ѿ
ৠϔϾ㓧ᄬ㸠DŽ䖭ϾؐᰃϔϾᐌ䞣ˈᅝ㺙ᅠ&38㒧ᵘण䆂ҹৢᰃϡ㛑㹿ᬍবⱘDŽ᠔᳝ⱘՓ⫼㗙
ᖙ乏㾚ᅗЎা䇏ᄫ↉DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᅲᯊᯊ䩳㒧ᵘण䆂
ᅲᯊᯊ䩳㒧ᵘण䆂Ў䆓䯂ϔϾ㋏㒳ⱘᅲᯊᯊ䩳⹀ӊᦤկ᳡ࡵDŽ䖭ϔण䆂ᖙ乏ᰃ䖤㸠';(偅
ࡼᑣᯊ㹿ѻ⫳ˈᑊϨৃ㛑া㛑⬅';(⸔ϞӮ䇗⫼DŽ
䖭ϔण䆂ᖙ乏ᰃϔϾ䖤㸠ⱘˠ˴ˡ偅ࡼᑣѻ⫳DŽ䖭Ͼ偅ࡼᑣ䋳䋷߱ྟ࣪(),䖤㸠ᯊⱘ
᳡ࡵ㸼ⱘಯϾ乚ඳ*HW7LPH 6HW7LPH *HW:DNHXS7LPH DQG6HW:DNHXS7LPH DŽ䇋খ
䯙Āゴᯊ᳡ࡵⱘ᳝݇䖭ѯ᳡ࡵⱘ㒚㡖āDŽ(),䖤㸠ᯊ᳡ࡵ㸼ЁⱘಯϾ乚ඳᏆ㒣㹿߱ྟ࣪ҹ
ৢˈ偅ࡼᑣᖙ乏ϔϾᮄⱘᣛぎষⱘহᶘϞᅝ㺙ᅲᯊᯊ䩳ᵘ䗴ण䆂DŽ䖭ϔण䆂ⱘᅝ㺙䗮
ⶹ';(䰊↉Ϣᅲᯊᯊ䩳Ⳍ݇ⱘ᳡ࡵৃҹᑨ⫼ˈ㗠Ϩ';(⸔Ϟᖙ乏ᮄ(),䖤㸠ᯊ᳡ࡵ㸼ⱘԡ
&5&DŽ
䅵ᯊ఼ᵘ䗴ण䆂
䅵ᯊ఼ᵘ䗴ण䆂ᦤկⱘ᳡ࡵˈࣙᣀ߱ྟ࣪ϔϾ਼ᳳᗻ䅵ᯊ఼ЁᮁˈᑊᄬټϔϾЎ↣䅵ᯊ
఼Ёᮁ䇗⫼ⱘহᶘDŽᅗгৃҹᦤկ᳡ࡵᴹ䇗ᭈ䅵ᯊ఼Ёᮁ਼ᳳⱘᇣDŽᔧϔϾ䅵ᯊ఼Ёᮁথ⫳
ᯊˈ䖭Ͼহᶘ䆄ᔩҢϞথ⫳䅵ᯊ఼Ёᮁࠄ䖭ⱘᯊ䯈䞣DŽ䆹ण䆂ᠧᓔՓ⫼6HW7LPHU˄˅ਃࡼ
᳡ࡵDŽ䖭ϔण䆂ᖙ乏⬅ਃࡼ᳡ࡵѻ⫳䖤㸠ⱘ';(偅ࡼᑣˈৃ㛑া㛑';(⸔Ϟ䖤⫼ˈ㗙
';(偅ࡼᑣѻ⫳݊ᅗⱘ';(䰊↉ⱘ㒧ᵘण䆂DŽ䗮䖛ܕ䆌ϔϾ⬅ᓩᇐ᳡ࡵ偅ࡼ఼ѻ⫳ⱘण䆂ˈᕜ
ᰒ✊ˈ䖭⾡ᢑ䈵ण䆂ϡӮᣕ㓁ᄬˈᔧᑇৄⱘਃࡼ᳡ࡵ㹿ᓩᇐࠄϔϾਃࡼⳂᷛˈ՟བ᪡㋏㒳DŽ
Protocol Interface Structure
typedef struct _EFI_TIMER_ARCH_PROTOCOL {
EFI_TIMER_REGISTER_HANDLER RegisterHandler;
EFI_TIMER_SET_TIMER_PERIOD SetTimerPeriod;
EFI_TIMER_GET_TIMER_PERIOD GetTimerPeriod;
EFI_TIMER_GENERATE_SOFT_INTERRUPT GenerateSoftInterrupt;
} EFI_TIMER_ARCH_PROTOCOL;
ƵRegisterHandler(ᆘᄬ఼হᶘ üüᆘᄬ఼䆄ᔩϔϾ↣থ⫳䅵ᯊ఼Ёᮁ䇗⫼ⱘহᶘDŽ䅵
ᯊ఼਼ᳳᅮНЎ↣䅵ᯊ఼ЁᮁП䯈᳔ᇣⱘᯊ䯈Ꮒˈ᠔ҹ䅵ᯊ఼਼ᳳгᰃ↣䇗⫼ᆘᄬ఼হᶘ
П䯈ⱘ᳔ᇣᯊ䯈ᏂDŽ
ƵSetTimerPeriod(䆒㕂䅵ᯊ఼਼ᳳ)üü䆒㕂䅵ᯊ఼ⱘЁᮁᳳᰃҹ㒇⾦ЎऩԡⱘDŽ䖭
Ͼࡳ㛑ᰃৃҹ䗝ᢽⱘᑊϨৃ㛑䖨ಲϔϾ(),B816833257('DŽབᵰ䖭Ͼࡳ㛑ᰃ㹿ᬃᣕⱘˈ䙷М䅵ᯊ
఼਼ᳳಯ㟡Ѩܹ㟇᳔䖥ᬃᣕⱘ䅵ᯊ఼ᯊᳳDŽ
ƵGetTimerPeriod(পᕫ䅵ᯊ਼ᳳ üüᕫࠄ䖭Ͼ䅵ᯊ਼ᳳᰃҹ㒇⾦ЎऩԡⱘDŽ
ƵGenerateSoftInterrupt(ѻ⫳䕃㒜ッ üüѻ⫳ϔϾ䅵ᯊ఼䕃㒜ッˈӓ䅵ᯊ఼Ёᮁⱘѻ
⫳DŽབᵰ䅵ᯊ఼ЁᮁᏆϔ↉ᯊ䯈ݙ㹿ሣ㬑њ䙷М䖭Ͼ᳡ࡵৃҹ⫼ᴹ䇗⫼ᆘᄬ఼হᶘDŽ
ԡᵘ䗴ण䆂
ԡᵘ䗴ण䆂ᦤկԡ᠔䳔ⱘ᳡ࡵᑇৄDŽ䖭ϔण䆂ᖙ乏⬅䖤㸠ᯊⱘ';(偅ࡼᑣѻ⫳ˈᑊϨ
ৃ㛑া㛑';(⸔Ϟ䖤⫼DŽ䖭Ͼ偅ࡼᑣ䋳䋷߱ྟ࣪(),䖤㸠ᯊ᳡ࡵ㸼ⱘ5HVHW6\VWHP 乚ඳDŽ
(),䖤㸠ᯊ᳡ࡵ㸼Ёⱘ䖭Ͼ乚ඳᏆ㒣㹿߱ྟ࣪ҹৢˈ偅ࡼᑣᖙ乏ϔϾᮄⱘᣛぎষⱘহ
ᶘϞᅝ㺙ԡᵘ䗴ण䆂DŽ䖭ϔण䆂ⱘᅝ㺙䗮ⶹ';(䰊↉ϢԡⳌ݇ⱘ᳡ࡵৃҹᑨ⫼ˈ㗠Ϩ';(
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
⸔Ϟᖙ乏ᮄ(),䖤㸠ᯊ᳡ࡵ㸼ⱘԡ&5&DŽ
䗝ᢽᓩᇐ䆒ᵘ䗴ण䆂˖
ᓩᇐ䆒䗝ᢽᵘ䗴ण䆂ˈᇚ';(ⱘࠊ䕀⿏ࠄ⬅᪡㋏㒳㗙㋏㒳Ꮉˈࠊℷབⱘ
䇈ᯢDŽ䖭ϔण䆂ᖙ乏⬅ਃࡼ᳡ࡵ㗙䖤㸠ᯊⱘ';(偅ࡼᑣѻ⫳ˈᑊϨৃ㛑া㛑';(⸔Ϟ䖤
⫼DŽ䗮䖛ܕ䆌ϔϾ⬅ᓩᇐ᳡ࡵ偅ࡼ఼ѻ⫳ⱘण䆂ˈᕜᰒ✊ˈ䖭⾡ᢑ䈵ण䆂ϡӮᣕ㓁ᄬˈᔧᑇ
ৄⱘਃࡼ᳡ࡵ㹿ᓩᇐࠄϔϾਃࡼⳂᷛˈ՟བ᪡㋏㒳DŽ
ᔧℸण䆂⫼ᴹ䆓䯂㋏㒳㽕∖ᶤϾਃࡼⱘ䆒ᯊˈབᵰℸᯊ䖬≵᳝䎇ⱘ偅ࡼᑣ㹿߱ྟ࣪
དˈ䙷М䖭ܓण䆂ᇚӮ⏏ࡴ偅ࡼᑣࠄ䇗ᑺⱘ䯳߫ЁᑊϨᇚ䖨ಲࠊᴗಲࠄ䖭Ͼ䇗ᑺᑣDŽϔ
ᮺ䖭Ͼ㹿㽕∖ਃࡼⱘ䆒ৃҹ⫼њˈ䙷М䖭Ͼᓩᇐਃࡼ䆒ৃҹ⫼ᴹ㺙䕑ᑊϨ䇗⫼᪡㋏㒳
㗙ϔϾ㋏㒳ᅲ⫼ᑣDŽ
ব䞣㒧ᵘण䆂
ℸব䞣㒧ᵘण䆂ᰃЎ᳡ࡵᦤկ᠔㽕∖ᕫࠄⱘ䆒㕂ⱘ⦃๗ব䞣DŽ䖭ϔण䆂ᖙ乏⬅䖤㸠ᯊⱘ
';(偅ࡼᑣѻ⫳ˈᑊϨৃ㛑';(⸔Ϟ㹿䖤⫼DŽ䖭Ͼ偅ࡼᑣ䋳䋷߱ྟ࣪(),䖤㸠ᯊ᳡ࡵ㸼ⱘ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ⳟ䮼⢫䅵ᯊ఼㒧ᵘण䆂
ⳟ䮼⢫䅵ᯊ఼㒧ᵘण䆂⫼Ѣⳟ䮼⢫䅵ᯊ఼ᑣˈᑊϨᔧᓩ⫼ⳟ䮼⢫䅵ᯊ఼ᯊᄬټϔϾহᶘDŽ
䖭ϔण䆂ᖙ乏⬅ਃࡼ᳡ࡵ㗙䖤㸠ᯊⱘ';(偅ࡼᑣѻ⫳ˈᑊϨৃ㛑া㛑';(⸔Ϟˈ㗙ѻ
⫳݊ᅗ';(㒧ᵘण䆂ⱘ';(偅ࡼᑣϞ䖤㸠DŽᔧⳟ䮼⢫䅵ᯊ఼㒜ℶᯊˈབᵰϔϾᑇৄˈᏠᳯᠻ㸠
⡍ᅮᑇৄⱘ㸠Ўᯊˈ䙷Мࣙᠻ㸠%'6㒧ᵘण䆂ⱘ';(偅ࡼᑣᇚӮՓ⫼ℸण䆂ⱘ
5HJLVWHU+DQGOHU ᳡ࡵDŽ
ℸण䆂Ўᠻ㸠ਃࡼ᳡ࡵ6HW:DWFKGRJ7LPHU ᦤկ᠔䳔∖ⱘ᳡ࡵDŽᅗᦤկⱘ᳡ࡵ⫼ᴹ䆒㕂
ਃࡼⳟ䮼⢫䅵ᯊ఼Пࠡㄝᕙⱘᯊ䯈䞣ˈᅗгᦤկ᳡ࡵ⫼ᴹᄬټᔧਃࡼⳟ䮼⢫䅵ᯊ఼ᯊ䇗⫼ⱘϔ
ϾহᶘDŽℸण䆂ৃҹ䗮䖛Փ⫼џӊ䅵ᯊ఼఼ਃࡼ᳡ࡵᴹᠻ㸠ⳟ䮼⢫䅵ᯊ఼ˈгৃҹՓ⫼㞾ᅮ
Н⹀ӊᠻ㸠ⳟ䮼⢫䅵ᯊ఼DŽᔧⳟ䮼⢫䅵ᯊ఼㹿ਃ⫼ˈ䙷МࠊᴗᇚѸ㒭Пࠡ㹿ᄬⱘټহᶘDŽབ
ᵰПࠡ≵᳝ᄬټহᶘˈ㗙ᄬⱘټহᶘ㹿䖨ಲˈ䙷М㋏㒳ᇚ㽕䇗⫼䖤㸠ᯊ᳡ࡵᑣ5HVHW6\VWHP
ᴹॳDŽ
Protocol Interface Structure
typedef struct _EFI_WATCHDOG_TIMER_ARCH_PROTOCOL {
EFI_WATCHDOG_TIMER_REGISTER_HANDLER RegisterHandler;
EFI_WATCHDOG_TIMER_SET_TIMER_PERIOD SetTimerPeriod;
EFI_WATCHDOG_TIMER_GET_TIMER_PERIOD GetTimerPeriod;
} EFI_WATCHDOG_TIMER_ARCH_PROTOCOL;
RegisterHandler-ᄬټহᶘˈᔧਃ⫼ⳟ䮼⢫䅵ᯊ఼ᯊˈᄬټ㹿䇗⫼ⱘϔϾহᶘDŽ
SetTimerPeriod䆒㕂䅵ᯊ఼਼ᳳˈ䆒㕂ਃ⫼ⳟ䮼⢫䅵ᯊ఼Пࠡㄝᕙⱘᯊ䯈ҹ㒇⾦Ў
ऩԡDŽབᵰ䆒㕂ⱘࡳ㛑㹿ᬃᣕˈ䙷Мⳟ䮼⢫䅵ᯊ఼਼ᳳ㹿ಯ㟡Ѩܹࠄ㹿ᬃᣕⱘ᳔䖥ⱘⳟ䮼⢫
䅵ᯊ఼਼ᳳDŽ
GetTimerPeriodᕫࠄ䅵ᯊ఼਼ᳳˈপᕫਃ⫼ⳟ䮼⢫䅵ᯊ఼Пࠡˈ㋏㒳ᇚ㽕ㄝᕙⱘᯊ䯈
ҹ㒇⾦ЎऩԡDŽ
ᅠ3DJH
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
11 ゴ
ֵᙃӴ䗦
᳔㒜ˈ⾡ᄤ⾡ϟњˈ▇߽ѮⱘೳഄϞߎ⦄њⳈ㒓⧚ᗻⱘ᳆㒓DŽⳈ㒓ⱘࡲ݀ᅸᮙ佚DŽ催䗳䏃ᕫ᳆㒓
℠࠻䰶ⱘᑇ⒥ⱘᓻ㒓DŽ᳔䫭㓐ᴖ㗠জ㊒ⱘԩᅲԧDŽ
—Michael Frayn
ᴀゴЏ㽕݇Ѣ⸔ᶊᵘ䚼ߚˈ݇Ѣ)UDPHZRUNৠㄝⱘㅵ䘧ˈ⬉ˈᑳֵ᭭ᙃ㋏㒳Ⲭ㒩៤ⱘ
⦄ҷ࣪Ϫ⬠DŽϢкЁ݊Ҫゴ㡖ϡৠⱘᰃˈϡৠⱘᵘ䗴ᰃ⬅ὖᗉ㒘៤ⱘˈ㗠ϡᰃࡳ㛑DŽҪӀгᢹ
᳝⬅⦃๗䳔∖᠔ѻ⫳ⱘⳌԐⱘԧ㋏DŽҪӀП䯈ⱘϡৠѢ㹿ਞⶹⱘ䳔∖㹿໘⧚ⱘ᭄ⱘऎ߿˖
䚼ߚ᠓ሟ䛑᳝⬉䏃∈ㅵҟܹˈԚᰃᇚϸ㗙⏋ϔ䍋᳝߭ᆇ᮴߽DŽ
ᴀゴᇚ䅼䆎ⱘᵘ䗴ࣙᣀ˖
ব䞣ˈЎ㋏㒳᭄ⱘ䴲ᯧথᄬټϢ᪡㋏㒳䗮ֵⱘ䗮䘧DŽ
ᦵऩ ܗ+2%V 3(,ࠄ';(䕀ᤶⱘЏ㽕ㅵ䘧DŽ
᭄ЁᖗˈЎ᱖ᄬ⫼Ѣ㌃⿃Ӵ᪁᭄ˈЏ㽕ᰃ乘ᳳⱘ䚼⍜㗫DŽ
ҎᴎѸѦᶊᵘˈ⫼Ѣ⫼᠋݊Ҫᵘ䗴䜡㕂ഫⱘ䲚Ёㅵ⧚DŽ
ⳌԐᏂᓖ
䖭䞠᠔ᦣ䗄ⱘᵘ䗴䛑᳝ҹϟ⡍ᗻ
䛑ᰃ᭄ㅵ䘧DŽৃ䇗⫼ষ˄↨བण䆂៤ਬߑ᭄˅ᴀ䑿া㛑Ўਃ⫼᭄Ӵ䕧ഫ䯈ⱘ
ㅵ⧚DŽӴ䕧䖛Ё≵᳝ⱘ᭄㓪䕥DŽҪӀৃ㛑ᬃᣕ݊Ҫᵘ䗴ᴹخ㓪䕥ࡼˈ㾚ᵘ䗴㗠ᅮDŽ
䖭ℷབ⬉䚼䮼ӮЎњᦤ催ᬜ⥛ˈҢথ⬉ॖࠄԣᅙӴ䕧䗨Ёᬍব⬉य़DŽ䛑Ў᭄ᕜདഄᅮН݊
ѻ⫳㗙Փ⫼㗙DŽ䖭ᛣੇⴔˈ՟བˈⳌ݇ⱘ䏃⬅䗝ᢽֵᙃⱘᦤկ㛑ՓՓ⫼㗙⏙Ἦഄ⹂ᅮ᭄
ࣙⱘ䗖⫼ᗻDŽ
᳝ࡽѢޣᇥഫП䯈ⱘ㑺ᴳDŽ՟བ, ݙᄬⱘ߱ྟ࣪PEIMDŽ݊Ꮉⱘ䏃ᕘЁˈӮথ⦄݇
Ѣৃ⫼ⱘݙᄬᦦῑ㋏㒳Ёݙᄬ㉏ൟⱘ᳝⫼ⱘֵᙃDŽ≵᳝ӏԩ݊ҪഫՓ䖭ѯ᭄ব៤ৃ⫼ⱘˈ
Ў䆺㒚Ⳃᔩⱘϔ䚼ߚᇍ㋏㒳ㅵ⧚ਬᴹ䇈ˈᰃ䴲ᐌᅱ䌉ⱘDŽՓ⫼HOBˈPEIMৃҹ㓽ᇣࠄDXEᏂ
䎱DŽՓ⫼㗙ৃҹҢDXEӴ䕧᭄ࠄ᭄ЁᖗDŽ᭄Ёᖗᇕ㺙ⱘՓ⫼㗙ৃҹ䗮䖛᠔䳔㽕ⱘ᪡㋏
㒳乘᪡㋏㒳ষᦤկ᭄DŽ
᳝ࡽѢᬒᆑѻ⫳㗙Փ⫼㗙᠔ᖙ乏䙉ᅜⱘᷛޚDŽ↨བݙᄬ߱ྟ࣪PEIMˈ䖭ѯ᭄㛑㹿ӏ
ԩⳌѦᢉ㾺ⱘ㋏㒳ㅵ⧚ᷛޚ᠔Փ⫼DŽݙᄬPEIM≵᳝ᖙ㽕ⶹ䘧᳔㒜ⱘՓ⫼㗙ᰃIPMIˈSMBIOS
㗙ϔѯᮄⱘষDŽ
䛑㛑ℷᐌᎹ㗠ϡ䳔㽕䇗⫼Ѣ⸔ण䆂ⱘ᳡ࡵDŽPEIЁⱘഫৢ䴶ⱘഫৃҹ߽⫼Ў
䖭Ͼ䰊↉ᅮНⱘষ㗠ঞᮽഄ䖤㸠DŽ䆌ᚙމϟˈህ䲒ҹ߯ᓎ᳡ࡵˈᑊϨ߽⫼⸔ण䆂ˈ䖭
Ͼሲᗻ↨䕗ᆍᯧ⍜༅DŽϔᮍ䴶ˈ ҡ✊ᰃ䴲ᐌ䞡㽕ⱘDŽᮽᳳⱘDXE偅ࡼ㛑ᦤկ݊䜡㕂ֵᙃ᭄
㒭HII᭄ᑧDŽ՟བˈ 偅ࡼ㛑ᦤկ᭄ˈӬܜѢফᓔྟ䇋∖DŽϔᮺ偅ࡼⱘ⹂ᬊࠄᓔྟ䇋∖
ᑊ߫В݊Ⳍ݇⹀ӊˈᅗৃҹᮄ䜡㕂ֵᙃᴹᦣ䗄DŽ݇Ѣ䆒䅵ⱘ䚼ߚ⹂ᅲ䳔㽕䭓䖰㗗㰥ˈ᮴䆎
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᰃ䗮⫼ⱘԧⱘ⠜ᴀ䅽᳔㒜⫼᠋㛑⧚㾷DŽ
䛑ᰃԡ㕂⣀ゟˈϡফऎඳ䰤ࠊDŽ᠔ᦤկⱘ᭄䛑ৃҹݙᄬϾԡ㕂⿏ࡼDŽড䖛ᴹˈ䖭г
ᕅડࠄ᠔㽕Ӵ䕧ⱘ᭄㒧ᵘᑣষϢ偠䆕⌟䆩ϡ㛑ᠻ㸠ⱘ䳔∖DŽᇸ݊ᰃᣛ䩜ⱘᔶᓣ
MY_STRUCT *MyPointer;
ৠϔ᭄㒧ᵘЁҢϔϾ⚍ࠄϔϾ⚍ᰃ㹿⽕ℶⱘDŽ䆹ᣛ䩜Ӯবᕫ᮴ᬜབᵰ䆹㒧ᵘ㹿⿏ࠄ
ϔऎඳDŽⳌডⱘˈ㒧ᵘᑨ䆹Փ⫼㛑㹿ᣋ䋱ⱘ㞾Ⳍ݇ⱘ⿏أ䭓ᑺऎඳDŽ䖭Ͼ㽕∖г䆌᳝ѯ
ϡৃᗱ䆂DŽϔϾHOBܹষᦣ䗄ⱘᰃᣛ䩜ᔶᓣⱘRAMⱘ乊ッˈ䖭ϔ㉏ᣛ䩜ᰃܕ䆌ⱘЎᅗᣛⱘ
ᰃᴀ᭄㒧ᵘⱘϡৃবⱘԡ㕂DŽ
᮶✊䖭ѯᵘ䗴䛑᳝䖭Мⱘ݅ৠ⚍ˈЎҔМҪӀ≵᳝㹿ᭈড়ࠄϔϾऩ⣀ⱘᶊᵘਸ਼˛ᔧ✊ᄬ
ϔѯ⧚⬅ˈ䖭㟈ϞϔϾජᏖ䞠ЎҔМϡℶϔ⾡ऩϔ㉏ൟⱘ⠽⧚⸔䆒ᮑⱘ⧚⬅ᏂϡDŽ
᳝ϔѯग़㋴DŽ㞾ҢEFI᳔߱ⱘ䆒䅵ˈĀব䞣āᏆ㒣៤ЎEFI㾘㣗ⱘϔ䚼ߚDŽⱘᵘ䗴ᰃЎ
њFramework㗠থᯢⱘˈ䯈ⱘ㸼⦄EFIЁ㗙ḍᴀϡDŽ䚼ߚ᱂䘡Փ⫼ⱘĀব䞣āᰃ∌Йϡবⱘ
˄ेՓ≵᳝⬉⑤ˈ䆹ؐгֱᣕ᳝ᬜ˅㗠݊Ҫⱘᅲ՟߭Ӯ↣ਃࡼⱘᯊ䞡ᮄ߯ᓎDŽ
䖭ѯᵘ䗴㸼⦄ߎϡৠⱘࡳ㛑DŽHOBs 䏇䖛ऩ⣀ⱘ䰊↉䖍⬠DŽPEIぎ䯈ᮑࡴⱘ䰤ࠊϡݡ䳔㽕DXE
Ё㸼⦄ߎᴹˈĀ᭄Ёᖗāᰃ᳔ϔ㠀䗮⫼ⱘᵘ䗴DŽҪ䗮⫼ⱘᴀ䋼ᰃ݊ད໘ԚгՓ݊ϡ䗖ড়ѢHII᭄ˈ
HII᭄Ўࡴ㑺ᴳৃ㓪䕥ⱘ᭄㉏ൟᦤկᬃᣕDŽ
ব䞣
Āব䞣āᰃ EFI ᪡㋏㒳П䯈⍜ᙃӴ䗦ⱘᅲԧˈᅗг᳝ৃ㛑⫼Ѣ Framework ᴀ䑿DŽϢᴀ
ゴ݊ҪᴎࠊϡৠˈĀব䞣ā᮴䆎 ExitBootServive ࠡৢ䛑ᰃৃҹ㹿䆓䯂ⱘDŽ
Ўњ⧚㾷ᗢḋՓ⫼Āব䞣āˈ 佪⧚ܜ㾷ЎҔМҪӀ㹿⿄ЎĀব䞣āᰃᕜ᳝ᐂࡽⱘDŽUnix ᦤ
կ⫼᠋᠔䇧ⱘ⦃๗ব䞣ˈ⦃๗ব䞣ᰃӏᛣᄫヺ݊Ҫӏᛣ˄ASCII˅ᷛㅒ㒧ড়㗠៤ⱘDŽ✊ৢᑨ⫼
ᑣ㛑ᇏᡒᷛㅒᡒࠄᄫヺІDŽ݊ৢˈ⦃๗ব䞣ᰃ Fortran˄⽣⡍݄䇁㿔˅䘏䕥ऩܗᵘ䗴ট
དⱘ⠜ᴀ˄՟བˈ5 ∌䖰ᰃᷛޚ䕧ܹˈ6 ∌䖰ᰃᷛޚ䕧ߎ˅DŽ
EFIĀব䞣ā⫼ѢϢ⦃๗ব䞣ϔḋⱘⳂⱘⳌԐⱘᮍᓣDŽҪӀⱘੑৡ˄keys˅᮶ᰃ GUID г
ᰃ Unicode ᄫヺІDŽ䛑ᰃৡᄤⱘϔ䚼ߚˈг䛑ᰃᖙ乏ᦤկⱘDŽ
GUID EFI Framework Ϣ݊Ҫഄᮍ᳝ϔḋⱘⳂⱘ˖ֱ䆕݊⣀ϔ᮴Ѡᗻ䙓ކܡさDŽ✊
㗠ˈҹৠḋৡᄫੑৡⱘϾĀব䞣āҡ✊ᰃ᳝ᬜⱘDŽ՟བˈᶤᑇৄг䆌Ӯ䗝ᢽ݊䆒㕂䜡㕂᭄
ᄬټᶤϔҹĀSetupāੑৡⱘ⹂ᅮⱘ GUID ব䞣ˈৠᯊᄬ݊ټ咬䅸ؐϔϾҹĀDefaultsā
ੑৡⱘⳌৠⱘ GUID ব䞣DŽ
Āব䞣ā᭄˄ؐ˅㒧ᵘᰃ⬅᭄ѻ⫳㗙Փ⫼㗙݅ৠᅮНⱘDŽ
Āব䞣āⱘՓ⫼
Ā ব 䞣 ā ৃ ҹ ⬅ SetVariable ߯ ᓎ 㗙 ᮄ ˈ 䗮 䖛 GetVariable 䞡 ᮄ ᕫ ࠄ 䗮 䖛
GetNextVariableName থ⦄DŽ䖭ѯ䛑ᰃᅲᯊ˄gRT˅ࡳ㛑DŽ
Āব䞣āⱘৃবᗻ
Āব䞣āҹϸ⾡㉏ൟᄬ˖ᯧথⱘ䴲ᯧথⱘDŽ䴲ᯧথⱘĀব䞣ā㋏㒳䞡ਃЁֱ
ᄬϟᴹ㗠ᯧথⱘ߭϶༅DŽ䖭ᅠܼপއѢ㋏㒳䆒䅵㗙ᴹ⹂ֱ䴲ᯧথⱘĀব䞣āӮҹ᳝ᬜⱘᆍ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᇣⱘ㗗䞣
䚼ߚĀব䞣ā䛑ᰃ䴲ᯧথⱘDŽ䖭ᇚ㒭㋏㒳䆒䅵㗙ᏺᴹϔϾ䯂乬DŽᘏԧϞ䰸њ䴲ᐌᴖ
ⱘ㋏㒳ˈ㋏㒳ᓎゟП߱ˈ㋏㒳⫼Ѣᄬټ䴲ᯧথ᭄ⱘぎ䯈ᰃᅮⱘDŽড䖛ᴹˈᑨ⫼ᑣϡ
㛑Փ⫼ӏᛣⱘӏᛣ᭄䞣ⱘĀব䞣āDŽଃϔⱘ㾷އᮍ⊩ᰃᢦ㒱䍙䖛ব䞣ᄬټぎ䯈ⱘ䇋∖ˈℸ
ᖙ乏䇗⫼ᯊ᳝ᬜഄՓ⫼᳝䰤ⱘ䌘⑤DŽ
EFI 㾘㣗≵᳝ԧᅮН㋏㒳᠔䳔㽕ব䞣ぎ䯈ⱘᅲ䰙᭄䞣DŽ᳔䞡㽕ⱘᰃˈ㾘㣗䰤ࠊᅮН㋏㒳
䖤㸠ᯊᖙ乏ৃ⫼ⱘ᭄䞣DŽ䖭ḋⱘⳂⱘᰃЎ⡍ᅮ㉏ൟⱘ㋏㒳ᕜৃ㛑↨݊Ҫⱘᑲˈℷབϔᑈ
㹿䅸ЎᰃĀᑲāⱘˈ㢹ᑆᑈৢৃ㛑ᰃĀⳌᔧⱘ␎ᇣāDŽ
᭛ḷЁ᳝ϔ⚍ϡᯢ⹂ⱘᰃ䇕ᇚՓ⫼ব䞣DŽᇸ݊ᰃˈՓ⫼ব䞣ᇍѢৃ䗝 ROMs ᰃᕜᓩ
ⱘˈԚҪӀ᳝Ҏֵ᳡ⱘ⧚⬅ˈҪӀⱘ䜡㕂ऎඳᄬټ㞾Ꮕⱘ᭄DŽ
佪ˈܜབᵰ䆹व᠔ࣙⱘৃ䗝 ROM 㹿⿏䰸ˈ䆹ৃ䗝 ROM ⬭ব䞣ⱘӏԩ᭄Ꮖ㒣༅
ᬜDŽ≵᳝ࡲ⊩㛑⹂ᅮব䞣ⱘ᭄াᰃ㹿߮⿏䰸ⱘव᠔Փ⫼DŽ
Ѡˈབᵰवⱘ䜡㕂ֵᙃ⦄ᄬټব䞣ぎ䯈ˈϔᮺ䆹व⿏ࠄϔϾᮄⱘ㋏㒳ˈवӮ϶༅݊
᠔᳝䜡㕂ˈ䖭ḋᇍ⫼᠋ϡᰃ⡍߿টདDŽ
ℸˈৃ䗝 ROMs ֱᄬҪӀⱘ᭄ࠄব䞣㒭㋏㒳䆒䅵㗙ᦤߎϔϾ≵᳝ᯢᰒㄨḜⱘ䯂乬˖ᑨ
䆹㒭ৃ䗝 ROMs ߚ䜡ᇥぎ䯈˛᳔ᐌ⫼ⱘᮍ⊩ᰃ؛䆒ҪӀϡ䳔㽕ӏԩぎ䯈DŽ⦄ˈϸϾ䋳䴶ⱘ
㒧ᵰ៤Ўৃ㛑ˈ㗙ৃ䗝 ROM ϡ㛑ᄬ݊ټ䜡㕂⬅Ѣব䞣ぎ䯈Ꮖ㒣⒵њˈ㗙ৃ䗝 ROM 㛑
៤ࡳᄬ݊ټ䜡㕂㗠᪡㋏㒳ϡ㛑DŽ
᱂䗮ব䞣
ᨬ㽕
䇼ᜢՓ⫼ব䞣DŽ
ḹ䰊↉Ꮒ䎱˖ᦵऩ˄ܗHOBs˅
Framework ᅮНњϾਃࡼ䰊↉DŽᶤѯ䰊↉П䯈ⱘ䖍⬠↨݊ҪⱘᅮDŽ䖍⬠П䯈᳔ᯢᰒ
ⱘߚ℻ᰃ PEI DXE 䰊↉П䯈DŽPEI ᰃ RAM 䰤ࠊⱘ⦃๗㗠 DXE ᰃৃҹՓ⫼ড়⧚ݙᄬ᭄䞣ⱘ
⦃๗DŽᴀⱘὖᗉᰃᅠ៤ PEI 䖛Ё䆹ˈⱘخএ㦋ᕫݙᄬˈ✊ৢࠄ DXE ⱘᑓ䯨ⱘぎ䯈DŽ
PEIˈݙᄬ߱ྟ࣪Пࠡ䖛Ёˈ㌃⿃᭄ˈ䖭ѯ᭄ᰃ DXE Framework Ў߱ྟ࣪䚼
ߚ᠔䳔㽕ⱘ DXE 偅ࡼЎ݊ᠻ㸠䖛᠔䳔㽕ⱘDŽ᭄ᖙ乏ᅠ៤Ң PEI ࠄ DXE ⱘ᳝ᬜӴ䗕DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
✊㗠 PEI ফ݊Ԣݙᄬ⦃๗ⱘ䰤ࠊˈ䳔㽕ϔϾড়䗖ⱘݙᄬᄬټॳྟ᭄Ӵ䗕ᴎࠊDŽᦵऩ
˄ܗHOBs˅ᰃЎℸ᳡ࡵⱘϔϾᴎࠊDŽ
䙉ᅜ PHIT
ᦵऩ˄ܗHOB˅᭄㒧ᵘᰃ㹿㒘ᓎЎϔϾ䖲㓁ݙᄬ㣗ೈˈࣙϔϾᏆⶹⱘিخ䰊↉ᦵ
ֵᙃ㸼˄PHIT˅ⱘ༈᭛ӊϟᴹ݊Ҫ HOBsDŽ↣Ͼ HOB ᢹ᳝ϔϾ݀݅༈᭛ӊˈ䆹᭛ӊࣙϔ
Ͼܕ䆌ㅔऩ HOB ᠿᦣⱘ䭓ᑺDŽPHIT ᠔᳝ᔧࠡⱘ HOB ϔ䍋㹿㒳⿄Ў HOB ߫㸼DŽ
PHIT ᴀ䑿ⱘԡ㕂䗮䖛 PEI Framework 䇗⫼˄GetHobList˅㗠ᴹⱘDŽPHIT ᰒ⼎њЎᄬټ
HOBs ᳔ৃ⫼ݙᄬⱘഄഔ HOB 㸼ⱘᔧࠡッDŽ⏏ࡴ HOB ᰃ䗮䖛䇗⫼ CreateHob ᴹᅲ⦄
ⱘDŽ䆹᳡ࡵ໘⧚䇗ᭈ PHIT ッᣛ䩜ࠊᮄⱘ HOB ᭄ⱘᎹ
䰸њ PHIT Ёⱘᣛ䩜ˈ HOBs ϡᑨ䆹ࣙᣛ݊Ҫ HOBs ⱘᣛ䩜DŽ䖭ᰃЎ䚼ߚҢ PEI ࠄ
DXE ⱘ HOBs ⱘ໘⧚䖛ˈ⍝ঞࠄᇚ HOB ߫㸼ࠊࠄⳳℷݙᄬЁᮄⱘԡ㕂ˈ䖭ѯԡ㕂䚼ߚ
ᔧ✊ᰃϡৠⱘഄഔDŽࠊⱘ䖛Ёˈ HOBs П䯈ⱘᣛ䩜ϡӮ㹿ᮄˈ᠔ҹᣛ䩜㸼⦄Ў᮴ᬜ
ⱘDŽᣛ䚼 HOBs ऎඳⱘᣛ䩜䗮ᐌᰃ᳝ᬜⱘDŽ՟བˈPEI 䖛থ⦄ⱘ RAM ⱘ佪ഄഔᰃϔϾᣛ
䩜ˈҢϔϾഄᮍࠄϔഄᮍࠊ HOB ϡӮՓഄഔ᮴ᬜDŽ
HOBs ⱘՓ⫼
DXE Ёⱘ HOBs
ᨬ㽕
㡖㑺Փ⫼ĀHOBsāDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ҎᴎѸѦᶊᵘ˄HII˅
䅵ㅫᴎা㛑䆚߿㣅䇁˄ϡᰃ䴲ᐌད˅ⱘᯊҷᏆ㒣㒧ᴳDŽ䅵ㅫᴎᑨ䆹㹿؛ᅮЎ⫼᠋টད㗙
㒭㒜ッ⫼᠋དⱘԧ偠DŽҪӀᑨ䆹؛ᅮЎ˄⫮˅ৃㅵ⧚ৃֵ䌪DŽ
BIOS Ңᴹ≵᳝ҹϔϾདⱘ⫼᠋⬠䴶ЎҎӀⱘ᠔䅸䆚DŽROM ᆍ䞣᳝䰤њˈབᵰᬃᣕᴖ
ⱘᔶ⬠䴶ˈᰒ⼎ষ᳝ⱘϡৃ乘㾕ᗻDŽ
䆌 HII ⍝ঞⱘ乚ඳᏆ㒣㹿᪡㋏㒳ⱘৠᖫӀⷨお㾷ᵤњˈ㗠ϨҪӀ᳝Ӌؐⱘথ⦄Ꮖ㒣ᔶ
៤ⱘ Framework ⱘᬃᣕⱘޚDŽ
Framework ᇚ䜡㕂ᬃᣕߚЎҹϟ 4 ⾡㉏ൟ˖
䬂Ⲭ˖ܼ᪡㋏㒳ㄝᬜ䬂Ⲭᢑ䈵ὖᗉᰃ䍙ߎњӊ乚ඳDŽϔᮍ䴶ˈFramework ᦤկ䆹ᬃ
ᣕ䳔㽕ᓎゟᴀഄ࣪䬂Ⲭӊሖ䴶ⱘᬃᣕDŽ
ᄫԧ: BIOS ϡϔḋˈEFI 㾚乥ষᴀ䑿ϡᏺ᳝ѻ⫳ᄫヺⱘᴎࠊDŽ
ᄫヺІ˖ᄫヺІᴀഄ࣪ᮍᓣᔧҞⱘ䇁㿔⦃๗ᰃ㹿ᕜདⱘ䅸䆚ⱘ᱂䘡ⱘDŽ䗮䖛㒧⚍݇㘨
ᄫヺІᰃᕜ᱂䘡ⱘDŽг᳝՟˄ڣ᮹ᳳˈᯊ䯈ˈᔧഄ䋻Ꮥ˅ᰃᑓЎҎⶹⱘDŽ
㸼Ḑ˖䱣ⴔ HTML 䱣ৢⱘ XML ঞ݊ৢ㓁ⱘ᱂ঞˈᷛ䆄䇁㿔Ꮖ㒣Ў䆌Ҏ❳ᙝDŽ✊㗠䖭
ѯ䇁㿔᮶ϡᰃᯢᰒⱘぎ䯈催ᬜ⥛ⱘˈг≵᳝ᡞҪӀᴀ䑿ᴀഄ࣪DŽFramework ᦤկݙ䚼㸼Ḑ㸼⼎
⊩ˈ䖭⾡䇁㿔㛑㹿䕀࣪Ў᱂䗮ᷛ䆄䇁㿔ৢԚҡ✊ֱᣕ݊ᇍӊ⦃๗ⱘ⡍ᗻDŽ
HII ᶊᵘᅮНњ᭄ⱘ㒧ᵘˈᦣ䗄䖭ѯ᭄䗮䖛ࡼᗕ߯ᓎ HII ᭄ᑧ݇㘨ण䆂ᴹ䋵⤂䆓
䯂䖭ѯ᭄DŽ
ҹϞ䖭ѯ㒧ড়䍋ᴹᦤկϔϾᕜདⱘᶊᵘˈ䖭Ͼᶊᵘ᮶㛑⒵䎇㒜ッ⫼᠋ⱘ䳔∖ৠᯊг⒵䎇
њㅵ⧚ⱘ䳔∖DŽ
ᴃ䇁
䰙࣪˖ヺ݊Ҫ䴲ᴀഄ⡍⅞࣪ⱘᵘ䗴ⱘՓ⫼ᰃЎњᇱ䆩߯䗴ϔϾ᠔᳝䇁㿔䛑㛑Փ⫼
ⱘষDŽ↨བذℶヺোヺˈ㪱㡆ֵᙃⱘՓ⫼哴ᷛⱘՓ⫼ˈ䛑ᰃ䰙࣪ⱘDŽ䗖ড়ϔѯㅔऩⱘ
ষ˄↨བ䗝ᢽ䇁㿔ᯊऎ˅DŽ
ᴀഄ࣪˖Ўњ⡍ᅮ䇁㿔㗙ഄऎ㗠Փ⫼ⱘᵘ䗴ᴹᬍݭষDŽ
ᷛᖫᔶ: 䴲䷇ᷛкݭ䇁㿔ˈڣЁ᭛ˈ᮹䇁䶽䇁˄ĀCJKā˅䛑ᰃՓ⫼ϔϾᄫϔϾᷛᖫˈ㗠
ϡᰃϔϾໄ䷇䷇㡖ϔϾᷛᖫDŽ
䜡㕂ൟ
བ 11.1 ᠔ᰒ⼎ⱘ䜡㕂ˈᰃ⦃㒩ⱘൟDŽਃࡼП߱ˈ偅ࡼ䇏পᅗӀ䴲ᯧথ᭄ᴹ䜡㕂݊
⹀ӊDŽгᦤկࠄ HII ᭄ᑧⱘ᭄ࣙDŽབᵰ setup 䖤㸠ˈᅗ⌣ڣ㾜఼䆓䯂㔥キϔḋ䆓䯂᭄
ᑧDŽ✊ৢᅗᇚ⫳៤ⱘ䜡㕂থ䗕ࠄ偅ࡼⱘ NVRAMDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
11 1 Configuration Flow
偅ࡼৃҹ㞾Ꮕ乘߯ᓎⱘ᭄ˈ✊㗠᭄偅ࡼ䳔㽕ਞࡼᗕ㦋প᭄DŽHII ᭄ᑧᕜདഄᬃ
ᣕ䆹㽕∖DŽ᳔ৢˈᶤѯ᭄ৃ㛑བℸഄࡼᗕҹ㟇Ѣ↣⾦䛑Ӯᬍব˄᳔ᯢᰒⱘᰃᅲᯊᯊ䩳ˈᅲ䰙
ϞᰃЎ HII ⡍߿ⱘ՟ᄤDŽ㋏㒳ⱘ⏽ᑺᰃϔϾ՟ᄤ˅DŽ䖭⾡ᚙމϟˈIFR Ўњ㒭偅ࡼᦤկᅲᯊ
ֵᙃᬃᣕ䇗⫼䖨ಲˈ㱑✊᳝䖭Ͼࡳ㛑ˈϡ哧ࢅࠄ໘䛑⫼DŽ
ϡ哧ࢅՓ⫼䇗⫼䖨ಲⱘ⧚⬅ᕜ䞡㽕DŽ䖭Ͼൟܕ䆌 HII ᭄ᑧⱘ݊Ҫ⫼᠋DŽϢ䖰ਃࡼᑨ⫼
ᑣѸѦⱘ偅ࡼг㛑䗮䖛 HII ᭄ᑧ˄ĀᦤপāੑҸҹᷛⱘޚᔶᓣ㦋ᕫ᭄˅থ䗕ᬊᬍ
ⱘ䜡㕂䖨ಲ᭄DŽ
བ 11.2 ᠔ᦣ䗄ˈᦤপⱘ᭄㛑ЎѢ᪡㋏㒳ⱘᑨ⫼ᑣ᠔Փ⫼ˈ㗙ᰃ䗮䖛᪡㋏㒳
⌣ⱘݙ㾜఼ᑣˈ㗙ᰃ䗮䖛Ўњㅵ⧚㗠Փ⫼ⱘ㛮ᴀ䇁㿔ᴹ㸼⦄DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᕾ⦃ӮবᕫࡴᴖˈԚϡᰃЎњ䖭Ͼ偅ࡼˈҢ䖭⾡∈ᑇⱘᬃᣕˈ偅ࡼᄬټᰃᕜᕏᑩⱘ
ᢑ䈵DŽ
݇䬂ᄫ
Framework ܼ䬂Ⲭᴀഄ࣪ⱘᴖᗻ⫼᠋টད⬠䴶ⱘ䳔∖П䯈ᓎゟᑇ㸵DŽ
䯂乬
Framework ⱘ咬䅸䬂Ⲭᰃ U.S.㣅䇁䬂ⲬDŽ䚼ߚ㒜ッ⫼᠋≵᳝ᛣ䆚ࠄ䖭ϔ⚍ˈЎ䚼ߚ
setup ᓩ᪢Ꮖ㒣䴲ᐌ䰙࣪˄␌ᷛ䬂ˈFn 䬂ˈTab 䬂ˈ᭄ᄫ䬂˅ҹ⒵䎇䖭ѯ䳔∖DŽ
क݁䖯ࠊ᭄ᄫˈᆚⷕˈϛ㛑䩹࣭ㄝⱘ䕧ܹՓ䰙࣪ϡৃ㛑DŽẔᶹ U.S.㣅䇁䬂Ⲭ⊩䇁䬂Ⲭˈ
៥Ӏৃҹথ⦄ QˈA Z 䬂ϡৠⱘԡ㕂DŽӴ㒳ⱘ˄ĀPS/2ā ˅䬂Ⲭ USB˄HID˅䬂Ⲭ䛑ᰃḍ
䬂Ⲭԡ㕂䖨ಲ䬂Ⲭ䕧᭄ܹ㗠ϡᰃḍ䬂ᐑⱘᄫヺDŽ䖭ህᰃˈPS/2 䬂ⲬⱘĀ4ā㗙 USB 䬂
ⲬⱘĀ31ā㣅䇁䬂Ⲭ䛑㸼⼎Āaā ˈԚᰃ⊩䇁䬂Ⲭ䛑㸼⼎ĀqāDŽ⫼䫭䇃ⱘ䕀ᤶ㸼䕧ܹक݁䖯
ࠊ᭄ᄫТᰃϡৃ㛑ⱘDŽ
ᔶ᭛ᄫ䇁㿔ЁˈᴖᑺᇚӮᬒᕜסDŽ՟བ ˈ᮹䇁ЁˈKana ᄫヺᰃ䇁䷇ⱘˈԚ
ᰃ Kanji ैϡᰃDŽি خIMEs ⱘᴖᎹህᰃ⫼ᴹⲥЎ Kanji ㄝᬜⱘ Kana 䕧ܹDŽḍ⫼᠋
ⱘ㑺ᅮˈᇚᅗ䕀࣪Ў KanjiDŽ
ᴀᶊᵘ
Framework 㾷އᮍḜপއѢ؛䆒↣ϾҎՓ⫼ U.S.㣅䇁 IME ᬃᣕ˄䳔㽕 I/O ᭄⌕ᬃᣕ
ⱘܜ䖯⡍ᗻ˅П䯈DŽ
↣ϔϾ䬂ৃ㛑䛑᳝ಯ⾡䕀࣪˖≵᳝䕀࣪ⱘᣝ䬂Ԉ䱣 ShiftˈControlˈ Alt˄Gr˅ৠᯊᣝ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᄫԧ
ᄫヺІ
㋏㒳Ёˈᄫԧ䬂ⲬᰃЎ᠔᳝偅ࡼ᠔݅ѿⱘDŽᄫヺІ㸼Ḑᰃᇍᢹ᳝ᅗӀⱘ偅ࡼᴹ䇈ᰃ
ᴀഄⱘDŽ
ᬃᣕᴀഄ᳔࣪᱂䘡ⱘᮍ⊩ᰃᷛ䆄ᄫヺІ㋶ᓩˈ✊ৢЎ↣Ͼ⠛↉߯ᓎ䕀࣪DŽ HIIˈ㒧⚍ᰃ 16
ԡⱘˈ᭛ᴀⱘ⠛↉㹿⿄ЎᄫヺІDŽ
㒧⚍ᇚӮҹҢ 1˄1ˈ2ˈ3ˈ4…˅ऩ䇗ⱘ䭓ᮍᓣ㹿ߚ䜡DŽ㒧⚍ 0 ᰃЎϡᄬⱘᄫヺІ乘
⬭ⱘDŽ
ᄫヺІ᭄㒧ᵘ⬅ϔϾ༈᭛ӊˈϔϾ᭄㒘㋶ᓩᄫヺІᴀ䑿㒘៤ˈぎᄫヺ˄Unicode 催ᑺ
0x0000˅㒧ᴳDŽ
༈᭛ӊҹ ISO-639-2 Ḑᓣ˄㗙 3166ˈপއѢ UEFI ⱘ݈㟈˅䆹䇁㿔Ёⱘ᭛ᴀᴹᦣ䗄䖭
䇁㿔DŽ˄՟བ “Cymraeg,” ϡᰃ“Welsh,”˅
᭄㒘ᰃ䗮䖛ϸⱘס㒧⚍ؐᴹ㋶ᓩⱘˈℸЎ↣Ͼ偅ࡼܕ䆌 65ˈ535 ᄫヺІ—ᴀкЁ↨䖭
ϾⱘᄫヺІᰃহᄤDŽ16 ԡⱘܕ⿏أ䆌ᘏ݅䍙䖛 65ˈ535 ᄫヺDŽ
㱑✊偅ࡼ㹿㓪䆥ᯊˈ䚼ߚᄫヺІᕜৃ㛑ᰃ㹿䅸ⶹⱘˈϔѯᄫヺІা᳝偅ࡼ߱ྟ࣪ᯊ
ᠡᓔྟᰃᕜ᱂䘡ⱘDŽHII ᭄ᑧण䆂ᢹ᳝ᮄ߯ᓎᄫヺІⱘࡳ㛑DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
UEFI Ꮉ㒘Ҫϟ䴶ⱘᇣ㒘জϔ㗗㰥ᠽሩᮄЏ㽕ᰃЎњᦤ催य़㓽⥛DŽ
㸼Ḑ
㸼Ḑᰃ㟈Ϟ㗗㰥䙷ѯ໘⧚⫼᠋䕧ܹⱘᷛ䆄䇁㿔ᄤ䲚DŽᔧ䌁фݙᆍˈ฿ݭ䇗ᶹㄝㄝˈѦ㘨
㔥㸼ḐӮ㹿Փ⫼DŽ
EFI ⱘⳂᷛᰃㅔ࣪䆓䯂ӊⱘ⫼᠋ষDŽ BIOS Ёˈ⫼᠋ᖙ乏ᕫⶹ䘧ӏԩϡৠⱘ⛁䬂ᴹЎ
㋏㒳˄㋏㒳 BIOS ৃ䗝 ROMs˅ϡৠ䚼ߚⱘ⾡䆒㕂ᑣ㦋ᕫ䆓䯂ᴗDŽⳂᷛᰃᢹ᳝ϔ⾡ऩϔⱘ
ᴎࠊᴹ䆓䯂ਃࡼㅵ⧚఼ˈ䖭㛑ҹϔ⾡ࡴㅔऩⱘ䆓䯂Փ⫼Ḑᓣⱘᮍᓣᰒ⼎᠔᳝ⱘ䜡㕂DŽᔧ✊ˈ
ৃ䗝 ROMs ᇚ≵᳝ᖙ㽕䰘ᏺᅗӀ㞾Ꮕⱘ䆒㕂ᓩ᪢ˈ䖭Ͼᓩ᪢ᰃࠊ㋏㒳䆒㕂ᓩ᪢ⱘᴀࡳ㛑DŽ
㸼Ḑᰃᇏഔⱘϔ⾡ᮍᓣDŽ
㸼ḐᰃѢ݊Ҫ HII ⠛↉ᓎゟⱘ˖䬂ⲬˈᄫԧᄫヺІDŽ⡍߿ഄˈHII 㸼ḐⳌᇍѢጠܹᓣᄫ
ヺІՓ⫼ᄫヺІ㒧⚍DŽ
ϔ㠀Ḑᓣ
㸼Ḑᰃҹݙ䚼㸼Ḑ㸼⼎⊩˄IFR˅㗠㨫ৡⱘ䇁㿔ⱘҷ㸼,䖭⾡䇁㿔᳔䖥ⱘᢳᰃᴖᣛҸ䲚
˄CISC˅໘⧚఼ⱘѠ䖯ࠊ䇁㿔˖ϔϾ㹿⿄ПЎĀᣛҸāⱘ䭓ᑺৃবⱘѠ䖯ࠊ㒧ᵘⱘᭈ唤乎ᑣDŽ
ϔ⾡䇁㿔ˈৃ㾚࣪㸼Ḑ㸼⼎⊩˄VFR˅Ꮖ㒣㹿ᅮНЎⳌᔧѢ IFR ⱘҎ㉏ৃ䇏পㄝӋ⠽ˈᅗᰃ
䗮䖛 IFR 㓪䆥∛㓪ⱘDŽᡔᴃሖ䴶Ϟˈϡᰃ Framework ⱘϔ䚼ߚDŽҹϟ՟ᄤህᰃܕ䆌ᴖ䚼ߚ
㹿ᗑ⬹ⱘ VFR џࡵDŽ
↣Ͼ㒧ᵘⱘϔϾᄫ㡖ᰃ᪡ヺˈѠϾᰃϡࣙᣀ᪡ヺ䭓ᑺⱘᣛҸᄫ㡖ⱘ䭓ᑺDŽℸˈ
᳔ⷁⱘᣛҸᰃϸϾᄫ㡖䭓ᑺˈ݊Ёࣙ᪡ヺѠ䖯ࠊᄫ㡖䳊DŽᣛҸᔧЁⱘ᠔᳝ऎඳ䛑ᰃᄫ
㡖ᇍ唤䙉ᕾ EFI ҷⷕᣛᇐᮍ䩜˄little endian ㄝㄝ˅DŽপއѢ⌣㾜఼䞡ᮄᇍ唤ӏԩ᳝䳔㽕ⱘऎ
ඳDŽ
ᄫヺІ㋶ᓩᰃ䗮䖛 HII ᄫヺ㒧⚍㸼⦄ߎᴹⱘDŽ
ᄬټ㋶ᓩᰃ䗮䖛ϸ⾡ᮍᓣDŽϔˈ⿏أᆑᑺᔶᓣᦤկѢ䳊ᄫ㡖⿏أҹᷛ ޚEFI ব䞣ⱘᄫ
㡖ᮍᓣⱘᆑᑺˈབᴀゴࠡ䴶᠔䯤䗄ⱘDŽব䞣 GUIDs ⱘৡᄫᰃ䗮䖛ऩ⣀ⱘ᪡ヺᴹֱᄬぎ䯈DŽ
ѠˈৡᄫⱘؐЎᔶ៤ᷛ ޚHTML/XML ৡᄫ˄=ؐ&ৡᄫ=ؐ&…˅㗠ᦤկৡᄫ㗙ؐ㋶ᓩDŽ⿏أ
ᆑᑺ㉏ൟⱘৃ⿏أҹЎᄫヺІ㒧⚍䞡Փ⫼ˈЎϸ㗙䛑ᰃ 16 ԡⱘᮍᓣᴹᦣ䗄ৡᄫDŽؐৃ㛑
ࠊ䆒㕂៤䴲᭄ᄫݙᆍDŽ᭄ᄫݙᆍҹक䖯ࠊḐᓣ䖨ಲDŽ
HTML IFR
㒣ग़䖛 HTMLˈϔՓ⫼ HII 㸼ḐⱘҎৃ㛑ᕜᖿϞԚᰃӮᛳ㾝᳝⚍࢝ᔎЎᮄⱘ⦃๗᠔
䰤ࠊDŽ
IFR ᬃᣕ䆌Ё HTML 㸼Ḑⱘᵘ䗴䰸њϔ⾡ᄤ䲚ሖDŽ՟བˈҷ᳓༈᭛ӊⱘ 8 ⾡㉏ൟⱘা᳝
ϔϾDŽҷ᳓⾡ϡৠⱘᵮВ˄䆌ৃ㛑ᗻЁ䗝ᢽϔ⾡˅䕧ܹ㉏ൟˈIFR াᦤկϔ⾡DŽ
HTML ᦤկњذℶ㛮ᴀ䇁㿔˄ ڣJavaScript˅ⱘߎষˈབᵰ䯂乬বᕫϹ䞡DŽIFR ᖙ乏⣀㞾㾷
އDŽ
ᬃᣕˈৠᯊ϶ᓗˈׂᬍ߯䗴ᷛ䆄䇁㿔⡍ᗻⱘއᅮˈᰃ㹿㾘ߦњⱘ⦃๗㋏㒳ࡼⱘDŽՓ⫼
Framework ৃ㛑г㛑থ⦄ᅗӀ㞾ᏅDŽ
Փ⫼ᄫヺІ㒧⚍㗠ϡᰃጠܹᓣᄫヺІ˄ ڣHTML ⱘ˅ˈᰃ㹿ᴀഄ࣪ᯊ㡖㑺ぎ䯈ⱘ䳔∖▔থⱘDŽ
ڣ༈᭛ӊ䖭ḋᵘ䗴᭄䞣ⱘޣᇥᰃѢᅲ䰙ϞᕜᇥՓ⫼ⱘⳂᷛᴖ㸼Ḑԧ偠DŽᇚ⾡ᷛㅒ⾡
㉏䕀বЎ䕗Ўᇥ᭄ⱘ᪡ヺⱘޣᇥ㒧ড়䖛ˈгᰃЎњᬊ㓽⌣㾜఼ⱘᇣDŽ䞡㽕ⱘᰃˈ䖭
Ͼ䖛䗮䖛ࠊᅗӀᴀ䑿ᴹՓ⌣㾜఼ᔶ៤ⱘ䰜䗄䋷ӏDŽ䖭ϾᇍҞৢⱘৃᠽሩᗻᰃ㟇݇䞡㽕
ⱘDŽ㸼Ḑгৃ㛑ϡᇏᐌⱘᴵӊ˄↨བ䗮䖛㛮ᴀ㗙↣ 2-㒓᳝ 16-ᄫヺⱘᮍᓣЎࠡৄ᳡ࡵ˅ϟ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ߎ⦄DŽ
Form ԧ㋏
㸼Ḑᰃ⬅义䴶㒘៤ˈ㗠义䴶ᰃ⬅ᣛҸ㒘៤DŽ
ᣛҸ㹿ߚЎҹϟ⾡㉏ൟ˖
᭛ᴀ㉏ൟ˖ᷛ乬ˈࡃᷛ乬᭛ᴀDŽ䖭ѯᣛҸܕ䆌᭛ᴀ䕧ߎDŽ
㋶ᓩ㉏ൟ˖䍙᭛ᴀ䏇䕀ܕ䆌义䴶䏇䕀ࠄ݊Ҫӏԩ义䴶ⱘᓔྟDŽ
䯂乬㉏ൟ˖䖭ѯᣛҸᅲ䰙Ϟᰃ䇋∖᭄ᦣ䗄ᗢḋᄬټDŽ᠔᳝䯂乬ᬃᣕ咬䅸⢊ᗕ䖍⬠Ẕ
ᶹⱘᅮНDŽ䯂乬ᬃᣕᦤ⼎Ϟϟ᭛ᐂࡽᄫヺІ㒧⚍DŽ᠔᳝䯂乬ᬃᣕ䇗⫼䖨ಲDŽҹϟ⾡䯂乬㉏
ൟᰃᬃᣕⱘ˖
䗝Ḛ˖㉏ԐѢϔϾᏗᇨؐˈ䖭ϾᣛҸ䇋∖ϔϾѠ䖯ࠊؐ˖བᵰ 䗝Ёᰃ 1ˈϡ䗝ᰃ 0DŽ
߫㸼Ḛ˖㉏ԐѢϔ⾡ᵮВ㉏ൟˈᅗ㽕∖ҢᏆⶹⱘ䗝乍Ё䗝ᢽϔϾऩϔⱘؐDŽ߫㸼Ḛᰃଃϔ
ⱘ᪡ヺ䯂乬˖ϔϾ䗝ᢽ↣Ͼ䗝乍ϔϔᇍᑨDŽ
᭄ᄫ˖㉏ԐѢϔϾᭈൟ㉏ൟˈҪ㽕∖ᰃ᭄ᄫऎඳ˄16 ԡ䰤ࠊ˅DŽ䆹ᣛҸࣙ㣗ೈˈℹ偸
咬䅸ؐDŽ
᮹ᳳˈᯊ䯈˖䖭ѯᰃ⡍߿ᚙމЎᅗӀ䗮ᐌᰒ⼎ⱘᯊӮᬍবDŽ
ᆚⷕ˖ϔϾॳྟᆚⷕⱘᮍḜᰃ咬䅸䆒㕂ⱘDŽ䇗⫼䖨ಲᰃ䳔㽕ᴖҷⷕᮍḜⱘDŽ
Ꮧᇨ㸼䖒ᓣ˖ড⊶݄㸼䖒ᓣܕ䆌䯂乬ⱘ㒧ᵰϢᕐℸᐌ䞣䖯㸠↨䕗DŽᇣ↨䕗˄↨བᇣ
Ѣ˅Ꮧᇨ᪡˄Ϣˈˈ䴲˅䛑ᰃᬃᣕⱘDŽ
ᴵӊ㉏ൟ˖ϝ⾡ᣛҸ㉏ൟ㒘៤њᏗᇨ㸼䖒ᓣDŽϔ⾡ˈ♄㡆໘⧚ˈᓔྟࣙᣀ䯂乬⫼ݙᴹ
ਞ䆝⌣㾜఼ಲᬊ໘⧚ᦦܹ᭛ᴀⱘऎഫ˄ҹ᳔ৢ᪡ヺ㒧ᴳ˅DŽѠ⾡ˈߴ䰸໘⧚ˈᓔྟϔϾ᳔ৢ
㒧ᴳऎഫˈ䖭Ͼऎഫ⫼ѢབᵰᏗᇨ㸼䖒ᓣᰃⳳˈਞ䆝⌣㾜㗙ߴ䰸ࣙᣀ䯂乬ⱘݙೈ㒩ⱘ᭛ᴀDŽ
ϝ⾡ˈܕ䆌㸼Ḑ䖯㸠ᴖⱘ䯂乬⹂䅸ˈЎϔ⾡ᔎࠊⱘẔᶹᦤկϔϾ䆞ᮁ⍜ᙃབᵰᇍ↨
༅䋹DŽ
՟ᄤ
ᗱ㗗䖭Ͼ㒣ⱘ䆒㕂乎ᑣ˖Ӵ㒳ⱘІষ䜡㕂
OneOf SerialPort1, SerialPort1Store, SerialPort1Prompt
SerialPort1Help
Option SerialPort1Off, SerialPort1OffText, 0
Option SerialPort13F8, SerialPort3F8Text, 1
Option SerialPort12F8, SerialPort2F8Text, 0
InconsistentIf SerialPortConflict,
SerialPort1 == SerialPort2 and SerialPort1 != 0
ৃ㛑ᰒ⼎བϟ˖
Serial Port 1 Address
ǂ Off
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ǂ At 3F8
ǂ At 2F8
Serial Port 2 Address
ǂ Off
ǂ 3F8
ǂ 2F8
⏋ᴖⱘ VFR ᅮНњϸϾㅔऩᵮВܹষˈ䖭䞠㸼⦄Ўऩ䗝ᣝ䪂DŽ↣Ͼ߫㸼Ḛ㋻ⴔ䛑ᰃҪ
ⱘ䗝乍DŽ߫㸼Ḛ/䗝乍乎ᑣЁଃϔ᳝ᬜᣛҸᰃಲᬊ໘⧚প⍜DŽ
՟བˈ䗝乍㒓ḍ䗝乍ᅮНㄝᬜؐˈ᭛ᴀ˄ĀAt 3F8ā˅ᷛ䆄ˈࣙ 1 Ў咬䅸ؐDŽ
ϡヺড়ᴵӊ㒓ᅮНњ䄺ਞᄫヺІDŽ䆹㸼䖒ᓣᰃӮ㹿㓪䆥䖯 RPNDŽ
HII ᭄ᑧষ
ᄫヺІ㛮ᴀ
؛䆒㸼Ḑখ㗗ᄫヺІᄫヺІ㛑㹿ϡৠ䇁㿔ᴀഄ࣪ˈ䙷МՓڣ㓪䆥㛮ᴀ䇁㿔䖭ѯ䴲Ҏ㉏
䇁㿔ⱘᴀഄ࣪ⱘᱎ䏇䎗гᰒᕫϡ䙷Мೄ䲒DŽ䖭ህ䳔㽕⍜䌍㗙ᮍ䴶ᬃᣕᇚ HII ᭄ᑧ㗏䆥៤ᴀഄ
䇁⊩ᬃᣕDŽ䆌䳔㽕ᬃᣕϸ⾡䇁㿔˖ ϔ⾡ᰃ↣Ͼᷛޚ㛮ᴀ䇁㿔ᬃᣕˈϔ⾡ᰃ⫳ѻ㒘㒛Ўᅗ㞾
Ꮕࠊ䗴㞾ࡼ࣪⌟䆩ⱘᴀഄ࣪DŽ
߿᮴䗝ᢽˈ↣Ͼӊᖙ乏ᢹ᳝ⳌѦ⣀ゟⱘᴎࠊᴹᬃᣕ↣ϔ⾡㛮ᴀ䜡㕂䇁㿔⣀ゟⱘ䜡㕂᭄
ⱘᦣ䗄DŽ䖭⾡ᮍᓣᖙ✊Ӯࡴᆍ䞣ࡴϡৠ偅ࡼП䯈䆩ᰒ⼎Ⳍৠֵᙃ㗠ϡৃⱘ⹂ޚ㛑
ᗻDŽ
偅ࡼ䆒䅵ⱘ⊼ᛣ⚍
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᨬᔩ䯂乬ϔḋˈ䖭⾡ᮍ⊩ܕ䆌ᑇৄ䆒䅵㗙᭛ᴀḋᓣण䇗ֱᣕϔ㟈ᗻDŽ䖭г᳝ⲞѢ㡖
㑺ᄫԧぎ䯈DŽ
᭄Ёᖗ
ਃࡼӊ㦋ᕫ䞣ⱘ᭄Ўᅗⱘ䰘ሲᎹDŽ⾡Ѣ᪡㋏㒳ⱘՓ⫼㗙ᇍ݊Ёϔѯ䖭⾡
᭄ᛳ݈䍷DŽ᭄Ёᖗᰃϔ⾡ᴎࠊˈ䗮䖛䖭⾡ᴎࠊˈᓎゟ᭄ⱘ偅ࡼᇍᓎゟষᴹᦤկ㒭Փ⫼
㗙≵᳝ҔМ㑺ᴳDŽ᭄Ёᖗձ䰘 DXE 㗠ᄬˈ㗠Ϩ↣ਃࡼህ䞡ᓎˈሑㅵᶤѯᦤկ㒭ᅗⱘ᭄
ৃ 㛑 ᰃ 䴲 ᯧ থ ⱘ ᭄ DŽ ᅗ ⱘ 䆒 䅵 ᰃ ⫳ ѻ 㗙 / Փ ⫼ 㗙 ൟ ⱘ 㒣 ՟ ᄤ DŽ 䖭 Ͼ ষ Ⳉࠄ
ExitBootServices ϔⳈᄬDŽ
བᵰԴᓔྟ䅸Ў䖭ڣџӊ᮹ᖫˈ䙷Դ⾏៤ࡳህϡ䘹䖰њDŽϪ⬠ϞᄬབℸⱘᎹϮᷛޚ䗮
䖛џӊ᮹ᖫᴹᅮН݊ᛣНˈFramework ⫼ϔϾϡৠৡᄫDŽ
ᖂᔅᤚ㒥ⱘໄᯢᰃᕜ䞡㽕ⱘDŽ᭄ЁᖗⱘⳂⱘᰃҢᅗӀⱘՓ⫼㗙ᴹᢑ䈵᭄࣪ⱘѻ⫳㗙DŽ
Փ⫼䖭Ͼൟˈѻ⫳㗙≵᳝ᖙ㽕ⶹ䘧㋏㒳䳔㽕䙉ᕾҔМḋⱘㅵ⧚ᷛˈޚгϡ䳔㽕ᢹ᳝↣ϔ⾡䳔
㽕ⱘষԈ䱣݊ⱘᇣⱘᕅડDŽՓ⫼㗙г㛑ࡴㅔऩഄ㓪䕥䗖ড়ҪӀ䳔㽕ⱘ᭄DŽ
⍜ᙃ乎ᑣ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
11 3 Data Hub
䆄ᔩᰃ䗮䖛᭄Ёᖗण䆂Ң᭄Ёᖗᦤկ㦋পⱘDŽᔧᮄⱘ䆄ᔩӴࠄ᭄Ёᖗⱘᯊ,Փ⫼
㗙ৃ㛑ᇚᅗӀ㞾ᏅᅮНЎ䖛Ⓒ偅ࡼᴹ㦋ᕫ䗮ⶹ˄ℸ㗠⫳ⱘࠊ˅DŽ
ᔧՓ⫼㗙⊼ݠ㽕Ң᭄Ёᖗᬊ᭄ˈᅗ佪ܜ䗮䖛᭄ЁᖗЎ㦋প᠔᳝ᔧֱࠡ⬭ⱘ᭄ᡓ
ᢙ䋷ӏDŽ✊ৢᅗᠡ㛑ᬊᅗӀѻ⫳ⱘ᭄DŽЎᅮНⱘ᭄ϡᰃᯊᑣ㟇݇䞡㽕ⱘˈ䖭ህᛣੇ
ⴔՓ⫼㗙ϡ㛑ऎߚ݊䳔㽕ⱘ᭄ᰃ⊼ݠПࠡѻ⫳ⱘ㗙Пৢ㗙Ё䯈DŽ
㱑✊ϡ哧ࢅˈԚᰃЎњ⫳ѻ偅ࡼ㗠ᦤկ݇Ѣϔѯ⡍ᅮݙᆍ㗙џӊҹৢᮄ䙷ѯ㦋পⱘ
ࡴ䆺㒚ⱘ᭄ҡ✊ᰃ᳝ᬜⱘDŽৠḋⱘˈ᭄Ёᖗϡ㓪䕥ৠ㉏߿ⱘᮻⱘ⍜ᙃˈԚᰃ໘⧚᠔᳝㽕
∖ⱘ⍜ᙃDŽ㱑✊ϡᰃ䗮䖛᭄Ёᖗᠻ㸠ˈ㋏㒳㸼⼎ⱘ䖯ሩᰃ㉏ԐѢݙᄬ HOB Ң PEI Ӵ䗕ࠄ DXEDŽ
DXE 偅ࡼৃ㛑ᮄݙᄬՓ⫼ᇘ˄ Global Coherency Domain˅Ў߱ྟ࣪ҪӀ਼䖍ⱘ䆒
DŽ㋏㒳ЁⱘݙᄬՓ⫼ڣবᕫ䍞ᴹ䍞ڣᰃਃࡼ䖛ⱘᓊ㓁DŽ
ৃ㓪䕥ⱘ㉏
ϔϾЏ㽕ⱘ䯂乬ᰃ᭄Ёᖗ᭄ⱘѻ⫳㗙Ў䗮䖛ᎹϮᷛޚݙ䚼Փ⫼ᚙމ᠔ᖙ乏ⱘˈ䖛
Ⓒ᭄ՓП៤Ўৃㅵ⧚ⱘぎ䯈DŽⳌৠ᭄ⱘϡৠ㒘ড়ৃ㛑㹿ҷⷕᬃᣕⱘㅵ⧚ষ᠔Փ⫼ˈڣ
SMBIOSˈIPMIˈгࣙᣀ䆘Ӌࠊ䗴ᬃᣕⱘݙ䚼Փ⫼㗙DŽ↣ϾՓ⫼㗙ᇚ⧚䆎Ϟাⳟࠄᅗ݇ᖗⱘ᭄
DŽ
᭄Ёᖗ䆒䅵ⳂᷛᅮԡѢ㽕∖ѻ⫳㗙䗮䖛Ā㉏āᴹᷛ䆄᭄DŽՓ⫼㉏ᰃⳌᔧ᱂䘡˄↨བ໘
⧚఼ˈݙᄬೈ䆒˅ᰃЎ Framework 㾘㣗ⱘϔ䚼ߚᅮНⱘDŽHeadroom ᰃ㉏ᅮНЁ
࠽ϟഄ⫼ᴹᬃᣕᅮНⱘ㉏Пⱘ᭄DŽՓ⫼㗙ৃҹ⊼ݠ䗮䖛㉏ᬊ⍜ᙃᅠ៤ᅗᴀ䑿᠔᳝ⱘ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
㓪䕥DŽՓ⫼ПࠡˈѢՓ⫼ⱘ偅ࡼ䙉ᕾⱘ㾘㣗ᴹᦤկ㒭Փ⫼㗙ⱘ᭄ৃ㛑䳔㽕ҢᮄḐᓣ࣪
˄↨བˈҢܚ䌿ࠄݍगܚ䌿˅ݍDŽ
໘⧚ҷⷕ
᭄ЁᖗϔϾϡᗢМᯢᰒⱘ⫼⊩ᰃЎ໘⧚ҷⷕⱘᢑপ䖛DŽᄬࡴܜ䖯ⱘ POST
Codes˄㗙 80 ッষҷⷕˈҢवⱘᷛޚഄഔᓔྟ˅ⱘ⠜ᴀDŽ໘⧚ҷⷕᰃ㹿ᦤկ⫼ѢՓ⫼Ⳍৠ
᭄ЁᖗᴎࠊЎ݊Ҫ᭄Ёᖗ᭄䆄ᔩˈᅲ䰙ϞˈᰃĀ㉏āDŽ
䗮䖛᭄Ёᖗ偅ࡼ໘⧚ҷⷕ㾷އϔѯ⫼݊Ҫࡲ⊩ⳌᔧẬⱘ䯂乬DŽ佪ˈܜབᵰϡৠⱘ偅ࡼ
᳝ϡৠ㒘㒛ᓔথˈ໘⧚ҷⷕ˄Port 80 वᰃ䰤ࠊ 256 Ͼؐ˖00 ࠄ FF˅ᇚᗢḋ偅ࡼП䯈ߚ䜡˛
䆞ᮁ䖛ЁˈϔϾ偅ࡼৃҹḍ䳔㽕Փ⫼䆌⢊ᗕҷⷕDŽ✊㗠ˈᇍѢѻક偅ࡼˈ᠔᳝偅ࡼ㽕ᡞ
ᅗӀⱘ໘⧚ҷⷕথ䗕ࠄ᭄ЁᖗDŽ✊ৢ⢊ᗕ偅ࡼ㛑㹿䆄ᔩˈ䖭Ͼ偅ࡼᇘ䖭ѯ䆄ᔩࠄᑇৄᛳ
݈䍷ⱘਞDŽѠˈ᮹ᖫгৃ㛑Ў㋏㒳㸼Ḑⱘϔ䚼ߚ㹿㦋পᦤկˈ՟བˈ䗮䖛 post-boot
ߚᵤⱘ偅ࡼDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
कѠゴ
';( 偅ࡼ (), 偅ࡼП䯈ⱘऎ߿
ᇚ䜦ᦎ䍋ᴹୱг䆌ᰃϾ䫭䇃ˈԚᮄ㗕ᱎैᅠ㕢ഄ㵡ড়ϔ䍋DŽ
—Bertrolt Brecht
*&' ᳡ࡵ˖
GCD ᳡ࡵⱘㅔ䗄˖
GCD ᳡ࡵ⫼ᴹㅵ⧚ਃࡼ໘⧚఼ⱘ᠔㛑ᥠᦵⱘݙᄬ IO 䌘⑤DŽ䖭ѯ䌘⑤ߚ៤ 2 ⾡ᇘ˖
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
GCD ݙᄬぎ䯈ᇘ
GCD IO ぎ䯈ᇘ
བᵰ᳝ݙᄬ㗙 IO 䌘⑤ⱘ⏏ࡴˈߴ䰸ˈߚ䜡䞞ᬒˈ䙷М GCD ⱘݙᄬ IO ぎ䯈ڣህ
㽕ᮄDŽGCD ᳡ࡵгᦤկњ㦋প䖭ϸ⾡䌘⑤ⱘⱘڣ᳡ࡵDŽ
GCD ᳡ࡵߚ៤ 2 ㉏ˈϔ㉏ㅵ⧚ਃࡼ໘⧚఼ৃ㾕ⱘݙᄬ䌘⑤ˈ 2 ㉏㉏ᰃ⧚ਃࡼ໘⧚఼
ৃ㾕ⱘ IO 䌘⑤DŽᑊϡᰃ᠔᳝ⱘ໘⧚఼䛑᳝ IO 䌘⑤ˈ᠔ҹᑊϡϔᅮ䳔㽕᳝ᇍ IO 䌘⑤ⱘㅵ⧚DŽ
Ԛᰃᠻ㸠 DEX ⱘ⦃๗ᰃ䳔㽕㋏㒳ݙᄬݙᄬᇘ䌘⑤ⱘˈ᠔ҹᇍݙᄬ䌘⑤ⱘㅵ⧚ᘏᰃᖙ乏ⱘDŽ
GCD Ё⫼ᴹㅵ⧚ݙᄬ䌘⑤ⱘ᳡ࡵ᳝˖
AddMemorySpace()
AllocateMemorySpace()
FreeMemorySpace()
RemoveMemorySpace()
SetMemorySpaceAttributes()
GCD Ё⫼ᴹ㦋প GCD ݙᄬぎ䯈ᇘⱘ᳡ࡵ᳝˖
GetMemorySpaceDescriptor()
GetMemorySpaceMap()
GCD ⱘݙᄬぎ䯈ᇘⱘᓎゟᴹ㞾ѢӴ䗦㒭 DXE Foundation ⱘܹষখ᭄ HOB listDŽ݊Ёϔ
⾡ HOB ㉏ൟᦣ䗄њ⫼ᴹ䆓䯂ݙᄬ䌘⑤ⱘഄഔ㒓᭄䞣DŽ䖭Ͼֵᙃ⫼ᴹ߱ྟ࣪ GCD ݙᄬぎ䯈ᇘ
ⱘ⢊ᗕDŽ᠔᳝ϡ߱ྟ࣪㣗ೈ˄⬅ HOB ㉏ൟᣛᅮⱘഄഔ㒓᭄䞣އᅮ˅ݙⱘݙᄬऎ䯈ᇍѢӏԩ⫼
ᴹㅵ⧚ݙᄬ䌘⑤ⱘ GCD ᳡ࡵᴹ䇈ˈ䛑ᰃϡৃ⫼ⱘDŽGCD ݙᄬぎ䯈ᇘᰃ㹿䆒䅵⫼ᴹᦣ䗄䖒
2^64 bit ⱘݙᄬぎ䯈DŽ GCD ݙᄬぎ䯈ᇘ䞠䴶ˈ↣Ͼݙᄬऎ䯈䛑㛑ҹऩϔ byte ᇍ唤DŽ
ϔ⾡ HOB ㉏ൟᦣ䗄њ㋏㒳ݙᄬⱘԡ㕂ˈIO ᇘⱘݙᄬԡ㕂ˈӊ䆒ⱘԡ㕂ˈFV ⱘԡ㕂ˈ
ֱ⬭ऎඳⱘԡ㕂ˈҹঞџܜЎᠻ㸠 DXE Foundation ᠔ߚ䜡ⱘ㋏㒳ݙᄬⱘԡ㕂DŽDXE
Foundation ᖙ乏㾷ᵤ HOB list Ϟⱘݙᆍˈҹ⹂ֱ乘⬭ֱܜ㒭ᠻ㸠 DEX Foundation ⱘݙᄬऎ
䯈ᰃ᳝ᬜⱘDŽ݊㒧ᵰህᰃˈGCD ݙᄬぎ䯈ᖙ乏ড HOB list Ё᠔ᦣ䗄ⱘݙᄬऎඳDŽGCD ݙᄬ
ぎ䯈ᇘ㒭 DXEFoundation ߱ྟ࣪ݙᄬ᳡ࡵབ AllocatePages()ˈFreePages()ˈ
AllocatePool()ˈFreePool()ˈGetMemoryMap()ᦤկњᖙ䳔ⱘֵᙃDŽ݇Ѣ䖭ѯݙᄬ᳡ࡵⱘ䆺
㒚ᅮН䇋খ㾕 EFI1.10 ⱘ specDŽ
GCD ݙᄬぎ䯈ᇘЁⱘϔ↉ݙᄬऎ䯈ৃҹᰃབϟ⾡⢊ᗕ˖
Nonexistent memory
System memory
Memory-mapped I/O
Reserved memory
䖭ѯݙᄬऎ䯈ˈ DXE ⦃๗Ёৃҹ⬅ DXE 偅ࡼᴹߚ䜡䞞ᬒDŽℸˈDXE 偅ࡼ 㛑ᇱ䆩
এ䇗ᭈϔ↉ݙᄬऎඳⱘ cache ሲᗻDŽ 21.1 ሩ⼎њ GCD ݙᄬぎ䯈ᇘЁݙᄬⱘ↣Ͼ byte
ⱘ⢊ᗕ䕀ᤶৃ㛑DŽ䖭⾡䕀ᤶ㹿ᠧϞ GCD ᳡ࡵⱘᷛ䆄ˈGCD ᳡ࡵ㛑ᇚϔϾ byte Ңϔ⾡⢊ᗕ
বЎϔ⾡⢊ᗕDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
GCD ᳡ࡵᕫᡞ䙷ѯЈ䖥ⱘⳌԐݙᄬऎ䯈ড়ᑊˈᑊ㒭ᅗӀҹऩϔⱘݙᄬᦣ䗄ヺˈ䖭ḋ֓ޣᇥ
њ GDC ݙᄬぎ䯈ᇘЁݙᄬᦣ䗄ヺП᭄䞣DŽ
GCD IO 䌘⑤
⫼ᴹㅵ⧚ I/O 䌘⑤ⱘ GCD ᳡ࡵ˖
AddIoSpace()
AllocateIoSpace()
FreeIoSpace()
RemoveIoSpace()
⫼ᴹ㦋প GCD I/O ぎ䯈ᇘⱘ GCD ᳡ࡵ˖
GetIoSpaceDescriptor()
GetIoSpaceMap()
GCD ⱘ I/O ぎ䯈ᇘⱘᓎゟᴹ㞾ѢӴ䗦㒭 DXE Foundation ⱘܹষখ᭄ HOB listDŽ ݊Ё
ϔ⾡ HOB ㉏ൟᦣ䗄њ⫼ᴹ䆓䯂 I/O 䌘⑤ⱘഄഔ㒓᭄䞣DŽ䖭Ͼֵᙃ⫼ᴹ߱ྟ࣪ GCD I/O ぎ䯈
ᇘⱘ⢊ᗕDŽ᠔᳝ϡ߱ྟ࣪㣗ೈ˄⬅ HOB ㉏ൟᣛᅮⱘഄഔ㒓᭄䞣އᅮ˅ ⱘݙI/O ऎ䯈ᇍѢӏԩ
⫼ᴹㅵ⧚ I/O 䌘⑤ⱘ GCD ᳡ࡵᴹ䇈ˈ䛑ᰃϡৃ⫼ⱘDŽGCD I/O ぎ䯈ᇘᰃ㹿䆒䅵⫼ᴹᦣ䗄
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
'LVSDWFKHU᳡ࡵ
㸼 12 2 Dispatcher Services
Name Type Description
Dispatch Boot Loads and executed DXE drivers from firmware
volumes.
Schedule Boot Clears the Schedule on Request (SOR) flag for a
component that is stored in a firmware volume.
Trust Boot Changes the state of a file stored in a firmware
volume from the untrusted state to the trusted
state.
ProcessFirmwareVolume Boot Creates a firmware volume handle for a firmware
volume that is present in system memory.
ձ䌪݇㋏㸼䖒ᓣП䗚⊶݄㸼䖒ᓣ 531
';('LVSDWFKHU ⢊ᗕᴎ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᥦᑣ՟ᄤ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
कϝゴ
ਃࡼ䆒䗝ᢽ
៥াᰃথᯢˈ✊ৢㄝⴔ᳝Ҏᴹ䖭䞠ᡒ៥߯䗴ⱘϰ㽓DŽ
—R. Buckminster Fuller
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Related Definitions
ܼሔᅮНⱘ Variables
䖭ϔ㡖ᅮНϔ㒘᳝ᶊᵘᗻᯢ⹂ᅮНᛣНⱘvariablesDŽ䰸Ꮖ㒣ᅮНⱘ᭄ݙᆍˈ ↣ϔ
Ͼ䖭ḋⱘvariables䛑᳝ϔϾᶊᵘᗻᯢ⹂ᅮНⱘሲᗻˈᴹᣛᯢԩᯊ䖭Ͼ᭄variableৃҹ㹿䆓䯂
ࠄDŽ䖭ѯvariables᳝ϔϾሲᗻᰃNVˈेnonvolatile䴲ᯧ༅ᗻDŽᅗⱘᛣᗱᰃ䇈䖭ѯؐreset
power cycles䛑Ӯֱ⬭DŽӏԩᚙމϟˈ≵᳝䖭Ͼሲᗻⱘvariableⱘؐ䛑Ӯ㋏㒳ᮁ⬉ৢ⍜༅ˈ
ᑊϨֱᄬݙᄬЁⱘfirmwareⱘ⢊ᗕгϡֱ⬭DŽVariablesⱘሲᗻBSাExitBootServices()㹿
䇗⫼П᳝ࠡᬜDŽᅗⱘᛣᗱᰃ䖭ѯ⦃๗Variableা㛑preboot ⦃๗ϟ㹿䞡ᓎׂᬍDŽᅗӀᇍ
᪡㋏㒳ϡৃ㾕DŽ⦃๗VariableⱘRTሲᗻ㸼⼎ExitBootServices()㹿䇗⫼ࠡ㹿䇗⫼ৢˈᅗ
Ӏ䛑᳝ᬜDŽ䖭⾡⦃๗Variable᮶ৃҹpreboot⦃๗ϟˈгৃҹ᪡㋏㒳Ё㹿䞡ᓎׂᬍDŽ
᠔᳝ᶊᵘᗻᅮНⱘvariable䛑Փ⫼EFI_GLOBAL_VARIABLE VendorGuid:
#define EFI_GLOBAL_VARIABLE \
{8BE4DF61-93CA-11d2-AA0D-00E098032B8C}
Ў䙓ܡᴹӮᅮНⱘܼሔvariableৡ⿄ކさˈ݊ҪℸᅮНⱘݙ䚼firmware᭄
variableˈᖙ乏⫼ϡৠѢEFI_GLOBAL_VARIABLEⱘଃϔⱘϔϾVendorGuidᴹֱᄬDŽ㸼13.1
߫ߎ䖭ѯܼሔvariablesDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
㸼 13 1 Global Variables
Variable Attribute Description
Name
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ㄝㄝDŽ
%RRW2UGHU9DULDEOH ᰃϔϾ 8,17 ᭄㒘ˈᅗᵘ៤ %RRW乍ⱘᑣ߫㸼DŽ᭄㒘ⱘϔϾ
ܗ㋴ᰃϔϾ䘏䕥ਃࡼ乍ˈѠϾܗ㋴ᰃѠ䘏䕥ਃࡼ乍ˈձ㉏ϟএDŽ%RRW0DQDJHU ϔ㠀
ᰃᇚ %RRW2UGHU ᑣ߫㸼Ў咬䅸ਃࡼ乎ᑣⱘDŽ
%RRW1H[W9DULDEOH ᰃϔϾ 8,17 ᭄ˈᅗᅮНњ %RRW乍ⱘϟਃࡼᓩᇐⱘ佪䗝乍DŽা
᳝ %RRW1H[W ਃࡼ乍໘⧚ᅠˈᠡ㛑ℷᐌⱘՓ⫼ %RRW2UGHU ߫㸼DŽЎ䙓ܡ䞡ˈ%RRW0DQDJHU ᇚ
ࠊᴗѸ㒭乘ਃࡼ乍ࠡ䳔㽕ߴ䰸ℸ 9DULDEOHDŽ
%RRW&XUUHQW9DULDEOH гᰃϔϾ 8,17 ᭄ˈᅗᅮНњᔧࠡਃࡼᯊ᠔Փ⫼ⱘ %RRW乍DŽ
'ULYHU9DULDEOH ᳝ϔϾ (),B/2$'B237,21ˈ↣Ͼ 9DULDEOH ⱘৡᄫ䛑ᰃ⬅Ā'ULYHUā
ࡴϞ⡍ᅮⱘ᭄ᄫ㒘៤ⱘˈ↨བ 'ULYHU'ULYHUㄝㄝDŽ
'ULYHU2UGHU9DULDEOH ⬅ϔϾ 8,17 ᭄㒘㒘៤ˈ䆹᭄㒘ᵘ៤њ 'ULYHU9DULDEOH ⱘ
ᑣ߫㸼DŽ᭄㒘ⱘϔϾܗ㋴ᰃϔ䘏䕥偅ࡼࡴ䕑乍ˈѠϾܗ㋴ᰃѠ䘏䕥偅ࡼࡴ䕑乍ˈձ
㉏DŽᇍ (),'ULYHUV 㗠㿔ˈ%RRW0DQDJHU Ӯᡞ 'ULYHU2UGHU ߫㸼ᔧخ咬䅸ࡴ䕑ᑣձᑣⱘࡴ
䕑DŽ
ਃࡼᴎࠊ
EFI 㛑ҢϔϾՓ⫼ SIMPLE_FILE_SYSTEM Protocol LOAD_FILE Protocol ⱘ䆒ਃ
ࡼDŽϔϾᬃᣕ SIMPLE_FILE_SYSTEM Protocol ⱘ䆒ᖙ乏Ў䖭Ͼ䆒ᅲ՟࣪ϔϾ᭛ӊ㋏
㒳ˈҹՓ݊ৃਃࡼDŽབᵰϔϾ䆒ϡᬃᣕϔϾᅠᭈⱘ᭛ӊ㋏㒳ˈᅗৃ㛑ѻ⫳ϔϾ LOAD_FILE
Protocolˈᴹܕ䆌ᅗⳈᅲ՟࣪ϔϾ imageDŽBoot manager ᇚӮܜᇱ䆩Փ⫼
SIMPLE_FILE_SYSTEM Protocol এਃࡼDŽ؛བ༅䋹ˈህӮՓ⫼ LOAD_FILE ProtocolDŽ
Ңㅔऩ᭛ӊ Protocol ਃࡼ
ᔧҢϔϾㅔऩ᭛ӊ ProtocolਃࡼᯊˈFilePathᇚҢϔϾ䆒䏃ᕘᓔྟˈ䖭Ͼ䆒䏃ᕘᣛ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᬃᣕSIMPLE_FILE_SYSTEM Protocolⱘ䆒DŽFilePathⱘϟϔ䚼ߚᇚӮᣛ᭛ӊৡ⿄ˈࣙ
ᣀ᳝ৃਃࡼimageⱘᄤⳂᔩDŽབᵰ᭛ӊৡ⿄ᰃϔϾぎⱘ䆒䏃ᕘˈ㽕ၦҟ䆒Ϟᡒࠄ᭛
ӊৡ⿄ˈᖙ乏Փ⫼䖭ḋⱘ㾘߭ˈ䖭Ͼ㾘߭ᰃᏺ᳝㊞᭛ӊৡ⿄ⱘৃᢨ䰸䆒ᅮНⱘDŽ(㾕
"Removable Media Boot Behavior"㡖)DŽ
EFI spec᳝EFI⡍᳝ⱘ᭛ӊ㋏㒳ⱘḐᓣDŽ✊㗠ˈfirmwareᖙ乏㽕ѻ⫳ϔϾ㛑⧚㾷EFI᭛
ӊ㋏㒳ⱘSIMPLE_FILE_SYSTEM Protocolˈӏԩ᭛ӊ㋏㒳䛑ৃҹ㹿䖭⾡
SIMPLE_FILE_SYSTEM Protocolষᢑ䈵DŽ
ৃᢨ䰸ၦҟⱘਃࡼ㸠Ў
ৃᢨ䰸ၦҟ䆒ϞˈFilePathϡৃ㛑᳝᭛ӊৡ⿄ঞᄤⳂᔩDŽᑇৄЁˈᄬټ䴲ᯧ༅
ᗻᄬ఼ټϞⱘFilePathϡৃ㛑ϔϾ䱣ᯊৃҹᬍবⱘၦҟֱᣕৠℹDŽϔϾৃᢨ䰸䆒ⱘ
FilePathᇚӮᣛᬃᣕSIMPLE_FILE_SYSTEM Protocolⱘ䆒DŽ䖭ϾFilePathᇚϡӮࣙ᭛
ӊৡ⿄ᄤⳂᔩDŽ
ϔϾ咬䅸᭛ӊৡˈࡴϞ䖭ḋⱘḐᓣ\EFI\BOOT\BOOT{ machine type short-name }DŽEFIˈ
⏏ࡴࠄϔϾৃᢨ䰸䆒FilePathˈ㋏㒳firmwareӮᇱ䆩Ң䖭ḋⱘFilePathএਃࡼDŽ݊Ёˈmachine
type short-nameᅮНњϔϾPE32+ imageⱘḐᓣ㒧ᵘDŽ↣ϔϾ᭛ӊাࣙϔϾEFI image㉏ൟˈ
ᑊϨˈ㋏㒳ৃ㛑ᬃᣕҢϔϾϾ䖭ḋⱘimageḐᓣਃࡼDŽ㸼13DŽ2߫ߎEFI imageⱘ㉏ൟDŽ
Ң LOAD_FILE Protocol ਃࡼ
PXE_BASE_CODE ProtocolЁDŽ
Future Boot Media
㞾ҢEFI᪡㋏㒳PlatformП䯈ᅮНњϔϾᢑ䈵ሖˈ 䱣ⴔᡔᴃⱘথሩˈ EFIⱘloader
ህৃҹ⏏ࡴᮄ㉏ൟⱘਃࡼၦҟDŽ䖭ḋˈOS Loaderህ≵᳝ᖙ㽕Ўᬃᣕᮄⱘᓩᇐ㉏ൟ㗠㹿䖿ߎ
ᬍࡼDŽϡ䖛ˈEFI Platform Servicesⱘᅲৃ㛑ӮخѯׂᬍˈԚ݅⫼ⱘInterfaceᑊϡӮᬍবDŽ
᪡㋏㒳䳔㽕Driverএᬃᣕᮄ㉏ൟⱘਃࡼၦҟˈҹ֓Ѣᅠ៤ҢEFI Boot Servicesࠄ᪡㋏㒳ᇍ䆹
ၦҟࠊⱘ䖛⏵DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
कಯゴ
ᓩᇐ⌕
ᷥᵫ䞠ߚߎϸᴵቨ䏃……
—Robert Frost, “The Road Less Taken”
㋏㒳䞡ਃܕ䆌ᕜৃ㛑ᗻˈ㗙䇈ˈᓩᇐᑣⱘᠻ㸠䏃ᕘϡᰃᅮⱘDŽᇍϔ乫㒭ᅮⱘ CPUˈ
ᓩ䍋ᅗ䞡ਃⱘॳ᳝ᕜˈᑊϨ⦃๗⢊ᗕг᳝ᏂᓖDŽ䖭ѯॳࣙᣀ˖䮾ᄬᄬټᮄӊ䇋∖˗
⬉⑤ㅵ⧚џӊᘶ䇋∖˗㋏㒳߱ྟ࣪ਃࡼ䇋∖˗ҹঞ݊ᅗৃ㛑ⱘᚙᔶDŽ䖭ϔゴᇚҟ㒡ϔѯৃ㛑
ⱘᓩᇐ⌕ҹঞḚᶊ˄Framework˅ᰃᗢḋᴹ໘⧚䖭ѯџӊⱘDŽ
佪ˈܜḚᶊ˄Framework˅Ёˈℷᐌⱘҷⷕ⌕䳔㽕乎ᑣ㒣䖛ҹϟϾ䰊↉˖
1. SEC
2. PEI
3. DXE
4. BDS
5. Runtime
6. Afterlife
䖭ϔゴӮҟ㒡ϔϾᣝ✻䖭Ͼ⌕ⱘᓩᇐᮍḜˈ䇋খ㗗 14.1DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
2. BOOT_ON_FLASH_UPDATE
3. BOOT_ON_S3_RESUME
4. BOOT_WITH_MINIMAL_CONFIGURATION
5. BOOT_WITH_FULL_CONFIGURATION
6. BOOT_ASSUMING_NO_CONFIGURATION_CHANGES
7. BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS
8. BOOT_WITH_DEFAULT_SETTINGS
9. BOOT_ON_S4_RESUME
10. BOOT_ON_S5_RESUME
11. BOOT_ON_S2_RESUME
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Ң S3ˈS4ˈS5 ᘶⱘᯊˈᓩᇐ䏃ᕘབϟ˖
S3˄ᣖ䍋ࠄݙᄬᘶ˅˖ᬃᣕ S3 ⱘᑇৄᖙ乏ֱᄬ䖬ॳݙᄬϔѯ݇䬂ⱘ⹀ӊ䜡㕂DŽ
S4˄ᣖ䍋ࠄ⺕Ⲭ˅˖ϔѯᑇৄг䆌㽕ᠻ㸠㓽ⷁࠄ PEI DXE 䰊↉
S5˄䕃݇䯁˅˖ϔѯᑇৄг䆌Ꮰᳯ S5 off ਃࡼℷᐌᓔᴎϡϔḋˈ՟བˈ䴲⬉⑤ᣝ䪂
ৃҹ䝦㋏㒳DŽ
៥Ӏ㽕ݡ䆺㒚ഄ㾷䞞ϔϟ S3 ᘶˈЎᅗ䳔㽕 G0 ࠄ S0 ᓩᇐ䏃ᕘ S3 ᘶ䏃ᕘⱘড়DŽ
G0 ࠄ S0 ᓩᇐ䏃ᕘ䳔㽕ᇚ S3 ᘶ᠔䳔㽕ⱘ⹀ӊ㓪ֵᙃֱᄬ䍋ᴹDŽ䖭ѯֵᙃ㹿ֱᄬ⹀ӊ㒧
ᵰֱᄬ㸼ˈᑊՓ⫼乘ᅮНⱘ᭄㒧ᵘᠻ㸠 I / O ᄬܹݭ఼ټDŽ ᭄㹿ֱᄬㄝᬜѢ INT15h E820
type 4˄ӊֱ⬭ݙᄬ˅ⱘϔഫऎඳϔഫ乘⬭ⱘӊ䆒ऎDŽݙᄬ㹿䖬ॳПৢˈS3 ᘶ䏃
ᕘⱘҷⷕৃҹ䆓䯂䖭ഫऎඳDŽ
Discovery থ⦄
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᘶⱘᅮНህᰃ㽕ֱ⬭䎇ⱘ㋏㒳ӊҹ֓㋏㒳ৃҹਃࡼࠄᅗৃҹࠄخҹϟϸ⚍ⱘ䰊↉˖
Ң㹿䗝ᢽೈ䆒϶༅ⱘ᭄䇏পϔӑӑ
䞡ᮄ⫼䖭ѯ᭄㓪ݭӊो
ৃᘶӊⱘֱᄬᰃㅵ⧚ӊोᄬټᮍ䴶ⱘϔϾࡳ㛑ˈ䖭ᰃᴀкП᱂䘡ᄬⱘϔϾ㾖
⚍DŽ䖭↉ᦣ䗄ⱘⳂⱘᰃᏠᳯ PEIMS ݊ᅗ䳔㽕ᘶⱘӊोݙᆍ㽕㹿ᷛ䆄DŽӊोᄬټԧ㋏ᖙ
乏ֱᄬᷛ䆄䚼ߚˈՓᅗӀϡৃ㹿ᬍব˄ৃ㛑䳔㽕⹀ӊᬃᣕ˅ˈ⫼ϔ⾡ᆍ䫭ⱘछ㑻䖛ᴹֱᡸ
ᅗӀDŽ⊼ᛣབᵰϔϾ PEIM ᰃᘶᖙ乏ⱘϔϾ PEIM ձ䴴ᅗᴹᘶˈ䙷ᅗᖙ乏ᬒϔϾᆍ䫭
ऎඳDŽ䖭Ͼԧ㋏㒧ᵘৠḋг؛ᅮᕜᆍᯧ݀ᑇⱘএ߸ᮁાѯӊोᤳണDŽ
✊ৢ PEI 䇗ᑺ఼ℷᐌ䖤㸠DŽབᵰᅗ䙁䘛ࠄᏆ㒣ᤳണⱘ PEIM˄՟བˈᬊࠄϔϾ䫭䇃ⱘ hash
ؐ˅ˈᅗ㞾Ꮕᖙ乏ᬍবਃࡼᓣএᘶDŽϔᮺ㹿䆒㕂៤ᘶᓣˈ݊ᅗⱘ PEIMS ᖙ乏ϡ㛑ᬍব
㋏㒳ࠄ݊ᅗ⢊ᗕDŽ PEI 䇗ᑺ݊থ⦄㋏㒳໘ѢᘶᓣˈᅗӮ䞡ਃˈা䇗ᑺ䙷ѯᘶ䳔㽕ⱘ
PEIMSDŽϔϾ PEIM гৃҹẔ⌟♒䲒ᴵӊ✊ৢѻ⫳ϔϾᔎࠊᘶџӊএ䗮ⶹ PEI 䇗ᑺ఼এ䖯㸠ϔ
Ͼᘶ䇗ᑺDŽϔϾ PEIM ৃҹ䗮䖛⦄ⱘਃࡼᓣ䖯㸠᪡
BOOT_IN_RECOVERY_MODE_MASK ԡᴹ䄺ਞ PEI ⸔ഫএᓔྟᘶDŽ✊ৢ PEI ⸔ഫ䞡
ਃՓਃࡼᓣ䖯ܹ BOOT_IN_RECOVERY_MODE ✊ৢ䇗ᑺҹ BOOT_IN_RECOVERY_MODE
Ўᔧࠡଃϔᓣⱘᓔྟ䰊↉DŽ
ϔϾ PEIM ৃҹ㹿ᓎゟএ໘⧚䚼ߚᘶᎹᴹ߱ྟ࣪ᬃᣕᘶᎹⱘೈ䆒˄ࣙᣀҪӀ
ԡѢⱘᘏ㒓˅ ˈ✊ৢҢೈ䆒এ䇏পᮄ䬰ڣᴹछ㑻ӊोDŽ
PEI ✊ৢ䖯ܹ DXE 䰊↉ˈЎ DXE 㹿䆒䅵ᴹ໘⧚Ϣೈ䆒ⱘ䗮ֵDŽ䖭⾡䖯ܹ乱ⱘད໘
ህᰃᰃབᵰ DXE থ⦄ϔϾ䆒ᤳണˈᅗৃ㛑ϡ⫼ᡞࠊᴗѸ㒭 PEI 䰊↉ᴹᓔྟᘶDŽ
བᵰ PEI ⸔ഫ≵᳝ϔϾ݇Ѣ䇗ᑺݙᆍⱘ߫㸼ˈᅗབԩⶹ䘧ӊो䞠ϔϾ᮴ᬜⱘऎඳ
ᰃ৺ࣙϔϾ PEIM˛PEI ⸔ഫᅗ᧰㋶ PEIM ᯊᅗৃҹথ⦄䚼ߚⱘᤳണˈ䖭ⳟ䍋ᴹڣᰃ
ϔϾ䰘ࡴ㒧ᵰDŽℸˈབᵰ PEI ⸔ഫᅠ៤ᅗⱘ䇗ᑺ䖛ৢᑊ≵᳝থ⦄䎇ⱘ䴭ᗕ㋏㒳ᄬ
ټぎ䯈এᓔྟ DXE 䰊↉ˈ✊ৢᅗӮ䖯ܹࠄᘶ䰊↉DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
䖭Ͼᶊᵘ䳔㽕ҹϟⱘ⡍⅞ਃࡼ䏃ᕘ˖
Ёᮁৢਃࡼ˖ϔϾЁᮁথ⫳њ
MCA ৢਃࡼ˖ϔϾᴎ఼Ẕ⌟ԧ㋏˄MCA˅џӊথ⫳
intel ᅝ 㝒 ໘ ⧚ ఼ ᢹ ᳝ Ͼ ⣀ ⡍ ⱘ ਃ ࡼ 䏃 ᕘ ˈ ᅗ Ӏ ৃ ҹ 䝦 ԡ Ѣ ㋏ 㒳 ᢑ 䈵 ሖ ܹ ষ ⚍
SALE_ENTRY ⱘ䇗ᑺ఼DŽ໘⧚఼Ёᮁ MCA ᰃϸϾਃࡼᅝ㝒㋏㒳 sec ҷⷕ/䇗ᑺ఼ⱘᓖℹџӊDŽ
efi security ഫᇍѢ䰸њথ⫳⹀ਃࡼⱘᘶẔ⌟᠔᳝ⱘҷⷕ䏃ᕘᰃ䗣ᯢⱘDŽPEIM DXE
偅ࡼ໘⧚䖭ѯџӊᰃᶊᵘ㑻䆒䅵ⱘᑊϨϡᇚࠊᴗ䖨ಲḌᖗ䇗ᑺ఼DŽᅗӀ䇗⫼ᅗӀ㞾ᶊᵘⱘ
ԡѢ᪡㋏㒳ⱘ໘⧚ᑣDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
//*******************************************************
// EFI_BOOT_MODE
//*******************************************************
typedef UINT32 EFI_BOOT_MODE;
#define BOOT_WITH_FULL_CONFIGURATION 0x00
#define BOOT_WITH_MINIMAL_CONFIGURATION 0x01
#define BOOT_ASSUMING_NO_CONFIGURATION_CHANGES 0x02
#define BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS 0x03
#define BOOT_WITH_DEFAULT_SETTINGS 0x04
#define BOOT_ON_S4_RESUME 0x05
#define BOOT_ON_S5_RESUME 0x06
#define BOOT_ON_S2_RESUME 0x10
#define BOOT_ON_S3_RESUME 0x11
#define BOOT_ON_FLASH_UPDATE 0x12
#define BOOT_IN_RECOVERY_MODE 0x20
0x21 – 0xF..F Reserved Encodings
㸼 14 2 Boot Mode Register
REGISTER BIT(S) VALUES DESCRIPTIONS
MSBit-0 000000b Boot with full configuration
000001b Boot with minimal configuration
000010b Boot assuming no configuration changes from last boot
000011b Boot with full configuration plus diagnostics
000100b Boot with default settings
000101b Boot on S4 resume
000110b Boot in S5 resume
000111b-001111b Reserved for boot paths that configure memory
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Recovery ᘶ
䖭ϔ↉Џ㽕䅼䆎ᑇৄӊᘶDŽᘶᰃ⫼ᴹᦤկϔϾ催ⱘ RASUM˄ৃ䴴ᗻǃᅲ⫼ᗻǃৃ
⫼ᗻǃৃㅵ⧚ᗻ˅ⱘৃ䗝ᮍᓣDŽᘶᰃϔϾ㋏㒳ӊ䆒㹿⸈ണ㗠䞡ᮄᓎゟⱘ䖛DŽ䖭⾡⸈ണ
ৃ㛑᳝⾡ᴎࠊᓩ䍋DŽ䚼ߚԡѢ䴲ᯧ༅ᗻᄬټ䆒˄՟བ䮾ᄬ⹀Ⲭ˅Ϟⱘӊोҹഫⱘᔶ
ᓣ㹿ㅵ⧚DŽབᵰ㋏㒳ϔϾഫ䇁НᛣНϞⱘഫᮄᯊᮁ⬉ˈ䖭ഫᄬৃ఼ټ㛑༅ᬜDŽϔᮍ䴶ˈ
ᄬټ䆒ৃ㛑㹿ϔϾ䫭䇃ⱘᑣ⹀ӊ⸈ണDŽ㋏㒳䆒䅵㗙ᖙ乏ѢҪӀ㛑ᛇࠄⱘ䖭ѯৃ㛑থ
⫳џӊⱘ㒧ᵰᴹއᅮ᠔㛑ᬃᣕⱘᘶሖDŽ
ҹϟᰃ㋏㒳䆒䅵㗙ৃ㛑䗝ᢽϡᬃᣕᘶⱘϔѯॳ˖
ϔϾ㋏㒳ӊोᄬټҟ䋼ৃ㛑ϡᬃᣕᬍᔧ㹿ࠊ䗴དৢDŽᅗৃ㛑ᰃࡳ㛑㉏ԐѢ rom
ⱘ䆒DŽ
䚼ߚᘶᴎࠊⱘᅲ⦄䳔㽕乱ⱘӊोぎ䯈ˈ䖭ᇍѢϔѯ⡍⅞ᑨ⫼ৃ㛑ᯖ䌉DŽ
ϔϾ㋏㒳ৃ㛑᳝䎇ⱘӊोぎ䯈ᑊϨӊो⹀ӊ⡍ᗻϞৃҹᅲ⦄ᕏᑩⱘᆍ䫭ˈ䖭
ḋᘶᴎࠊህ≵᳝ᖙ㽕DŽ
Discovery থ⦄
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
⊼ᛣ˖䖭⾡㾖⚍ϟˈ㋏㒳ഄ⠽⧚ᗻ䞡ਃᑊ≵᳝থ⫳DŽPEI 䇗ᑺ఼ҙҙ⏙䰸⢊ᗕֵᙃ䞡ਃᅗ㞾
ᏅDŽ
ϔϾ PEIM ৃҹ㹿ᓎゟএ໘⧚䚼ߚᘶᎹᴹ߱ྟ࣪ᬃᣕᘶᎹⱘೈ䆒˄ࣙᣀҪӀ
ԡѢⱘᘏ㒓˅ ˈ✊ৢҢೈ䆒এ䇏পᮄ䬰ڣᴹछ㑻ӊोDŽ
PEI ✊ৢ䖯ܹ DXE 䰊↉ˈЎ DXE 㹿䆒䅵ᴹ໘⧚Ϣೈ䆒ⱘ䗮ֵDŽ䖭⾡䖯ܹ乱ⱘད໘
ህᰃᰃབᵰ DXE থ⦄ϔϾ䆒ᤳണˈᅗৃ㛑ϡ⫼ᡞࠊᴗѸ㒭 PEI 䰊↉ᴹᓔྟᘶDŽ
བᵰ PEI ⸔ഫ≵᳝ϔϾ݇Ѣ䇗ᑺݙᆍⱘ߫㸼ˈᅗབԩⶹ䘧ӊो䞠ϔϾ᮴ᬜⱘऎඳ
ᰃ৺ࣙϔϾ PEIM˛PEI ⸔ഫᅗ᧰㋶ PEIM ᯊᅗৃҹথ⦄䚼ߚⱘᤳണˈ䖭ⳟ䍋ᴹڣᰃ
ϔϾ䰘ࡴ㒧ᵰDŽℸˈབᵰ PEI ⸔ഫᅠ៤ᅗⱘ䇗ᑺ䖛ৢᑊ≵᳝থ⦄䎇ⱘ䴭ᗕ㋏㒳ᄬ
ټぎ䯈এᓔྟ DXE 䰊↉ˈ✊ৢᅗӮ䖯ܹࠄᘶᓣDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
कѨゴ
3(, ߱ྟ࣪
ᇣህᰃ㕢
---- E.F. Schumacher
⫼ඳ
3(,䰊↉䋳䋷Ўৢ㓁䰊↉ᦤկϔϾ〇ᅮⱘ⸔㗠߱ྟ࣪䎇ⱘ㋏㒳DŽᅗг䋳䋷Ң༅ᬜⱘӊ
ټᄬぎ䯈Ẕ⌟ᘶᑊᦤկ䞡䍋ॳ˄ਃࡼᓣ˅DŽ
ᴀॳ⧚˖
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ὖ䗄
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ℸ䰊↉㽕∖
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Јᯊⱘ 5$0
ਃࡼ )9˄%)9˅
ᅝܼᗻܗ㋴
ὖᗉ
3(,)RXQGDWLRQ
3(,)RXQGDWLRQᰃϔϾ⫼↣Ͼ໘⧚఼㒧ᵘ㓪䆥៤ߑ᭄ⱘϔϾㅔऩৃᠻ㸠ⱘѠ䖯ࠊ᭛ӊDŽᅗ
ሹ㸠ϸϾЏ㽕ⱘࡳ㛑˖
Ƶ䇗ᑺ 3(,0
Ƶᦤկϔ㒘䗮⫼ⱘḌᖗ᳡ࡵ㒭 3(,0 Փ⫼DŽ
3(,䇗ᑺ఼ⱘᎹᰃ᳝ᑣഄӴ䗦ࠊᴗ㒭 3(,0DŽ䗮⫼Ḍᖗ᳡ࡵᰃ䗮䖛ϔϾ᳡ࡵᑣ㸼ᦤկˈ
䖭Ͼ㸼䗮ᐌ⿄ خ3(, ᳡ࡵᑣ㸼DŽ䖭ѯ᳡ࡵᑣЏ㽕خབϟџᚙ˖
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
3(, ߱ྟ࣪ഫ
3(,0 ৃࣙ໘⧚఼ˈ㢃⠛㒘ˈ䆒ˈ㗙݊ᅗ⡍⅞ᑇৄࡳ㛑ⱘৃᠻ㸠Ѡ䖯ࠊ᭛ӊDŽ3(,0 ৃ
ᢑ䈵៤ৃᦤկ 3(,0 3(,)RXQGDWLRQ Ϣ 3(,0 ⹀ӊ䯈䗮ֵⱘষDŽ3(,0ᰃऩ⣀㓪䆥៤ⱘѠ
䖯ࠊഫˈᅗൟഄ偏⬭ 520 ЁϨ≵᳝㹿य़㓽DŽৃ㛑ᄬϔᇣ䚼ߚ 3(,0 Ўњᗻ㛑ॳ 5$0
Ё䖤㸠ˈ䖭ѯ 3(,0 ҹय़㓽Ḑᓣᬒ 520 ЁDŽᬒ 520 Ёⱘ 3(,0 ᰃݙ㕂ᓣৃᠻ㸠ⱘഫˈ䖭ѯ
ഫৃ㛑ᰃ⬅ԡ㕂⣀ゟҷⷕԡ㕂Ⳍ݇ҷⷕϢ䞡ᅮԡֵᙃϔ䍋㒘៤ⱘDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
3(,᳡ࡵᑣ
ㅔऩⱘේ
Ӵ䗦ϟএⱘֵᙃഫ˄+2%V˅
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Ƶ᭄䚼ߚⱘ㒧ᵘ
Ƶ+2% ᘏᇣ
᪡
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
'HSHQGHQF\㸼䖒ᓣ
偠䆕䡈߿
3(,IRXQGDWLRQᇍѢᅝܼᗻ≵᳝ᅮᔶᓣⳌডᅝܼᗻއᅮᰃᅝᥦ㒭ᑇৄ⡍⅞఼ӊⱘDŽϸ
Ͼؐᕫ⊼ᛣⱘ݇Ѣᅝܼᗻᢑ䈵࣪ⱘ఼ӊᰃ 6HFXULW\33, 偠䆕 33,DŽ偠䆕 33, ⱘⳂⱘᰃẔᶹ↣
Ͼ㒭ќⱘ 3(,0 ⱘ䡈߿⢊ᗕDŽ⫼䙷䞠ⱘᴎࠊ᭄ࣙᄫㅒৡ偠䆕ˈㅔऩⱘ᷵偠ˈ㗙ϔѯ݊ᅗ
2(0 ⡍⅞ᴎࠊDŽ䖭Ͼ偠䆕ⱘ㒧ᵰ䖨ಲࠄ 3(,)RXQGDWLRQᅗ䕂⌕Ӵ䗕㒧ᵰ㒭 6HFXULW\
33,6HFXULW\33, އᅮᰃ৺ᓊ䖳ᠻ㸠 3,(0 㗙⦄ᠻ㸠DŽˈ6HFXULW\33, ᦤկ㗙ৃҹ䗝
ᢽѻ⫳ϔӑᏆ䇗ᑺ 3(,0 ⱘ䆕ᯢ᮹ᖫܹষ㗙ᦤկϔѯ݊ᅗᅝܼᗻᓖᐌџӊDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᠻ㸠 3(,0
থ⦄ݙᄬ
,QWHOᅝ㝒໘⧚఼ 03 㗗㰥џ乍
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
HYHQW ⱘ䆺㒚䌘᭭DŽ䖭Ͼ㓧ކऎгֱᣕњਃࡼҷⷕ㒭䖭ѯ⡍⅞⹀ӊџӊއخᅮᯊ᠔䳔㽕ⱘ䞡㽕
ব䞣ؐDŽ
5HFRYHU\
ᘶᰃᔧӊ㹿⸈ണᯊ䞡ᮄᓎゟϔϾ㋏㒳ӊ䆒ⱘ䖛DŽ䖭Ͼ䫭䇃˄༅ᬜ˅ৃ⬅ϡৠⱘ
ᴎࠊᓩ䍋DŽ᭄ )9 䴲ᯧ༅ᗻᄬټ䆒Ёҹഫⱘൟᓣ㹿ㅵ⧚DŽᔧϔϾ %ORFN VHPDQWLFDOO\
ERXQGEORFNV ℷᮄⱘᯊ㋏㒳ᥝ⬉ˈ䖭Ͼټᄬ఼ৃ㛑Ӯবᕫ᮴ᬜDŽϔᮍ䴶ˈӊ䆒ৃ
㛑ᰃ⬅Ѣ㓪䫭䇃㗙⹀ӊ䫭䇃ᓩ䍋༅ᬜⱘDŽ؛䆒 3(, ᆍ䫭 EORFNЁ䖬ᰃ⌏ⴔⱘˈᅗ㛑ᬃᣕ
ϔϾ UHFRYHU\ᓣⱘ䇗ᑺDŽ
5HFRYHU\ ৢⱘὖᗉᰃ᳝䎇ⱘ㋏㒳ӊ㹿ֱ⬭ˈҹ㟇Ѣ㋏㒳ৃҹਃࡼࠄϔϾৃҹ䇏ࠄҢ᠔
䗝ᢽೈ䆒Ё϶༅ⱘ᭄ࡃᴀⱘ⚍ˈ✊ৢ⫼䙷ѯࡃᴀ᭄ᇍ )9 㓪DŽ
6 䖨ಲ
3(, 䰊↉ 6 䖨ಲϡৠѢ݊ᅗℷᐌਃࡼⱘϾᴀᮍᓣDŽϟ䴶ᰃϡৠП໘˖
Ƶݙᄬ䚼ߚ㹿ᘶ៤ⴵࠡⱘ⢊ᗕ㗠ϡᰃ߱ྟ࣪ᅗDŽ
Ƶ㋏㒳ݙᄬᔦሲѢ 26ˈϡ㛑㹿 3(,)RXQGDWLRQ 㗙 3(,0 Փ⫼DŽ
Ƶ䖨ಲⱘᯊ (;' 䰊↉ϡ㛑㹿䇗ᑺˈЎᅗᇚ⸈ണݙᄬDŽ
Ƶ3(,0 ᇚℷᐌഄ䇗ᑺ ';( 䰊↉ҷ᳓Փ⫼⡍⅞ⱘ +DUGZDUH6DYH7DEOH এᘶᴀ⹀ӊࠄਃ
ࡼᯊⱘ䜡㕂DŽᘶᅠ⹀ӊৢˈ3(,0 ᇚࠊᴗѸ㒭 26 ᦤկⱘ䖨ಲⶶ䞣DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
㋏㒳⼎՟
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
33, џ՟
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᬃᣕ 33,᳡ࡵᑣⱘҷⷕ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
क݁ゴ
䲚៤ϔ䍋ӊӓⳳ
ϧᆊህᰃϔϾ⢃њҪ䙷Ͼ⣁ᇣ乚ඳ᠔᳝ৃҹ⢃ⱘ䫭䇃ⱘҎDŽ
—Niels Bohr
ࠡ䴶ⱘゴ㡖䞠ˈӊ߱ྟ࣪ⱘϡৠ䰊↉Ꮖ㒣ҟ㒡њDŽˈ䖬ᦣ䗄њⳂᷛᑇৄϞৃҹ
ᅲ⦄ⱘϔѯഫ˄㒘ӊ˅ DŽ䖬᳝ˈᕜᯢᰒⱘˈ᭄ⱘ EFI ӊষᑊ≵᳝ⳈϢ⹀ӊᠧѸ䘧ˈ
প㗠ҷПⱘᰃϢㅵ⧚⹀ӊⱘᑩሖ㒘ӊѸѦDŽӴ㒳Ϟᴹ䇈ˈӊᓔথϡৃ㛑⾏ᓔ⬉䏃ӓⳳ఼(ICE)
㗙⹀ӊ䇗䆩఼㗠䖯㸠ⱘDŽ㗗㰥ࠄ EFI ⱘӊЁা᳝䴲ᐌᇥⱘ㒘ӊⳈϢ⹀ӊᠧѸ䘧ˈ៥Ӏህৃ
ҹϔϾᷛⱘޚ᪡㋏㒳⦃๗ݙᇍӊЁⱘ㒱᭄㒘ӊ䖯㸠ӓⳳᓔথDŽ
EFI ⱘৃᠻ㸠ᅲ՟Ёˈ᳝ϔϾি“خNT32”ⳂᷛᑇৄDŽ˄Ⳃᷛᑇৄᰃ EFI 㓪䆥ᯊⱘϔϾ䗝
乍ˈϔ㠀䛑ৃҹخЎ⣀ゟⱘ flashˈ⚻ ࠄݭbios ЁএDŽԚᰃ䖭Ͼ nt32 ϡᰃ⫼ᴹ⚻ˈⱘݭ㗠ᰃϔ
Ͼӓⳳ఼DŽ˅䖭Ͼ⦃๗Ёˈ៥Ӏৃҹᡞ᭄ӊഫЎϔϾᑨ⫼ᑣ᪡㋏㒳Ёᠻ㸠ϔ
ḋᴹ䖤㸠ˈᑊϨৃҹᕜᮍ֓䖯㸠ᓔথ䇗䆩ᎹDŽ᭄ⱘӊҷⷕ᳔߱ህᰃ߽⫼䖭Ͼ⦃๗ϟ
ⱘ㓪䆥఼䇗䆩఼≵᳝ⳳᅲ⹀ӊⱘᚙމϟݭ៤ⱘDŽᔧ✊䖭Ͼӓⳳ⦃๗г᳝݊ሔ䰤ᗻˈ↩コ䖬᳝
ϔѯഫᖙ乏Ϣ⹀ӊѸѦˈ䖭ѯഫᕜ䲒ӓⳳ⦃๗Ёᅲ⦄ˈ៥Ӏᴀゴⱘৢ䴶Ӯ䖯㸠Ⳍ݇ⱘ
䅼䆎DŽ 16.1 ᰒ⼎ϔϾӊӓⳳ⦃๗ϟⱘ EFI Shell 䖤㸠ᶤϾ᪡㋏㒳⦃๗ЁⱘᚙᔶDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
㰮ᢳᑇৄ
NT32 ᑇৄϡ䳔㽕ⶹᰧ⹀ӊ㒚㡖ˈ㗠ᰃՓ⫼᪡㋏㒳ⱘᑨ⫼ᑣষᴹᅲ⦄ᇍ⹀ӊᑇৄⱘᢑ
䈵DŽ 16.2 ᰒ⼎њ䖭ϾᑇৄᰃབԩਃࡼⱘDŽᅗЎℷᐌਃࡼ䖯ⱘϔ䚼ߚˈ᳔㒜ҹਃࡼᑨ⫼
ᑣⱘᮍᓣਃࡼӊӓⳳᑇৄDŽᇍ᭄ᓔথ㗙ᴹ䇈ˈ߯ᓎᠻ㸠䖭Ͼ NT32 ӓⳳ⦃๗বᕫ䴲ᐌㅔ
ऩˈϡ䖛ᰃϔϾᷛ⹀ⱘޚӊᑇৄϞਃࡼϔϾ❳ⶹⱘ᪡㋏㒳ˈ✊ৢ䈵߯ᓎᠻ㸠᱂䗮ⱘᑨ⫼
ᑣϔḋᴹਃࡼ䖭Ͼӓⳳ⦃๗DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
16 2 The Normal Boot Process Launching an Operating System that Will Launch the Emulation
Environment
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ӓⳳӊⱘϾ䰊↉
ӓⳳ⦃๗᳝ҹϟϾϡৠⱘ䰊↉
Ўӓⳳ⦃๗ᓎゟ WinNThunkDŽ
䖭Ͼ䰊↉ѻ⫳ϔ⾡ৃ㛑ˈे䗮䖛ӊ䚼ߚ㛑⍝ঞࠄϔѯ“⹀ӊ”䚼ߚDŽ䖭ᰃ䗮䖛㘨ড়ˈ᪡
㋏㒳ᑩሖ api 䇗⫼Ⳍ㘨㋏ⱘৃ㾕ⱘӊ䚼ߚˈᴹᅲ⦄ⱘDŽ
16.4 ᦤկњ㢹ᑆϾӊⱘᵘӊϢ᪡㋏㒳ᴀഄ䇗⫼Ⳍ݇㘨ⱘ՟ᄤ↨བ㽕߯ᓎϔϾ᭛ӊˈ
៥Ӏৃҹ߯ᓎϔϾӊ䇗⫼ষ˄՟བ WinNTCreateFile˅এ䇗⫼᪡㋏㒳ⱘৡЎ”CreateFile”
ⱘ㋏㒳䇗⫼DŽϟ䴶ⱘ՟ᄤҷⷕ㾷䞞њབԩᇚӊ䇗⫼ষ䖲ࠄ Windows ⱘ㋏㒳䇗⫼Ϟˈ㉏
Ԑⱘᴎࠊৃҹ㉏Ԑഄᑨ⫼ࠄӏԩ᪡㋏㒳ϞDŽ
typedef struct {
UINT64 Signature;
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
//
// Win32 Process APIs
//
WinNtGetProcAddress GetProcAddress;
WinNtGetTickCount GetTickCount;
WinNtLoadLibraryEx LoadLibraryEx;
WinNtFreeLibrary FreeLibrary;
WinNtSetPriorityClass SetPriorityClass;
WinNtSetThreadPriority SetThreadPriority;
WinNtSleep Sleep;
WinNtSuspendThread SuspendThread;
WinNtGetCurrentThread GetCurrentThread;
WinNtGetCurrentThreadId GetCurrentThreadId;
WinNtGetCurrentProcess GetCurrentProcess;
WinNtCreateThread CreateThread;
WinNtTerminateThread TerminateThread;
WinNtSendMessage SendMessage;
WinNtExitThread ExitThread;
WinNtResumeThread ResumeThread;
WinNtDuplicateHandle DuplicateHandle;
//
// Wint32 Mutex primitive
//
WinNtInitializeCriticalSection InitializeCriticalSection;
WinNtEnterCriticalSection EnterCriticalSection;
WinNtLeaveCriticalSection LeaveCriticalSection;
WinNtDeleteCriticalSection DeleteCriticalSection;
WinNtTlsAlloc TlsAlloc;
WinNtTlsFree TlsFree;
WinNtTlsSetValue TlsSetValue;
WinNtTlsGetValue TlsGetValue;
WinNtCreateSemaphore CreateSemaphore;
WinNtWaitForSingleObject WaitForSingleObject;
WinNtReleaseSemaphore ReleaseSemaphore;
//
// Win32 Console APIs
//
WinNtCreateConsoleScreenBuffer CreateConsoleScreenBuffer;
WinNtFillConsoleOutputAttribute FillConsoleOutputAttribute;
WinNtFillConsoleOutputCharacter FillConsoleOutputCharacter;
WinNtGetConsoleCursorInfo GetConsoleCursorInfo;
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
WinNtGetNumberOfConsoleInputEvents GetNumberOfConsoleInputEvents;
WinNtPeekConsoleInput PeekConsoleInput;
WinNtScrollConsoleScreenBuffer ScrollConsoleScreenBuffer;
WinNtReadConsoleInput ReadConsoleInput;
WinNtSetConsoleActiveScreenBuffer SetConsoleActiveScreenBuffer;
WinNtSetConsoleCursorInfo SetConsoleCursorInfo;
WinNtSetConsoleCursorPosition SetConsoleCursorPosition;
WinNtSetConsoleScreenBufferSize SetConsoleScreenBufferSize;
WinNtSetConsoleTitleW SetConsoleTitleW;
WinNtWriteConsoleInput WriteConsoleInput;
WinNtWriteConsoleOutput WriteConsoleOutput;
//
// Win32 File APIs
//
WinNtCreateFile CreateFile;
WinNtDeviceIoControl DeviceIoControl;
WinNtCreateDirectory CreateDirectory;
WinNtRemoveDirectory RemoveDirectory;
WinNtGetFileAttributes GetFileAttributes;
WinNtSetFileAttributes SetFileAttributes;
WinNtCreateFileMapping CreateFileMapping;
WinNtCloseHandle CloseHandle;
WinNtDeleteFile DeleteFile;
WinNtFindFirstFile FindFirstFile;
WinNtFindNextFile FindNextFile;
WinNtFindClose FindClose;
WinNtFlushFileBuffers FlushFileBuffers;
WinNtGetEnvironmentVariable GetEnvironmentVariable;
WinNtGetLastError GetLastError;
WinNtSetErrorMode SetErrorMode;
WinNtGetStdHandle GetStdHandle;
WinNtMapViewOfFileEx MapViewOfFileEx;
WinNtReadFile ReadFile;
WinNtSetEndOfFile SetEndOfFile;
WinNtSetFilePointer SetFilePointer;
WinNtWriteFile WriteFile;
WinNtGetFileInformationByHandle GetFileInformationByHandle;
WinNtGetDiskFreeSpace GetDiskFreeSpace;
WinNtGetDiskFreeSpaceEx GetDiskFreeSpaceEx;
WinNtMoveFile MoveFile;
WinNtSetFileTime SetFileTime;
WinNtSystemTimeToFileTime SystemTimeToFileTime;
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
//
// Win32 Time APIs
//
WinNtFileTimeToLocalFileTime FileTimeToLocalFileTime;
WinNtFileTimeToSystemTime FileTimeToSystemTime;
WinNtGetSystemTime GetSystemTime;
WinNtSetSystemTime SetSystemTime;
WinNtGetLocalTime GetLocalTime;
WinNtSetLocalTime SetLocalTime;
WinNtGetTimeZoneInformation GetTimeZoneInformation;
WinNtSetTimeZoneInformation SetTimeZoneInformation;
WinNttimeSetEvent timeSetEvent;
WinNttimeKillEvent timeKillEvent;
//
// Win32 Serial APIs
//
WinNtClearCommError ClearCommError;
WinNtEscapeCommFunction EscapeCommFunction;
WinNtGetCommModemStatus GetCommModemStatus;
WinNtGetCommState GetCommState;
WinNtSetCommState SetCommState;
WinNtPurgeComm PurgeComm;
WinNtSetCommTimeouts SetCommTimeouts;
WinNtExitProcess ExitProcess;
WinNtSprintf SPrintf;
WinNtGetDesktopWindow GetDesktopWindow;
WinNtGetForegroundWindow GetForegroundWindow;
WinNtCreateWindowEx CreateWindowEx;
WinNtShowWindow ShowWindow;
WinNtUpdateWindow UpdateWindow;
WinNtDestroyWindow DestroyWindow;
WinNtInvalidateRect InvalidateRect;
WinNtGetWindowDC GetWindowDC;
WinNtGetClientRect GetClientRect;
WinNtAdjustWindowRectAdjustWindowRect;
WinNtSetDIBitsToDevice SetDIBitsToDevice;
WinNtBitBlt BitBlt;
WinNtGetDC GetDC;
WinNtReleaseDC ReleaseDC;
WinNtRegisterClassEx RegisterClassEx;
WinNtUnregisterClass UnregisterClass;
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
WinNtBeginPaintBeginPaint;
WinNtEndPaint EndPaint;
WinNtPostQuitMessage PostQuitMessage;
WinNtDefWindowProc DefWindowProc;
WinNtLoadIcon LoadIcon;
WinNtLoadCursor LoadCursor;
WinNtGetStockObject GetStockObject;
WinNtSetViewportOrgEx SetViewportOrgEx;
WinNtSetWindowOrgEx SetWindowOrgEx;
WinNtMoveWindow MoveWindow;
WinNtGetWindowRect GetWindowRect;
WinNtGetMessage GetMessage;
WinNtTranslateMessage TranslateMessage;
WinNtDispatchMessage DispatchMessage;
WinNtGetProcessHeap GetProcessHeap;
WinNtHeapAllocHeapAlloc;
WinNtHeapFree HeapFree;
} EFI_WIN_NT_THUNK_PROTOCOL;
16 4 Thunk Protocol that Associates Some Firmware Names with Operating System APIs
˄䆥㗙⊼˖ҹϞAPIेЎ16.4ˈℸᇚ݊䕀ᤶЎ᭛ᄫ˅
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
16.7 ᰒ⼎њࣙ᪡㋏㒳ǃӊӓⳳ㒘ӊЁⱘ䕃ӊ䘏䕥ҹঞᅗӀП䯈ⱘѸѦˈ䖭ѯৃ
ҹߚЎϝϾЏ㽕ⱘ䚼ߚ
ᕙᓔথⱘӊഫ
⸔ӊҷⷕ
ӊࠄ᪡㋏㒳ⱘ䕀ᤶሖҷⷕ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Ⳉ䆓䯂⹀ӊ
䗮䖛ࠡ䴶ⱘ՟ᄤˈ៥ӀᏆ㒣њ㾷ࠄᑩሖⱘӊৃҹ߽⫼᪡㋏㒳ⱘ䇗⫼DŽϡ䖛ӓⳳ⦃๗ᴀ
䋼Ϟᴹ䇈াᰃ᪡㋏㒳ⱘϔϾᑨ⫼ᑣ㗠Ꮖˈᅗ᮴⊩Փ⫼᪡㋏㒳ⱘ᠔᳝䇗⫼DŽ᭄᪡㋏
㒳Ў䰆ℶᑨ⫼ᑣⱘ䫭䇃ᇐ㟈ᭈϾ᪡㋏㒳ዽˈ䛑䞛⫼њᇚ⫼᠋ぎ䯈ݙḌぎ䯈ߚ䱨ⱘ䆒
䅵ˈ䖭⾡䆒䅵Փᕫ᪡㋏㒳Ẕ⌟ࠄ䫭䇃ᯊˈৃҹㅔऩഄᡞߎ䯂乬ⱘ⫼᠋䖯ᴔᥝ㗠ϡᕅડ᪡
㋏㒳ⱘ݊ԭ䚼ߚDŽ
៥Ӏৃҹḋ՟ᅲ⦄ЁᓩܹϔѯᠽሩᴹЎӓⳳ⦃๗ᦤկᔎⱘ㛑DŽ↨བৃҹᵘ䗴ϔϾ᪡
㋏㒳ݙḌ偅ࡼᴹ䆓䯂ᶤѯϡ㛑Փ⫼ⱘ㋏㒳ߑ᭄ˈ䖭ḋخӮ㒩ᓔϔѯ᪡㋏㒳ݙᓎⱘᅝܼᴎࠊˈ
བᵰϡᇣᖗⱘ䆱ৃ㛑Ӯ䗴៤㋏㒳ⱘዽDŽՓ⫼ݙḌ偅ࡼⱘӓⳳ⦃๗ৃҹ䗮䖛偅ࡼᴹ㦋প䖤㸠ᑇ
ৄⱘᶤѯ⹀ӊ䌘⑤ˈݡ䗮䖛ষᮍᓣᦤկ㒭Ϟሖ䇗⫼ˈӓⳳ⦃๗ݙ㒭Ϟሖᦤկⱘ⹀ӊ䌘
⑤DŽ
16.8 ᰒ⼎њ㢹ᑆϾഫⱘⳌѦ݇㋏
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
कϗゴ
&RPSDWLELOLW\6XSSRUW0RGXOH &60
সࠊ䖕ᯧˈ䅽⏵ᮐᮄ
—Alfred Tennyson
FrameworkFramework ᅮНњᮄⱘӊ(firmware)ൟˈᑊᓩ䖯њ䴲ᐌⱘӬ⚍ˈབᬃ
ᣕഫ࣪ǃಶ䯳ᑊ㸠ᓔথˈᵕഄ㓽ⷁњѻકᏖഎⱘᯊ䯈DŽԚᰃˈFramework ≵᳝ᅮН
Ӵ㒳 OS 䳔㽕ⱘষ(Ӵ㒳ⱘЁᮁ䇗⫼)DŽ⬅Ѣ䖭ϾॳˈFramework 㽕ֱ䆕䞣 legacy 䕃ӊ
Option ROM ҡ✊㛑ℷᐌᎹ᳝ᵕᣥDŽ
Framework ⱘ䆒䅵䳔㽕⹂ֱ䞣 legacy ᑣ㛑ᑇ⒥⿏ỡ䖤㸠DŽlegacy 䕃ӊ䖤㸠䳔㽕
䇗⫼Ӵ㒳 BIOS ᦤկⱘЁᮁ᳡ࡵˈЎњՓ Framework 㛑ᦤկ㉏ԐⱘЁᮁ᳡ࡵˈCSM ᑨ䖤㗠⫳DŽ
CSM ᅠ៤ᇚ EFI ϟ䴶ⱘⳌֵ݇ᙃ䕀ᤶ៤Ӵ㒳 BIOS ϟⱘֵᙃˈᑊᦤկ᪡㋏㒳ᓩᇐ䖤
㸠䖛Ё᠔䳔ⱘӴ㒳 BIOS Ёᮁ᳡ࡵDŽℸˈCSM 䖬ՓӴ㒳ⱘ Option ROM ৃҹ EFI ⦃๗ϟ
䖤㸠ˈㅔ㿔ПˈCSM Փ EFI њݐᆍӴ㒳 BIOS ⱘ㛑DŽ
CSM:Ӵ㒳䴽ᮄⱘḹṕ
䅵ㅫᴎѻϮЁϔ乍ᮄᡔᴃⱘᓩ䖯ᑓᕔᕔ䛑䳔㽕ϔϾ䖛⏵਼ᳳDŽFramework ⱘᓩܹг䳔
㽕ϔᅮᯊ䯈ˈ䆌ᕜⷁˈ䆌ᕜ䭓DŽCSM ഫЎ EFI BIOS Ӵ㒳 BIOS П䯈ⱘḹṕˈᰒ㨫㓽
ⷁњ䖭Ͼ䖛⏵ᯊ䯈DŽCSM ഫՓᕫ EFI ϟৃҹ䇗⫼Ӵ㒳 BIOS ⱘ⾡Ёᮁ᳡ࡵˈℸৃҹᓩᇐ
⾡Ӵ㒳᪡㋏㒳ˈབ DOSˈWindows2000ˈWindows XP ㄝDŽৠḋˈCSM гᬃᣕҢӴ㒳
Option ROM ࠊϟⱘ䆒ᓩᇐ EFI ॳ⫳᪡㋏㒳(EFI-aware 0S)DŽCSM ⱘߎ⦄Փᕫ IBV ৃҹ
ᇚӴ㒳 BIOS EFI BIOS ᮴㓱ᇍˈ㗠ϡ䳔㽕϶ᓗӴ㒳 BIOS ϟⱘᕜࡳ㛑៤ᵰDŽℸˈⳈ
䯈ഄˈCSM Ӵ㒳 BIOS EFI BIOS 䖛⏵䖛Ёᡂⓨⴔ㟇݇䞡㽕ⱘ㾦㡆DŽ
CSM ߽⫼ Framework ᅠ៤⹀ӊᑇৄ߱ྟ࣪ǃ䆒ᵮВঞ㋏㒳ਃࡼ䏃ᕘⱘ䗝ᢽDŽEFI Ё⏏
ࡴњ CSM ⱘ㒘ӊüüEFI ݐᆍഫ(EfiCompatibility)ˈҹᬃᣕӴ㒳᪡㋏㒳Ӵ㒳ⱘ Option
ROMsDŽEfiCompatibility ഫǃIBV ᦤկⱘ Compatibility16BIOS ഫǃCompatibility16SMM
ഫϔ䍋ᵘ៤њᭈϾ CSMDŽӴ㒳 BIOS EFI BIOS 䕀ব䖛ЁˈᬃᣕӴ㒳 Option ROMs ⱘ
ᯊ䯈Ӯ↨Ӵ㒳 OS ⱘᯊ䯈䭓(ॳᰃ EFI ॳ⫳ⱘ᪡㋏㒳᳝ৃ㛑ӮҢ䖤㸠Ӵ㒳 Option ROM ⱘ䆒
Ёᓩᇐ)DŽ⬅Ѣ CSM ᰃഫ࣪㒘ӊˈབᵰϡ䳔㽕ˈৃҹ䕏ᵒҢᭈϾ EFI Ё⿏䰸DŽ 17.1 ሩ⼎
њ Framework ϟ CSM ഫⱘᎹॳ⧚˖
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
CSM ᶊᵘ
Ƶ Ӵ㒳 Option ROM
Ϟ䗄ѨϾ㒘ӊЁˈ䰸Ӵ㒳 Option ROM ৃ㛑⣀ゟѢ EFI firmware Пˈ݊ԭ㒘ӊ䛑㹿ࣙ
EFI firmware 䞠䴶DŽ
CSM Џ㽕᳝ϸ⾡ᑨ⫼എ᱃˖ϔ⾡ˈᓩᇐӴ㒳 OS˗Ѡ⾡ˈҢ䖤㸠Ӵ㒳 Option ROM ⱘ
䆒Ёᓩᇐ EFI ॳ⫳ⱘ OSDŽᓩᇐӴ㒳᪡㋏㒳ᰃӴ㒳ⱘᑨ⫼ˈϮ⬠ⱘৃ㛑䍟ᰃᔧӴ㒳 OS 㹿
EFI ॳ⫳ⱘ OS ᳓ҷৢˈҡ䳔㽕ᬃᣕӴ㒳 Option ROMDŽᯢ⹂ഄ䇈ˈ䗮䖛Ӵ㒳 Option ROM
ᓩᇐ EFI ॳ⫳ⱘ OS ࡳ㛑ᰃᭈϾӴ㒳 OS ᓩᇐࡳ㛑ⱘᄤ䲚DŽEFI ᶊᵘߚܙ㗗㰥њ䖭Ͼ䖛⏵ࡳ㛑ˈ
ᑊϨབᵰ䳔㽕ˈܕ䆌ᴹᇚ݊⿏䰸DŽ
EFI ݐᆍഫ(CSM32)
Ƶ 㢃⠛㒘Ⳍ݇ⱘ偅ࡼˈབ ICH7
Ӵ㒳 BIOS ݐᆍഫ(CSM16)
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Ӵ㒳 SMM ݐᆍഫ(Compatibility16SMM)
EFI ݐᆍഫ(CSM32)
CSM32 Џ㽕⬅ҹϟण䆂㒘៤˖
Ƶ ⹂ᅮਃࡼ䆒
Ƶ ࡴ䕑 CSM32 Ёⱘ݊Ҫ偅ࡼᑣ
Ƶ ࡴ䕑ֱᡸᓣ/ᅲᓣߛᤶഫ
Ƶ ࡴ䕑ᓩᇐ OS
Legacy BIOS Driver ߚᵤᔧࠡ㋏㒳ⱘ᭄ˈ䇗⫼ EFI ᦤկⱘ APIs ᬊ䲚 CSM16 ᠔䳔ⱘ
㋏㒳ֵᙃˈᑊᇚ䖭ѯֵᙃ䕀࣪៤ CSM16 ⱘ᭄㒧ᵘDŽCSM16 ߽⫼䖭ѯ᭄㒧ᵘ߱ྟ࣪ԡѢ㋏
㒳ݙᄬ 0x400-0x500 ⱘӴ㒳 BIOS ᭄ऎ(BDA)ǃᠽሩ BIOS ᭄ऎ(EBDA) CMOSDŽ
Legacy BIOS Protocol 䖬ӮՓ⫼䖭ѯ᭄ᴹ䞡䆒䙷ѯӴ㒳䆒ⱘ䌘⑤DŽ.
EFI ᇍ⹀ӊ䆒ⱘᵮВǃ䜡㕂ᰃ↨䕗ㅔऩǃԢ㑻ⱘˈϡᇍ䇌བІ㸠ষᑊ㸠ষㄝӴ㒳䆒
ߚ䜡Ёᮁߚ䜡DŽԚ CSM16 㽕∖䖭ѯӴ㒳䆒᳝ℷ⹂ⱘЁᮁˈℸ Legacy BIOS Driver 䳔
㽕ᇍ䖭ѯӴ㒳䆒䖯㸠䞡ᮄ䜡㕂ҹ⒵䎇䖭Ͼ㽕∖DŽLegacy BIOS Driver ᳝ϸ⾡ᅲ⦄䗝ᢽ˖ㅔ
ऩ⠜ᅠܼ⠜DŽᇍѢ䙷ѯ䗮䖛Ӵ㒳 Option ROM ᓩᇐ EFI ॳ⫳᪡㋏㒳ⱘᑨ⫼ˈৃҹ䗝ᢽㅔऩ
⠜DŽ㗠ᇍѢ䳔㽕ᓩᇐӴ㒳᪡㋏㒳ⱘᑨ⫼ˈ߭䗝ᢽᅠܼ⠜DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
CSM16
㸼 17.1ȱCSM16 ഫᦤկⱘӴ㒳Ёᮁ᳡ࡵᑣȱ
Ёᮁ ᦣ䗄
0x02 NMI ϡৃሣ㬑Ёᮁ
0x05 ሣᐩᠧॄ
0x08 ㋏㒳ᯊ䩳Ёᮁ˄IRQ0˅
0x09 䬂ⲬЁᮁ˄IRQ1˅
0x10 ᰒव˄ᰒ⼎˅᳡ࡵ
0x11 䆒Ẕ⌟
0x12 ᴀݙᄬᇣẔ⌟
0x13 ⺕ⲬЁᮁ᳡ࡵ˄䕃Ⲭǃ⹀Ⲭǃܝ偅ǃU Ⲭㄝ˅
0x14 Іষ䗮䆃᳡ࡵ
0x15 ㋏㒳᳡ࡵ
0x16 䬂Ⲭ᳡ࡵ
0x17 ᑊষᠧॄᴎ᳡ࡵ
0x18 ㋏㒳ਃࡼㅵ⧚᳡ࡵ
0x19 ㋏㒳ᓩᇐᑣ᳡ࡵ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
0x1A ㋏㒳ᯊ䯈᳡ࡵ
0x1B ᑣЁᮁ᳡ࡵˈㄝᬜѢᣝϟ Ctrl+Break
0x1C ᅮᯊ఼᳡ࡵ
0x1D ᰒ⼎খ᭄
0x1E 䕃偅ࠊখ᭄
0x1F ᄫヺⶽ䰉
0x40 䕃Ⲭ᳡ࡵ
0x41 Џ⹀Ⲭࠊ఼খ᭄
0x46 Ң⹀Ⲭࠊ఼খ᭄
0x70 RTC Ёᮁ˄IRQ8˅
0x74 PS2 哴ᷛЁᮁ˄IRQ12˅
0x75 ᭄ᄫण໘⧚఼Ёᮁ˄IRQ13˅
0x76 Џ IDE ⹀Ⲭࠊ఼Ёᮁ˄IRQ14˅
0x77 Ң IDE ⹀Ⲭࠊ఼Ёᮁ˄IRQ15˅
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
CSM16Table
㸼 17.1ȱCSM16 ഫᦤկⱘӴ㒳Ёᮁ᳡ࡵᑣȱ
㸼乍 ⿏أ ᦣ䗄
Signature 0x00 Ā$EFIā㸼ᯢᰃ㸼ⱘᓔྟDŽ
⊼ᛣᄫヺⱘᄬᬒ乎ᑣˈ 0 Ͼᄫ㡖ᰃ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ĀIā
ˈ 3 Ͼᄫ㡖ᰃĀ$ā
TableChecksum 0x04 㸼ⱘẔ偠ؐDŽᭈϾ㸼ⱘ↣Ͼᄫ㡖ⱘ᭄
㌃ࡴᰃ 0ˈ㸼ⱘ䭓ᑺ TableLength
ЁᣛᅮDŽ
TableLength 0x5 㸼ⱘ䭓ᑺˈҹᄫ㡖ऩԡDŽ
EFIMajorRevision 0x06 EFI Џ⠜ᴀো
EFIMinorRevision 0x07 EFI ⠜ᴀো
TableMajorRevision 0x08 ᴀ㸼Џ⠜ᴀো
TableMinorRevision 0x09 ᴀ㸼⠜ᴀো
Reserved 0x0A ֱ⬭ԡ
Compatibility16CallSegment 0x0C CSM16 ࡳ㛑ষⱘܹষഄഔⱘ↉ഄഔ
Compatibility16CallOffset 0x0E CSM16 ࡳ㛑ষⱘܹষഄഔⱘ⿏أഄ
ഔ
PnPInstallationCheckSegmen 0x10 Pnp 㒧ᵘⱘ↉ഄഔ
t
PnPInstallationCheckOffset 0x12 Pnp 㒧ᵘⱘ⿏أഄഔ
EFISystemTable 0x14 EFI ㋏㒳䌘⑤㸼ⱘ 32 ԡ⠽⧚ഄഔ
OemIdStringPointer 0x18 OEM ID ᄫヺІⱘ 32 ԡ⠽⧚ഄഔ
AcpiRsdPtrPointer 0x1C ACPI RSD PTR ⱘ 32 ԡഄഔDŽACPI 㸼
ⱘᅲ䰙᭄ձᮻ EFI Ёॳ᳝ԡ㕂DŽ
OemRevision 0x20 ⫼Ѣ OEM 㞾ᅮН
E820Pointer 0x22 INT15 E820 ᭄ⱘᄬᬒഄഔˈ
EFICompatibility 䋳䋷฿ݭԧⱘ᭄
DŽ
E820Length 0x26 EFICompatibility ฿ ⱘݭE820 ᭄䭓
ᑺDŽ
IrqRoutingTablePointer 0x2A PCI Ёᮁ䏃⬅㸼ⱘ 32 ԡഄഔˈ
EFICompatibility 䋳䋷฿ݭԧⱘ᭄
DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
CSM16 ߑ᭄ষ
Compatibility16InitializeYourself()
Compatibility16UpdateBbs()
Compatibility16PrepareToBoot()
Compatibility16Boot()
䖭ᰃ EFICompatibility ᳔ৢϔϾ䇗⫼ⱘߑ᭄ˈ⫼ᴹᓩᇐ᪡㋏㒳DŽ0xE0000~0xFFFFF ↉ⱘ
ݙᄬᰃֱݭᡸⱘDŽEFICompatibility Ӯᦤկ䎇ⱘֵᙃЎܹখ㒭ℸߑ᭄DŽℸࡳ㛑ᖙ乏ֱ䆕 CPU
ᰃ 16 ԡᅲᓣˈՓ⫼ INT19 䖯㸠ᓩᇐ᪡㋏㒳DŽ
Compatibility16RetrieveLastBootDevice()
䖭Ͼߑ᭄䖨ಲ᳔ৢϔϾਃࡼ䆒ⱘӬܜ㑻DŽEFICompatibility Ӯᦤկ䎇ⱘֵᙃЎܹখ
㒭ℸߑ᭄DŽℸߑ᭄ৃҹ䅽 EFICompatibility ਃࡼ䆒ⱘᚙމϟẔᶹᰃ৺ᰃ᳔ৢϔϾਃࡼ䆒
DŽ
Compatibility16DispatchOprom()
Compatibility16GetTableAddress()
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
Compatibility16SetKeyboardLeds()
Compatibility16InstallPciHandler()
Compatibility16SMM
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
⫼ CSMDŽ
17.5 ᰒ⼎њ BDS 䰊↉ⱘ CSM ⱘࡳ㛑㾚DŽ䗮䖛 Legacy BIOS Protocol ण䆂ˈBDS
⹂ᅮਃࡼ䆒ᑊϨᅠ៤᪡㋏㒳Ⳍ݇ⱘ⾡ࡼDŽϔϾ䆒⬅ EFI 偅ࡼӴ㒳 Option ROM 偅
ࡼৃ㛑Ӯ᳝ϡৠⱘ⦄䈵DŽEFI 偅ࡼѻ⫳ϔϾਃࡼ䆒߫㸼DŽShadowAllLegacyOproms()ߑ᭄
݇䯁᠔᳝ⱘ EFI 䆒DŽGetBbsInfo()ߑ᭄ѻ⫳Ӵ㒳ਃࡼ䆒߫㸼DŽ Option ROM ߱ྟ࣪ᳳ䯈ˈ
CSM Ӯᮄݙ䚼ⱘ BBS 㸼DŽBDS ѻ⫳ᅠᭈⱘਃࡼ䆒߫㸼ˈ᠔ҹ Setup 㛑ܼ䴶ⱘ㒭⫼᠋ᰒ⼎
ਃࡼ䗝乍ҹ֓⫼᠋䗝ᢽDŽ⫼᠋Ңਃࡼ䆒߫㸼Ё䗝ᢽਃࡼ䆒DŽCSM16 ഫᡞӴ㒳ⱘⲬোߚ䜡
㒭ৃ⫼ⱘ䆒DŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ
௮ͳΖΪΠΟΕ͑ͳͺ΄௯Ё᭛乘㾜⠜͑ ΈΈΈ͟ͳͺ΄ͶͿ͟ʹ;͑
ᅝ㺙Ӵ㒳 BIOS ⦃๗
ਃࡼϔϾӴ㒳᪡㋏㒳
Ƶ ᓎゟ BBS 㸼ᑊϨ⹂ᅮਃࡼ䆒ⱘӬܜ乎ᑣ
Ƶ Փ⫼ Compatibility16GetTableAddress()ߑ᭄ˈᣋ䋱 MP 㸼ˈOEM 㞾ᅮНⱘ 16
ԡ 32 ԡ᭄ࠄӴ㒳 BIOS ऎඳDŽ
Ƶ 䇗ᭈ 8259 PIC ⱘӴ㒳Ёᮁ䞣ഔ
Ƶ 䇗⫼ Compatibility16BIOS ⱘ PrepareToBoot()ߑ᭄
Ƶ ՓӴ㒳 BIOS ऎඳা䇏(ֱݭᡸ)
Ƶ 䗮䖛 Compatibility16Boot()ߑ᭄䇗⫼ INT19 ᴹᓩᇐӴ㒳 OSDŽ
ໄᯢ˖ᴀ䌘᭭ҙկᄺдখ㗗⫼ˈ㒣ᥜᴗˈϡᕫ䖯㸠ӏԩࠊǃ䕀䕑ǃӴ᪁ǃߎ⠜ㄝ䴲⊩П⫼䗨ˈ䇋ᄺдৢ
24 ᇣᯊߴݙ䰸ˈ৺߭ৢᵰ㞾䋳DŽ