SecureBootã«é¢ããæåŸã®
èšäºã§ã¯ãBIOSã»ããã¢ãããä»ããŠUEFIãæ§æããéã«ã¹ã¯ãªãŒã³ã·ã§ãããæ®ãæ©èœãæ¬åœã«äžè¶³ããŠããŸããããããã¹ãã³ã³ãœãŒã«ãã·ãªã¢ã«ããŒãã«ãªãã€ã¬ã¯ãããŸããã ããã¯çŽ æŽããã解決çã§ãããããã€ãã®ãµãŒããŒãã¶ãŒããŒãã§äœ¿çšã§ããŸããããã䜿çšãããšãæ¬äŒŒã°ã©ãã£ãã¯ã®ã¿ãååŸã§ããŸãããå®éã®æ¬äŒŒã°ã©ãã£ãã¯ãååŸãããã§ããèŠæ ãããããæ¯åã¿ãŒããã«ãŠã£ã³ããŠããåãåãå¿
èŠã¯ãããŸããã
ããããŸãã«ãã®èšäºã§è¡ãããšã§ãããåæã«DXEãã©ã€ããŒãšã¯äœãããããèªåã§äœæãçµã¿ç«ãŠããã¹ãããæ¹æ³ãUEFIã§ã®ããŒããŒãå
¥åãšç»é¢ãžã®åºåã®ä»çµã¿ãæ¥ç¶ãããã¹ãã¬ãŒãžããã€ã¹éã§ãããèŠã€ããæ¹æ³ããã¡ã€ã«ãæžã蟌ãããšãã§ããå ŽæãUEFIãããã¡ã€ã«ã«äœããä¿åããæ¹æ³ãããã³å€éšCã³ãŒãããã¡ãŒã ãŠã§ã¢ã®äžéšãšããŠæ©èœããããã«é©åãããæ¹æ³ã
ããªãããŸã èå³ããããªããç§ã¯ããªãã®äžã§ããªããåŸ
ã£ãŠããŸãã
å
責äºé
UEFIã®ãã©ã€ããŒã®äœæãšãããã°ã«ã€ããŠè©±ãåã«ããã¡ãŒã ãŠã§ã¢ã®å®éšã¯å±éºãªããžãã¹ã§ããããã¬ã³ã¬ãã«ã€ãªããå¯èœæ§ããããæãäžå¹žãªå Žåã«ã¯ããŒããŠã§ã¢é害ã«ã€ãªããå¯èœæ§ããããšããã«èšã£ãŠãã䟡å€ããããŸããäºåã«èŠåããŸããããªããããã§èªããã¹ãŠã¯ãããªãèªèº«ã®å±éºãšãªã¹ã¯ã§äœ¿çšããŸããç§ã¯ããªãã®ãã¡ãŒã ãŠã§ã¢ãŸãã¯ããŒãã®æ©èœæ§ã®æå€±ã«å¯ŸããŠè²¬ä»»ãè² ããŸããã ãã¡ãŒã ãŠã§ã¢ã§å®éšãéå§ããåã«ãããã°ã©ãã䜿çšããŠSPIãã©ãã·ã¥ã®å
容å
šäœã®å®å
šãªã³ããŒãäœæããå¿
èŠããããŸãã ãã®æ¹æ³ã§ã®ã¿ããœãããŠã§ã¢ã®é害åŸã®ãã¡ãŒã ãŠã§ã¢ã®æ£åžžãªå埩ãä¿èšŒã§ããŸãã
ããã°ã©ããŒã¯ããªããã
DXEãã©ã€ããŒãäœæããŠãããã°ãããå Žåã¯ã
OVMF ãVmWare Workstation 12ããŸãã¯UEFIããµããŒããããŠããä»ã®ä»®æ³åã·ã¹ãã ã䜿çšããŠãã ããã
ããã§å¿
èŠãªãã®ãšãããDXEãã©ã€ããŒã§ããçç±
ç§ãã¡ã®ã¿ã¹ã¯ã¯ãç¹å®ã®ããŒã®çµã¿åãããæŒãããšã§ãUEFIã¢ããªã±ãŒã·ã§ã³ã®æäœäžïŒããšãã°BIOSã»ããã¢ããïŒã«ç»é¢å
šäœããã¹ã¯ãªãŒã³ã·ã§ãããååŸããæžã蟌ã¿ã¢ã¯ã»ã¹æš©ãæã€ãã¡ã€ã«ã·ã¹ãã ãèŠã€ããŠãçµæã®ã¹ã¯ãªãŒã³ã·ã§ãããä¿åããããšã§ãã äœããã®ã¹ããŒã¿ã¹è¡šç€ºãååŸããã®ãããã§ãããã ãªããªã ã¹ã¯ãªãŒã³ã·ã§ãããæ®ãã«ã¯ãUEFIã¢ããªã±ãŒã·ã§ã³ã®æäœãäžæããå¿
èŠããããŸããUEFIã«ã¯ããªãšã³ããã£ããã«ãã¿ã¹ã¯ããŸã ãªããããããããåé€ããããã°ã©ã èªäœã¯ã¢ããªã±ãŒã·ã§ã³ã«ã¯ãªããŸããããããã£ãŠãDXEãã©ã€ããŒãå¿
èŠã§ãã
ãã®äœæ¥ã®ã¹ããŒã ã¯ããããæ¬¡ã®ããã«èšç»ãããŠããŸãã
0 ã ããã¹ãå
¥åïŒããŒã¹ãããŒã¯ãåŠçããããïŒãšã°ã©ãã£ãã¯åºåïŒã¹ã¯ãªãŒã³ã·ã§ãããååŸãããã®ãããããã«ïŒã®åºçŸåŸã«ã®ã¿ããŒãããŸãã
1 LCtrl + LAlt + F12ã®çµã¿åããïŒãŸãã¯å¥œã¿ã«åãããŠïŒã䜿çšå¯èœãªãã¹ãŠã®å
¥åããã¹ãã³ã³ãœãŒã«ã«æŒãããã®ãã³ãã©ãŒã
åæããŸãã
2 ã ãã³ãã©ãŒã§ã¯ããã¹ãŠã®åºåã°ã©ãã£ãã¯ã³ã³ãœãŒã«ãèŠã€ãããããããã¹ã¯ãªãŒã³ã·ã§ãããååŸãã
PNG圢åŒã«ãšã³ã³ãŒãã
ãŸã ïŒUEFIã¢ããªã±ãŒã·ã§ã³ã¯éåžžæ°çŸäžè²ã䜿çšããªãããããã®åœ¢åŒã®ã¹ã¯ãªãŒã³ã·ã§ããã¯BMPã§æ°ã¡ã¬ãã€ãã§ã¯ãªãæ°åãããã€ãã®ãµã€ãºã§ååŸãããŸãïŒã
ïŒ ã åããã³ãã©ãŒã§ãã«ãŒãã«æžã蟌ãããšãã§ããæåã®ãã¡ã€ã«ã·ã¹ãã ãèŠã€ããããã«åä¿¡ãããã¡ã€ã«ãä¿åããŸãã
æåã«èŠã€ãã£ãFSã§ã¯ãªããããšãã°USBããã€ã¹ã®ã¿ãŸãã¯
ESPããŒãã£ã·ã§ã³ã®ã¿ãéžæããããšã§æ©èœãæ¡åŒµããããšãã§ããŸãããããèªè
ã«ä»»ããŠãç¬ç«ããŠåäœãããŠãã ããã
SDKãéžæ
UEFIã§åäœããæ°ããã³ãŒããäœæããããã®2ã€ã®ç°ãªãSDKããããŸã
ãUEFIãã©ãŒã©ã ã®æ°ãã
EDK2ãšãå€ãIntelã³ãŒãã«åºã¥ããç¬ç«ããéçºè
ã®
GNU-EFIã§ãã ã©ã¡ãã®ãœãªã¥ãŒã·ã§ã³ããCããã³/ãŸãã¯ã¢ã»ã³ãã©ãŒã§ã³ãŒããèšè¿°ããããšãæå³ããŸãããã®å ŽåãçŽç²ãªCãšã®ããåãã詊ã¿ãŸãã
ã©ã®SDKãåªããŠãããã倿ããããšã¯ç§ã«ãšã£ãŠã§ã¯ãããŸããããEDK2ã䜿çšããããšããå§ãããŸãã å
¬åŒã§ã¯ãã¹ãã©ãããã©ãŒã ã§ããã倿Žã®ãœãŒã¹ã«è¿ããããæ°ããæ©èœïŒå€ããã°ã®ä¿®æ£ãšãšãã«ïŒãã¯ããã«éã衚瀺ãããŸãããŸããã³ãŒããäœæãããã¹ãŠã®
IBVã§äœ¿çšãããŸãã
EDK2ã¯çµ¶ãéãªãéçºã®éçšã«ããããã©ã³ã¯ã«1æ¥ã«2ã3ã³ããããäžè²«ããŠè¿œå ããŠããŸãããããã§ã¯ææ°ã®ãã¬ã³ãã远跡ããªãããïŒãŸã åäœããŸããïŒããã®ããã«åŸè
ã䜿çšããŸãUDK2015ãšåŒã°ããç¬éå®å®ã«ãã
EDK2 ã
ããŸããŸãªã³ã³ãã€ã©ãŒã«ãã£ãŠã¯ãã¹ãã©ãããã©ãŒã ããã³ãã«ãæ©èœãæäŸããããã«ãEDK2ã¯TXTïŒç°å¢æ§æïŒãDECãDSCããã³FDFïŒããã±ãŒãžæ§æïŒããã³INFïŒã³ã³ããŒãã³ãæ§æïŒæ§æãã¡ã€ã«ã䜿çšããŠåãã©ãããã©ãŒã ã®ã¡ã€ã¯ãã¡ã€ã«ãçæããŸããç©èªããããŠä»ããEDK2ãå
¥æããŠHelloWorldãã¢ã»ã³ãã«ããå¿
èŠããã
ãŸã ãä»ãã詳现ã調ã¹ãã®ãåŸ
ã¡ãããªãå Žå
ã¯ãããã¥ã¡ã³ãã«åŸã£ãŠãã ããã
ãã«ãç°å¢ãã«ã¹ã¿ãã€ãºãã
Cããã³ã¢ã»ã³ãã©ãŒã§ã³ãŒãããã«ãããããã«å¿
èŠãªãœãããŠã§ã¢ã¯ãã§ã«ãã·ã³ã«ã€ã³ã¹ããŒã«ãããŠããããšãçè§£ãããŠããŸãã ããã§ãªãå ŽåãWindowsãŠãŒã¶ãŒã¯Windowsãã¹ã¯ãããçšVisual Studio 2013 Expressãã€ã³ã¹ããŒã«ããããšããå§ãããŸã; Linuxããã³OSXãŠãŒã¶ãŒã¯GCC 4.4-4.9ããã³NASMãå¿
èŠã§ãã
ããããã¹ãŠãæ¢ã«ã€ã³ã¹ããŒã«ãããŠããå Žåã¯ã
UDK2015ã
ããŠã³ããŒãããUDK2015.MyWorkSpace.zipã®ãã¹ãŠã®ã³ã³ãã³ãããã¡ã€ã«ãäœæããæš©éãããå ŽæïŒå°ãªããšããã¹ã¯ããããŸãã¯ããŒã ãã£ã¬ã¯ããªã«çŽæ¥ïŒã«è§£åãã
BaseToolsïŒWindowsïŒã®ã³ã³ãã³ããè§£åããã ãã§ãã
.zipãŸãã¯
BaseToolsïŒUnix.zipïŒãåã®æé ã§ååŸãã
MyWorkSpaceãã£ã¬ã¯ããªã«
远å ãã
UDK2015ãªã©ã§é©åãªååã«å€æŽããŸãã
ã¿ãŒããã«ãéããæ°ããäœæããã
UDK2015ãã£ã¬ã¯ããªã«ç§»åããŠã
edksetup.bat ïŒãŸãã¯
.sh ïŒ
ã¹ã¯ãªãããå®è¡ã
ãŸã ãããã«ãããããã¹ããã¡ã€ã«ã®ã»ããã
Confãµããã£ã¬ã¯ããªã«ã³ããŒãããŸã
ãtools_def.txtããã³
target.txtã«æ³šç®ããŸãã
æåã®ãã¡ã€ã«ã¯ååã«å€§ãããã¢ã»ã³ããªãŒç°å¢ã«å¿
èŠãªã³ã³ãã€ã©ãŒCããã³
ASL ãã¢ã»ã³ãã©ãŒããªã³ã«ãŒãªã©ãžã®ãã¹ãæã€ç°å¢å€æ°ã®å®çŸ©ãå«ãŸããŠããŸãã å¿
èŠã«å¿ããŠãããã«ç€ºãããŠãããã¹ãä¿®æ£ããããç¬èªã®ãŠãŒãã£ãªãã£ã»ããïŒãããã
ToolChain ïŒã远å ã§ããŸãããç§ã®ã¢ããã€ã¹ãèããå Žåã¯ãVS2013ïŒ32ãããWindowsã®å ŽåïŒãŸãã¯VS2013x86ïŒã§64ãããWindowsã®å ŽåïŒããŸãã¯GCC44 | ... | GCC49ïŒGCCã®ããŒãžã§ã³ã«å¿ããŠã
gcc --versionã«å¿ããŠèŠªåã«è¡šç€ºãããŸãïŒã
2çªç®ã®ãã¡ã€ã«ã«ã¯ããã©ã«ãã®ã¢ã»ã³ããªèšå®ãå«ãŸããŠãããæ¬¡ã®å€ãèšå®ããããšããå§ãããŸãã
ACTIVE_PLATFROM = MdeModulePkg/MdeModulePkg.dsc
UDK2015ã§å¥ã®ã¿ãŒããã«ãéããLinux / OSXã§æ¬¡ã®ã³ãã³ããå®è¡ããŸãã
. edksetup.sh BaseTools
Windowsã®å Žåããã©ã¡ãŒã¿ãŒã®ãªãéåžžã®
edksetup.batã§ååã§ãã
ããã§ããã¹ãŠãæ£ããå®è¡ãããå Žåã
ãã«ãã³ãã³ãã䜿çšããŠ
ãã«ãç°å¢ããã¹ãããäžå®æéåŸã«æ¬¡ã®ãããªã¡ãã»ãŒãžã§çµäºããŸãã
- Done - Build end time: ... Build total time: ...
[
å®äº]ã®ä»£ããã«[
倱æ]ã衚瀺ãããå Žåãèšå®ã«åé¡ããããŸãã Windowsã®VS2013x86ããã³Xubuntu 14.04.3-
OIAã® GCC48ã§äžèšã確èªããŸããã
ãããžã§ã¯ãæ§é
EDK2ã®ã¢ããªã±ãŒã·ã§ã³ãšãã©ã€ããŒã¯åå¥ã«ã¢ã»ã³ãã«ãããã®ã§ã¯ãªãããããã
ããã±ãŒãžã®äžéšãšããŠãã€ãŸã ããã±ãŒãžã ã¢ããªã±ãŒã·ã§ã³èªäœã«å ããŠãããã±ãŒãžã«ã¯ãã©ã€ãã©ãªãããããŒãã¡ã€ã«ã®ã»ãããããã³ããã±ãŒãžã®æ§æãšãã®å
容ã®èª¬æãèšè¿°ããããã¡ã€ã«ãå«ãŸããŸãã ããã¯ãããŸããŸãªãã©ã€ããŒãšã¢ããªã±ãŒã·ã§ã³ãããŸããŸãªã©ã€ãã©ãªãŒå®è£
ã䜿çšããŠãããŸããŸãªããããŒãã¡ã€ã«ãšGUIDã«ã¢ã¯ã»ã¹ã§ããããã«ããããã«è¡ãããŸãã MdeModulePkgã䜿çšããŸããããã¯ãã¢ãŒããã¯ãã£ãšããŒããŠã§ã¢ã«äŸåããªãéåžžã«äžè¬çãªããã±ãŒãžã§ããããã©ã€ããŒãçµã¿èŸŒãããšãã§ããã°ãUEFI 2.1以éã®å®è£
ã§åäœããããšãã»ãŒä¿èšŒãããŸãã ãã®ã¢ãããŒãã®æ¬ ç¹ã¯ããã®äžã®ã»ãšãã©ã®ã©ã€ãã©ãªïŒããšãã°ããããã°åºåãååŸããããã«äœ¿çšãããDebugLibïŒãåãªãã¹ã¿ãã§ããããã®ãããªå¿
èŠãçããå Žåã¯èªåã§äœæããå¿
èŠãããããšã§ãã
ãã©ã€ããŒããã«ãããã«ã¯ããã«ãããå¿
èŠã®ããã©ã€ãã©ãªããããã³ã«ããã¡ã€ã«ã«é¢ããæ
å ±ãå«ãINFãã¡ã€ã«ãå¿
èŠã§ãããŸãããã®INFãã¡ã€ã«ãžã®ãã¹ãããã±ãŒãžã®DSCãã¡ã€ã«ã«è¿œå ããŠãã¢ã»ã³ããªã·ã¹ãã ããã®INFãèªèã§ããããã«ããŸããã¡ã€ã«ã¯ã
æåŸããå§ããŸãããããã¡ã€ã«
UDK2015 / MdeModulePkg / MdeModulePkg.dscãéããŠã[Components]ã»ã¯ã·ã§ã³ãŸã§ã¹ã¯ããŒã«ããŸãïŒæ€çŽ¢ã§èŠã€ããããšãã§ããŸã-é«éã§ãïŒã ãã®ã»ã¯ã·ã§ã³ã«ã¯ãããã±ãŒãžã«å±ãããã¹ãŠã®ãã¡ã€ã«ãé çªã«ãªã¹ããããŸã;ã»ã¯ã·ã§ã³ã®å
é ã¯æ¬¡ã®ããã«ãªããŸãã
[Components] MdeModulePkg/Application/HelloWorld/HelloWorld.inf MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.inf ...
ããã«å°æ¥ã®INFãã¡ã€ã«ãã
UDK2015ã«å¯Ÿããçžå¯Ÿãã¹ãšãšãã«è¿œå ããŸãã
MScreenModuleDkgã§CrScreenshotDxeãã©ã«ããŒãçŽæ¥äœæããINFãã¡ã€ã«ã«
CrScreenshotDxe.infãšããååã
ä»ããããšãææ¡ããŸãã ãæ³åã®ãšãããCrã¯CodeRushã®åºèº«ã§ããããã®èšäºã®èè
ã¯è¬èã§ãã çµæã¯æ¬¡ã®ããã«ãªããŸãã
[Components] MdeModulePkg/CrScreenshotDxe/CrScreenshotDxe.inf MdeModulePkg/Application/HelloWorld/HelloWorld.inf MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.inf ...
倿Žãä¿åããDSCãã¡ã€ã«ãéããŸãããããã°åºåãæ§æããããªãå Žåã¯ãããã倿ŽããŸããããããã¯ãŸã£ããå¥ã®è©±ã§ãã
次ã«ãINFãã¡ã€ã«èªäœãå
¥åããå¿
èŠããããŸãã
ãã®ããã«ãªããŸã äžèšã®
CrScreenshotDxe.sãã¡ã€ã«ãäœæããŸãã
ãã®ã³ã³ãã³ãã§ #include <Uefi.h> #include <Library/DebugLib.h> #include <Library/PrintLib.h> #include <Library/UefiDriverEntryPoint.h> #include <Library/UefiBootServicesTableLib.h> #include <Library/UefiRuntimeServicesTableLib.h> #include <Protocol/GraphicsOutput.h> #include <Protocol/SimpleTextInEx.h> #include <Protocol/SimpleFileSystem.h> EFI_STATUS EFIAPI CrScreenshotDxeEntry ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { return EFI_SUCCESS; }
ä»ãã
buildã³ãã³ããç¹°ãè¿ããå Žåãæåããå¿
èŠããããŸããããã§ãªããã°ãäœãééã£ãããšãããŸããã
ããŠãæåŸã«ããã©ã€ããŒçšã®ç©ºçœããããã³ãŒãã®äœæã«çŽæ¥é²ãããšãã§ããŸãã ãã®ãããªã¢ã»ã³ããªã·ã¹ãã ã¯åœ¹ã«ç«ããªãããšã¯æããã§ãããããã¹ããã¡ã€ã«ãç·šéããŠäœæ¥ããããšã¯ããŸãå¿«é©ã§ã¯ãªããããåIBVã«ã¯EDK2ã¢ã»ã³ããªã·ã¹ãã ãææ°ã®IDEã«çµ±åããç¬èªã®ãœãªã¥ãŒã·ã§ã³ããããŸããããšãã°ãAMI Visual eBIOSç°å¢ã¯ããã«ã¯Eclipseãã©ã°ã€ã³ãå«ãŸããPhoenixãšInsydeã«ã¯Visual Studioãå«ãŸããŠããŸãã
æåãªã³ã³ãã¥ãŒã¿ãŒã»ãã¥ãªãã£ã®å°éå®¶ã§ããAlex Ionescuã«ãã£ãŠäœæãããçŽ æŽããã
VisualUefiãããžã§ã¯ãããŸã ãããŸã
ãVisualStudioã奜ããªãããã²è©ŠããŠã¿ãããšããå§ãããŸãããä»ã®ãšããããŒãã³ã¢ã䜿ãç¶ãããªãŒã«ãã¹ã¯ãŒã«ã®ç²Ÿç¥ãç¶æããŸãã
ããŒã¹ãããŒã¯ãžã®å¯Ÿå¿
ããã§ã¯ãã¹ãŠãéåžžã«ç°¡åã§ãïŒãã©ã€ããŒãèªã¿èŸŒããšãã
SimpleTextInputExãããã³ã«ã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ããœãŒãããŸããããã¯ãããã€ãã®ããŒããŒããã·ã¹ãã ã«æ¥ç¶ãããŠããå Žåã§ããããŒããŒããã©ã€ããŒã«ãã£ãŠå
¬éãããŸãã ããã«ããããããã念ã®ãããå©çšå¯èœãªãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ããœãŒãããå¿çããããŒã®çµã¿åããããã©ã¡ãŒã¿ãŒãšããŠåãå
¥ããå颿°
RegisterKeyNotifyãšãæŒããåŸã«åŒã³åºãããã³ãŒã«ããã¯é¢æ°ãžã®ãã€ã³ã¿ãŒãåŒã³åºããçµã¿åãããå¿
èŠã§ãããã¹ãŠã®äž»èŠãªäœæ¥ã¯ãã§ã«å®äºããŠããŸãã
ãã·ã¢èªããCã«ç¿»èš³ EFI_STATUS EFIAPI CrScreenshotDxeEntry ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_KEY_DATA KeyStroke; UINTN HandleCount; EFI_HANDLE *HandleBuffer = NULL; UINTN i;
ã³ã³ãã€ã«ãæåãããã«ã¯ã
åŸè¿°ã®TakeScreenshotããã³
ShowStatus颿°ã§ã¯ãŸã ååã§ã¯ãããŸããã
æžã蟌ã¿ã¢ã¯ã»ã¹ããã¡ã€ã«ãžã®ããŒã¿æžã蟌ã¿ãå¯èœãªFSãæ¢ããŠããŸã
å©çšå¯èœãªã°ã©ãã£ãã¯ã³ã³ãœãŒã«ãæ¢ããŠãããããã¹ã¯ãªãŒã³ã·ã§ãããæ®ãåã«ããããã®åãã¹ã¯ãªãŒã³ã·ã§ãããã©ããã«ä¿åã§ãããã©ããã確èªããå¿
èŠããããŸãã ãããè¡ãã«ã¯ã
SimpleFileSystemãããã³ã«ã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ãæ€çŽ¢ããŸã
ãSimpleFileSystemãããã³ã«ã¯ãFSããã¡ãŒã ãŠã§ã¢ã«
èªèãããŠããæ€åºãããåããªã¥ãŒã ã®PartitionDxeãã©ã€ããŒã«ãã£ãŠå
¬éãããŸãã ã»ãšãã©ã®å Žåãæ¢ç¥ã®FSã¯FAT12 / 16/32ãã¡ããªïŒFAT32ã®ã¿ïŒã®ã¿ã§ãããUEFIèŠæ Œã«åŸã£ãŠESPã«äœ¿çšã§ããŸãã æ¬¡ã«ãèŠã€ãã£ãFSã«æžã蟌ãããšãã§ããããšã確èªããå¿
èŠããããŸããããŸããŸãªæ¹æ³ã§ãããè¡ãããšãã§ããŸããæãç°¡åãªæ¹æ³ã¯ããã®äžã«ãã¡ã€ã«ãäœæããèªã¿åãããã³æžã蟌ã¿çšã«éãããšã§ãããããæ©èœããå Žåããã®FSã«æžã蟌ãããšãã§ããŸã ãã¡ããããã®ãœãªã¥ãŒã·ã§ã³ã¯æé©ã§ã¯ãããŸããããæ©èœãããããæŒç¿ãšããŠèªè
ã«æ£ããå®è£
ãæäŸãããŸãã
åã³ãã·ã¢èªããCã«ç¿»èš³ãã EFI_STATUS EFIAPI FindWritableFs ( OUT EFI_FILE_PROTOCOL **WritableFs ) { EFI_HANDLE *HandleBuffer = NULL; UINTN HandleCount; UINTN i;
ãã®ã³ãŒãã¯ä»ã«äœãå¿
èŠãšããããã®ãŸãŸæ©èœããŸãã
ã°ã©ãã£ã«ã«ã³ã³ãœãŒã«ãæ¢ããŠããããã®ã¹ã¯ãªãŒã³ã·ã§ãããæ®ããŸã
ã¹ã¯ãªãŒã³ã·ã§ãããä¿åãããã®ãããããšã確èªããããããããåé€ããŸãããã ãããè¡ãã«ã¯ãååºåããã€ã¹ã«ã€ããŠãGOPãã©ã€ããŒããã³VideoBIOSã«ãã£ãŠå
¬éããã
GOPãããã³ã«ã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ïŒããæ£ç¢ºã«ã¯ããããã³ã«ã«ã€ããŠäœãç¥ããªãVBIOSèªäœã§ã¯ãªããå€ãVBIOSãšUEFIã®éã®ã¬ã€ã€ãŒãå®è£
ããConSplitterãã©ã€ããŒïŒããœãŒãããå¿
èŠããããŸãã°ã©ãã£ãã¯ã¹ä»ãã ãã®ãããã³ã«ã«ã¯ã
æåã®ç»åã®ã¿ãå¿
èŠã«ãªããŸã§ãã¬ãŒã ãããã¡ãšã®éã§ç»åãã³ããŒããããã®
Bltæ©èœããããŸãã åããããã³ã«ã®
Modeãªããžã§ã¯ãã䜿çšãããšãç®çã®ãµã€ãºã®ãããã¡ãŒãéžæããç»é¢ã®äžéšããã§ã¯ãªãç»é¢å
šäœããã¹ã¯ãªãŒã³ã·ã§ãããæ®ãã®ã«å¿
èŠãªçŸåšã®ç»é¢è§£å床ãååŸã§ããŸãã ã¹ã¯ãªãŒã³ã·ã§ãããåãåã£ãã®ã§ãå®å
šã«é»ã§ã¯ãªãããšã確èªãã䟡å€ããããŸãããã®ãããªãã®ãä¿åãããšãFSã§æéãšã¹ããŒã¹ãç¡é§ã«æ¶è²»ãããããã§ãããã€ã³ãã§å¿
èŠãªãµã€ãºã®é»ãé·æ¹åœ¢ãæç»ã§ããŸãã æ¬¡ã«ãç»åãBGRïŒBltãæäŸããïŒããRGBïŒPNGãšã³ã³ãŒããå¿
èŠãšããïŒã«å€æããå¿
èŠããããŸããããããªããšãã¹ã¯ãªãŒã³ã·ã§ããã®è²ãééã£ãŠããŸããŸãã 倿åŸã«ååŸããç»åããšã³ã³ãŒãããåã®æé ã§èŠã€ãããã¡ã€ã«ã·ã¹ãã äžã®ãã¡ã€ã«ã«ä¿åããŸãã çŸåšã®æ¥æãã8.3圢åŒã§ãã¡ã€ã«åãåéãããããããã¹ã¯ãªãŒã³ã·ã§ãããå¥ã®ã¹ã¯ãªãŒã³ã·ã§ãããäžæžãããå¯èœæ§ã¯äœããªããŸãã
åã³ãã·ã¢èªããCã«ç¿»èš³ãã EFI_STATUS EFIAPI TakeScreenshot ( IN EFI_KEY_DATA *KeyData ) { EFI_FILE_PROTOCOL *Fs = NULL; EFI_FILE_PROTOCOL *File = NULL; EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput = NULL; EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Image = NULL; UINTN ImageSize;
Lodepng_encode32ã¯äœæ¥ãš
ShowStatusã«æ¢ã«ååã§
ã¯ãããŸããããç¶ç¶ããŸãã
ç»åãPNG圢åŒã§ãšã³ã³ãŒãããŸã
ã³ãŒããèšè¿°ããæè¯ã®æ¹æ³ã¯ãã³ãŒããèšè¿°ããªãããšã§ãããã®ããã
lodepngãšåŒã°ããPNGã®ãšã³ã³ãŒãããã³ãã³ãŒãçšã®æ¢è£œã®ã©ã€ãã©ãªã䜿çšããŠã¿ãŸãããã ããŠã³ããŒãããCãã¡ã€ã«ã®æšªã«çœ®ãã
lodepng.hãš
lodepng.cã®è¡ã[Sources.common]
ã»ã¯ã·ã§ã³ã®INFãã¡ã€ã«ã«è¿œå ããããããŒãã¡ã€ã«ãå«ããŸãã...äœãã³ã³ãã€ã«ããŸãããæšæºã®Cèšèªã©ã€ãã©ãªã¯ãã®ããã«ããŠå®å
šã«åé€ã§ããŸãã åããŠä»äžããŸãã
lodepng.hã®å
é ã«ã次ã远å ããŸãã
#include <Uefi.h> // UEFI #define LODEPNG_NO_COMPILE_DECODER // PNG #define LODEPNG_NO_COMPILE_DISK // , .. fopen/fwrite #define LODEPNG_NO_COMPILE_ALLOCATORS // malloc/realloc/free, .. #define LODEPNG_NO_COMPILE_ERROR_TEXT // #define LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS // PNG, .. #if !defined(_MSC_VER) // size_t GCC, MS #define size_t UINTN #endif
ãããŠãè¡ã
#include <string.h>ã§ã³ã¡ã³ãã¢ãŠãã
ãŸãã ãããããããŸããã ãã¡ãããããã«type_tåãå®çŸ©ããããšã§åãååã®ããŒã«ã«ãã¡ã€ã«ãäœæã§ããŸããã倿Žãå§ããŠããã®ã§å€æŽããŸãã
Lodepng.cã¯ããå°ãè€éã§ã size_tã«å ããŠãæšæºã©ã€ãã©ãªãããmemsetãmemcpyãmallocãreallocãfreeãqsortãå¿
èŠã§ãããæµ®åå°æ°ç¹èšç®ã䜿çšããŸãã Qsortã®å®è£
ã¯
Appleãããã©ãã°ã§ããã¡ã¢ãªé¢æ°ã¯
gBS-> CopyMem ã
gBS-> SetMem ã
gBS-> AllocatePoolããã³
gBS-> FreePoolã®ã©ãããŒã«ããããšãã§ããFPUã§ã®äœæ¥ã«ã€ããŠéç¥ããã«ã¯
CONST INT32宿°ãå®çŸ©ããå¿
èŠããããŸã
_fltused = 0; ããã§ãªããã°ããªã³ã«ãŒã¯åœŒå¥³ã®äžåšãèªããŸãã æšæºã®#includesã䜿çšããŠãã¡ã€ã«ã«ã³ã¡ã³ããä»ããããšã«ã€ããŠã¯ãã話ããŠããŸããããã¹ãŠãæç¢ºã§ãã
Qsort.cãåãæ¹æ³ã§éåžžã®æŠéã«
éå
ãããŸããããã.infãã¡ã€ã«ã«è¿œå ããããšãå¿ããªãã§ãã ããã
ã¹ããŒã¿ã¹ã衚瀺ãã
ShowStatus颿°ãèšè¿°ããã®ã¯æ®ãããã©ã€ããŒã®æºåã¯å®äºã§ãã ãã®åãã¹ããŒã¿ã¹ã¯ããŸããŸãªæ¹æ³ã§ååŸã§ããŸããããšãã°ãPOSTãšã³ã³ãŒããŒã«æ¥ç¶ãããŠããCPU IOããŒã80hã§0x00ãã0xFFãŸã§ã®æ°åãåºåããŸããã誰ããæã£ãŠããããã§ã¯ãããŸããããã©ãããããã§ã¯ãŸã£ããçºçããŸããã ã¹ããŒã«ãŒããããããšã¯ã§ããŸãããããã¯ãŸããã©ãããã©ãŒã ã«äŸåããŠããã2çªç®ã«ã¹ã¯ãªãŒã³ã·ã§ããã2ææ®ã£ãåŸãç§ãæ¿æãããŸãã ããŒããŒãã®ã©ã€ããç¹æ»
ãããããšãã§ããŸããããã¯èªè
ã«ãšã£ãŠè¿œå ã®ã¿ã¹ã¯ã§ãããã®ã°ã©ãã£ãã¯ã³ã³ãœãŒã«ãä»ããŠã°ã©ãã£ãã¯ã³ã³ãœãŒã«ãçŽæ¥æäœããç¶æ
ã衚瀺ããŸããç»é¢ã®å·Šäžé
ã«ç®çã®è²ã®å°ããªåè§åœ¢ã衚瀺ããŸãã ãã®å Žåãçœãåè§ã¯ããã©ã€ããŒãæ£åžžã«ããŒããããŸããããé»è²-ãèšé²æ©èœã®ãªãFSããé-ãçŸåšã®ã³ã³ãœãŒã«ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯å®å
šã«é»ã§ãä¿åããŠãæå³ããããŸããããèµ€-ããšã©ãŒãçºçããŸããããæåŸã«ç·-ãæå³ããŸãã¹ã¯ãªãŒã³ã·ã§ãããæ®ã£ãŠä¿åããŸãããã ãã¹ãŠã®ã³ã³ãœãŒã«ã§ãã®åè§åœ¢ã衚瀺ãããã°ããããŠãããäžæžããããã€ã¡ãŒãžã®äžéšã埩å
ããå¿
èŠããããŸãã
ååããã·ã¢èªããCã«ç¿»èš³ããŸãã EFI_STATUS EFIAPI ShowStatus ( IN UINT8 Red, IN UINT8 Green, IN UINT8 Blue ) {
ããã§ãã¹ãŠãæºåãæŽããæ£åžžã«å®è¡ãã
ãŸãããæºåã
æŽããŸã§èŠãã
ãGitHubããæ¢è£œã®ãã©ã€ããŒãããŠã³ããŒãããŠèªåã®ãã©ã€ããŒãšæ¯èŒããããããã€ãã®å€æŽã説æããã®ãå¿ããŠããŸããã
UEFIã·ã§ã«ã§çµæããã¹ããã
UDK2015 / Build / MdeModulePkg / RELEASE / X64 / MdeModulePkg / CrScreenshotDxe / CrScreenshotDxe / OUTPUTããã¢ã»ã³ãã«ããããã©ã€ããŒã
ååŸããŸããããããå¿
èŠãªãã¡ã€ã«ã¯2ã€ã ãã§ã
ãCrScreenshotDxe.efiãã©ã€ããŒ
èªäœãšã
CrScreenspexDeã®äŸåé¢ä¿ã»ã¯ã·ã§ã³ã§ã
ãæåã«ãUEFIã·ã§ã«ãããã©ã€ããŒã®åäœããã¹ãããŸãã UEFIã·ã§ã«ã
䜿çšããŠãã¡ã€ã«
CrScreenshotDxe.efiãUSBã¹ãã£ãã¯ã«ã³ããŒããããŒãããŠã
fs0ïŒã§ãã©ãã·ã¥ãã©ã€ãã®ã«ãŒãã«ç§»åããŸãïŒã·ã¹ãã ã«æ¥ç¶ãããŠãããã£ã¹ã¯ã®æ°ã«å¿ããŠæ°ãå€ããå ŽåããããŸãïŒ
ãload CrScreenshotDxe.efiã³ãã³ããå®è¡ã
ãŸã ã æåã¡ãã»ãŒãžã衚瀺ãããç»é¢ã®äžéšé
ã«çœãåè§ãç¹æ»
ããŠããå Žåã¯ããã©ã€ããŒã皌åäžã§ããããšãæå³ããŸãã ç§ã«ãšã£ãŠã¯ãã®ããã«èŠããŸãïŒ
UEFIã·ã§ã«
ãã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãåŸç¶ã®ãã¹ãŠã®ã¹ã¯ãªãŒã³ã·ã§ãããšåæ§ã«ããã©ã€ããŒãæ®åœ±ãããã®ã§ãããããã³ãŒããŒã®åè§ã¯è¡šç€ºãããŸããã
次ã«ã
LCtrl + LAlt + F12ã倧èã«æŒããŠãã¹ããŒã¿ã¹ã確èªããŸãã AMIã·ã¹ãã ã§ã¯ãã°ã©ãã£ãã¯ã³ã³ãœãŒã«ã1ã€ãããªããããç·è²ã®åè§åœ¢ãç¹æ»
ãã1åã®çµã¿åããã§1ã€ã®ã¹ã¯ãªãŒã³ã·ã§ãããååŸããŸãã PhoenixãšInsydeã䜿çšããŠããã·ã¹ãã ã§ã¯ã2ã€ã®ã°ã©ãã£ãã¯ã³ã³ãœãŒã«ãããããã®ãã¡ã®1ã€ã¯ç©ºã§ãããããæåã«éãæ£æ¹åœ¢ã次ã«ç·ã®æ£æ¹åœ¢ã衚瀺ãããŸãããã¹ã¯ãªãŒã³ã·ã§ããã1ã€ãããããŸããã UEFIã·ã§ã«ããã®ãã¹ãçµæã¯åãããã«èŠããŸããè§£å床ã¯800x600ã§ã¯ãªãã1366x768ã§ãã
ããŠããã¹ãŠãã·ã§ã«ããæ©èœããæ¬¡ã®ããã«UEFIã¢ããªã±ãŒã·ã§ã³ããã¹ã¯ãªãŒã³ã·ã§ãããååŸã§ããŸãã
倿Žããããã¡ãŒã ãŠã§ã¢ã§çµæããã¹ããã
æ®å¿µãªãããBIOSã»ããã¢ããã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãã®æ¹æ³ã§ã¯åé€ã§ããŸãã-ãã©ã€ããŒã®èªã¿èŸŒã¿ãé
ãããŸãã 2ã€ã®è§£æ±ºçããããŸãã1ã€ç®ã¯ã
UEFIToolã䜿çšããŠãã¡ãŒã ãŠã§ã¢ã®DXEããªã¥ãŒã ã®äŸåé¢ä¿ã»ã¯ã·ã§ã³ãšå
±ã«ãã©ã€ããŒã远å ããããšã§ãã2ã€ç®ã¯ãPCIeããã€ã¹ã®OptionROMã«è¿œå ããããšã§ãããã®åŸããã¡ãŒã ãŠã§ã¢ã®å€æŽã¯äžèŠã§ãã
åŸã§å¿
èŠãªéçãå
¥æãããã2çªç®ã®æ¹æ³ãå®è£
ããããšããŸãããæåã®æ¹æ³ã«ã¯åé¡ã¯ãããŸãããUSBãã©ãã·ã¥ãã©ã€ããæ¿å
¥ã瞫補ãéå§ãã¹ãã£ãã¯ããBIOSã»ããã¢ããã«ç§»åããLCtrl + LAlt + F12ãæŒããŸã- åºæ¥äžãããéãšç·ã®æ£æ¹åœ¢ã衚瀺ããããã¹ãŠãæ©èœããŸããçµæã¯æ¬¡ã®ããã«ãªããŸãããã¹ã¯ãŒãå
¥åãã©ãŒã ããã¯æåã§ãã玳士ããããã«
ãã©ã€ããŒãäœæãããã³ãŒããGitHubã«æçš¿ãããOptionROMã§ã¢ã€ãã¢ã確èªããããã«æ®ãããããã¯ã¯éããããŠãããšèšããŸããããã§äœãèµ·ãã£ãŠããã®ããŸã çè§£ã§ããªãå Žåã¯ãã³ãŒãã«ãã°ãèŠã€ããŸãããããŸãã¯èšäºãèè
ãUEFIã®æ¥µæªãããŸãã¯ã¬ã¬ã·ãŒBIOSã§ã©ãã ãè¯ãã£ãã®ããè°è«ãããã ãã§ããã³ã¡ã³ããæè¿ããŸããèªè
ã®çããã®æ³šæãè¯ãDXEãã©ã€ããŒã«æè¬ããŸãã