]> git.proxmox.com Git - mirror_edk2.git/blob - QuarkPlatformPkg/Readme.md
MdePkg BaseMemoryLibOptDxe: Convert Ia32/SetMem.asm to NASM
[mirror_edk2.git] / QuarkPlatformPkg / Readme.md
1 # **EDK II firmware for Intel(R) Quark SoC X1000 based platforms**
2
3 ## **Features**
4 * UEFI firmware image with ability to enable/disable major features such as
5 - Logging
6 - Source level debug using [Intel(R) UEFI Development Kit Debugger Tool](
7 https://firmware.intel.com/develop/intel-uefi-tools-and-utilities/intel-uefi-development-kit-debugger-tool)
8 - Boot Performance Measurements
9 - UEFI Secure Boot with Physical Presence
10 - TCG Measured Boot using TPM 1.2 hardware devices on I2C bus
11 * Minimal firmware image for initial power-on and debug
12 * UEFI Shell built into FLASH image
13 * UEFI Linux operating system boot support from Micro SD FLASH
14 * Hardware Support
15 - [Intel(R) Quark SoC X1000 CPU](
16 http://www.intel.com/content/www/us/en/embedded/products/quark/quark-x1000-datasheet.html)
17 - [Intel(R) Galileo Development Board](
18 http://www.intel.com/content/www/us/en/embedded/products/galileo/galileo-g1-datasheet.html)
19 - [Intel(R) Galileo Gen 2 Development Board](
20 http://www.intel.com/content/www/us/en/embedded/products/galileo/galileo-overview.html)
21 - HPET Timer
22 - Real Time Clock
23 * Major I/O Subsystems
24 - PCI including support for Mini PCI Express Cards
25 - USB using EHCI and OHCI host controllers
26 - Micro SD FLASH with FAT file system support
27 - Serial UART up to 921600 baud for console, logging, and debug
28 * ACPI Tables with ACPI S3 sleep state support
29 * SMBIOS Tables
30
31 ## **Windows Build Instructions**
32
33 ### Pre-requisites
34
35 * GIT client: Available from https://git-scm.com/downloads
36 * Microsoft Visual Studio.
37 - Visual Studio 2015 recommended and is used in the examples below.
38 * Microsoft Windows Driver Development Kit 3790.1830
39 - http://download.microsoft.com/download/9/0/f/90f019ac-8243-48d3-91cf-81fc4093ecfd/1830_usa_ddk.iso
40 - Mount ISO image
41 - Right click on ```x86\kitsetup.exe``` & choose **Run as administrator**
42 - Install to C:\WINDDK\3790.1830
43 - Uncheck all Component Groups
44 - Expand Build Environment Component
45 - Check Windows Driver Development Kit 16-bit Additional Build Tools
46 - Install
47 * ASL compiler: Available from http://www.acpica.org
48 - Install into ```C:\ASL``` to match default tools_def.txt configuration.
49
50 Create a new directory for an EDK II WORKSPACE.
51
52 The code block below shows the GIT clone operations required to pull the EDK II
53 source tree, the FatPkg sources, the pre-built versions of BaseTools as WIN32
54 binaries, and the edk2-non-osi repository that provides a binary file for the
55 Quark Remote Management Unit (RMU).
56
57 Next it sets environment variables that must be set before running
58 ```edksetup.bat```. Since content is being pulled from multiple repositories,
59 the EDK II [Multiple Workspace](
60 https://github.com/tianocore/tianocore.github.io/wiki/Multiple_Workspace)
61 feature is used.
62
63 Next, the ```edksetup.bat``` file is run to complete the initialization of an
64 EDK II build environment. Two example build commands are shown. The first one
65 in ```QuarkPlatformPlg/Quark.dsc``` builds a full UEFI firmware image that is
66 able to boot the built-in UEFI Shell and Linux from a micro SD FLASH card. The
67 second one in ```QuarkPlatformPkg/QuarkMin.dsc``` builds a minimal firmware
68 image that is useful for initial power-on and debug of new features.
69
70 ```cmd
71 git clone https://github.com/tianocore/edk2.git
72 git clone https://github.com/tianocore/edk2-FatPkg.git FatPkg
73 git clone https://github.com/tianocore/edk2-BaseTools-win32.git
74 git clone https://github.com/tianocore/edk2-non-osi.git
75
76 set WORKSPACE=%CD%
77 set PACKAGES_PATH=%WORKSPACE%\edk2;%WORKSPACE%\edk2-non-osi
78 set EDK_TOOLS_BIN=%WORKSPACE%\edk2-BaseTools-win32
79
80 cd edk2
81 edksetup.bat
82
83 build -a IA32 -t VS2015x86 -p QuarkPlatformPkg/Quark.dsc
84 build -a IA32 -t VS2015x86 -p QuarkPlatformPkg/QuarkMin.dsc
85 ```
86
87 ## **Linux Build Instructions**
88
89 ### Pre-requisites
90
91 * GIT client
92 * GCC 4.9 compiler
93 * ASL compiler: Available from http://www.acpica.org.
94
95 Create a new directory for an EDK II WORKSPACE.
96
97 The code block below shows the GIT clone operations required to pull the EDK II
98 source tree, the FatPkg sources, and the edk2-non-osi repository that provides a
99 binary file for the Quark Remote Management Unit (RMU).
100
101 Next it sets environment variables that must be set before running
102 ```edksetup.bat```. Since content is being pulled from multiple repositories,
103 the EDK II [Multiple Workspace](
104 https://github.com/tianocore/tianocore.github.io/wiki/Multiple_Workspace)
105 feature is used.
106
107 Next, the EDK II BaseTools required to build firmware images are built.
108
109 Next, the ```edksetup.bat``` file is run to complete the initialization of an
110 EDK II build environment. Two example build commands are shown. The first one
111 in ```QuarkPlatformPlg/Quark.dsc``` builds a full UEFI firmware image that is
112 able to boot the built-in UEFI Shell and Linux from a micro SD FLASH card. The
113 second one in ```QuarkPlatformPkg/QuarkMin.dsc``` builds a minimal firmware
114 image that is useful for initial power-on and debug of new features.
115
116 ```sh
117 git clone https://github.com/tianocore/edk2.git
118 git clone https://github.com/tianocore/edk2-FatPkg.git FatPkg
119 git clone https://github.com/tianocore/edk2-non-osi.git
120
121 export WORKSPACE=$PWD
122 export PACKAGES_PATH=$WORKSPACE/edk2:$WORKSPACE/edk2-non-osi
123 export EDK_TOOLS_PATH=$WORKSPACE/edk2/BaseTools
124
125 make -C edk2/BaseTools
126
127 cd $WORKSPACE/edk2
128
129 . edksetup.sh BaseTools
130
131 build -a IA32 -t GCC49 -p QuarkPlatformPkg/Quark.dsc
132 build -a IA32 -t GCC49 -p QuarkPlatformPkg/QuarkMin.dsc
133 ```
134
135 ## **Build Features**
136
137 The table below contains a summary of the build flags to enable or disable
138 features on the build command line using ```-D``` flags.
139
140 | **Define Name** | **Default Value** | **Supported Values** |
141 | -------------------------- | ----------------- | -------------------- |
142 | ```GALILEO``` | GEN2 | GEN1, GEN2 |
143 | ```LOGGING``` | TRUE | TRUE, FALSE |
144 | ```SOURCE_DEBUG_ENABLE``` | FALSE | TRUE, FALSE |
145 | ```PERFORMANCE_ENABLE``` | FALSE | TRUE, FALSE |
146 | ```SECURE_BOOT_ENABLE``` | FALSE | TRUE, FALSE |
147 | ```MEASURED_BOOT_ENABLE``` | FALSE | TRUE, FALSE |
148 | ```TPM_12_HARDWARE``` | NONE | NONE, LPC, ATMEL_I2C, INFINEON_I2C |
149
150 * ```GALILEO``` - Used to specify the type of Intel(R) Galileo board type. The
151 default is ```GEN2``` for the [Intel(R) Galileo Gen 2 Development Board](
152 http://www.intel.com/content/www/us/en/embedded/products/galileo/galileo-overview.html).
153 The other supported value is ```GEN1``` for the [Intel(R) Galileo Development Board](
154 http://www.intel.com/content/www/us/en/embedded/products/galileo/galileo-g1-datasheet.html).
155 Add ```-D GALILEO=GEN1``` to the build command for [Intel(R) Galileo Development Board](
156 http://www.intel.com/content/www/us/en/embedded/products/galileo/galileo-g1-datasheet.html).
157
158 * ```LOGGING``` - Used to enable/disable logging messages from DEBUG() macros to
159 a serial UART. The default is TRUE for enabled when the BUILDTARGET is DEBUG
160 (```-b DEBUG```). The default is FALSE for disabled when the BUILDTARGET is
161 not DEBUG (e.g. ```-b RELEASE```). Add ```-D LOGGING``` to the build command
162 to force logging enabled. Add ```-D LOGGING=FALSE``` to force logging
163 disabled.
164
165 * ```SOURCE_DEBUG_ENABLE``` - Used to enable/disable source level debug using the
166 [Intel(R) UEFI Development Kit Debugger Tool](
167 https://firmware.intel.com/develop/intel-uefi-tools-and-utilities/intel-uefi-development-kit-debugger-tool).
168 The default is FALSE for disabled. Add ```-D SOURCE_DEBUG_ENABLE``` to the
169 build command line to enable source level debug.
170
171 * ```PERFORMANCE_ENABLE``` - Used to enable/disable boot performance measurement.
172 The default is FALSE for disabled. Add ```-D PERFORMANCE_ENABLE``` to the
173 build command line to enable boot performance measurement. When this feature
174 is enabled, both ```LOGGING``` and ```SOURCE_DEBUG_ENABLE``` are automatically
175 disabled so there is not boot time overhead from the serial UART for logging
176 messages or the debug agent.
177
178 * ```SECURE_BOOT_ENABLE``` - Used to enable/disable UEFI Secure Boot features.
179 The default is FALSE for disabled. Add ```-D SECURE_BOOT_ENABLE``` to the
180 build command line to enable UEFI Secure Boot features.
181
182 * ```MEASURED_BOOT_ENABLE``` - Used to enable/disable measurement of firmware
183 code and data into a TPM 1.2 hardware device. The default is FALSE for
184 disabled. Add ```-D MEASURED_BOOT_ENABLE``` to the build command line to
185 enable UEFI Secure Boot features.
186
187 * ```TPM_12_HARDWARE``` - Used to specify the type of TPM 1.2 hardware device
188 that is connected to the Galileo board. This define is valid if the measure
189 boot feature is enabled using ```-D MEASURED_BOOT_ENABLE```. The default is
190 NONE for no TPM 1.2 hardware device connected. Add ```-D TPM_12_HARDWARE=LPC```
191 for a TPM hardware device attached to an LPC bus (not supported on on Intel(R)
192 Quark SoC X1000). Add ```-D TPM_12_HARDWARE=ATMEL_I2C``` for an
193 [Atmel AT97SC3204T](http://www.atmel.com/devices/AT97SC3204T.aspx) or
194 [Atmel AT97SC3205T](http://www.atmel.com/images/atmel-8883s-tpm-at97sc3205t-datasheet-summary.pdf)
195 attached to the I2C bus of the Galileo Arduino header. Add
196 ```-D TPM_12_HARDWARE=INFINION_I2C``` for an [Infineon SLB9645](
197 http://www.infineon.com/dgdl/Infineon-TPM+SLB+9645-DS-v01_00-EN.pdf?fileId=5546d4625185e0e201518b83d0c63d7c)
198 attached to the I2C bus of the Galileo Arduino header. The ATMEL_I2C setting
199 has been tested with the [CryptoShield](https://www.sparkfun.com/products/13183)
200 available from [SparkFun](https://www.sparkfun.com/).
201
202
203 ### **Example Build Commands**
204
205 Default build with logging enabled:
206
207 ```build -a IA32 -t VS2015x86 -p QuarkPlatformPkg/Quark.dsc```
208
209 Release build with logging disabled:
210
211 ```build -a IA32 -t VS2015x86 -p QuarkPlatformPkg/Quark.dsc -b RELEASE```
212
213 Enable source level debugging:
214
215 ```build -a IA32 -t VS2015x86 -p QuarkPlatformPkg/Quark.dsc -D SOURCE_DEBUG_ENABLE```
216
217 Enable boot performance metrics:
218
219 ```build -a IA32 -t VS2015x86 -p QuarkPlatformPkg/Quark.dsc -D PERFORMANCE_ENABLE```
220
221 Enable UEFI Secure Boot features:
222
223 ```build -a IA32 -t VS2015x86 -p QuarkPlatformPkg/Quark.dsc -D UEFI_SECURE_BOOT```
224
225 Enable UEFI Secure Boot and Measured Boot using Atmel I2C TPM hardware device:
226
227 ```build -a IA32 -t VS2015x86 -p QuarkPlatformPkg/Quark.dsc -D UEFI_SECURE_BOOT
228 -D MEASURED_BOOT_ENABLE -D TPM_12_HARDWARE=ATMEL_I2C```
229
230 ## **FLASH Update using DediProg SF100**
231
232 Once the sources have been downloaded, an EDK II build environment established,
233 and an EDK II firmware image has been built, the EDK II firmware image needs to
234 installed into the FLASH device on the target Galileo development board. One
235 way to do this is with the [Dediprog SF100 IC Programmer](
236 http://www.dediprog.com/pd/spi-flash-solution/SF100).
237
238 * Install the DediProg SF100 software.
239
240 * Connect the DediProg SF100 to the Galileo development board.
241
242 ![](https://github.com/tianocore/tianocore.github.io/wiki/Projects/QuarkPlatformPkg/Images/Dediprog.jpg)
243
244 * Make sure ```dpcmd.exe``` is in ```PATH```
245
246 ```PATH=%PATH%;"c:\Program Files (x86)\DediProg\SF100"```
247
248 * **NOTE**: It is recommended that the FLASH image that was shipped with the
249 Galileo development board be read and saved before updating FLASH image. The
250 command shown below read the FLASH image and saves it to the file
251 called ```GalileoOriginalFirmware.bin```.
252
253 ```dpcmd.exe -r GalileoOriginalFirmware.bin```
254
255 * Update FLASH image using either the DediProg SF100 GUI or ```dpcmd.exe```.
256 - Example update of Galileo firmware image when BUILDTARGET is DEBUG (default)
257
258 ```dpcmd.exe -u%WORKSPACE%\Build\Quark\DEBUG_VS2015x86\FV\QUARK.fd ```
259
260 - Example update of Galileo firmware image when BUILDTARGET is RELEASE
261 (```-b RELEASE```)
262
263 ```dpcmd.exe -u%WORKSPACE%\Build\Quark\RELEASE_VS2015x86\FV\QUARK.fd ```
264
265 ## **Setting up a Serial Console and Booting to UEFI Shell**
266
267 After the FLASH is updated on Galileo, a serial cable is connected between the
268 host system and the Galileo target. A serial terminal emulator (such as
269 [Tera Term](https://en.osdn.jp/projects/ttssh2/releases/)) can be used to see
270 the logging messages from DEBUG() macros and the serial console for the UEFI
271 Boot Manager, UEFI Shell, and operating system.
272
273 The default serial communication parameters for the Intel(R) Galileo Gen 2
274 Development Board is 921600,n,8,1 with no hardware flow control.
275
276 ![](https://github.com/tianocore/tianocore.github.io/wiki/Projects/QuarkPlatformPkg/Images/TeraTermSerialParameters.png)
277
278 The default serial communication parameters for the Intel(R) Galileo Development
279 Board is 461800,n,8,1 with no hardware flow control.
280
281 The following changes to the [Tera Term](https://en.osdn.jp/projects/ttssh2/releases/)
282 configuration files are recommended for UEFI serial console compatibility.
283 Some of the later use cases involve using the TCPIP mode, so some of these
284 recommendation apply to the TCPIP use cases.
285
286 * TERATERM.INI - Set terminal size to 80 x 25 and terminal settings to UTF8.
287
288 ![](https://github.com/tianocore/tianocore.github.io/wiki/Projects/QuarkPlatformPkg/Images/TeraTermTerminal.png)
289
290 * TERATERM.INI - Set font type to Terminal to support box drawing glyphs.
291
292 ![](https://github.com/tianocore/tianocore.github.io/wiki/Projects/QuarkPlatformPkg/Images/TeraTermFont.png)
293
294 * TERATERM.INI - Disable line mode to make TCPIP mode work like COM port mode.
295
296 ```ini
297 ; Line at a time mode
298 EnableLineMode=off
299 ```
300
301 * KEYBOARD.CNF - Disable VT function keys for F5..F10
302
303 ```ini
304 [VT function keys]
305 ;F6 key
306 ;F6=64
307 ;F7 key
308 ;F7=65
309 ;F8 key
310 ;F8=66
311 ;F9 key
312 ;F9=67
313 ;F10 key
314 ;F10=68
315 ```
316
317 * KEYBOARD.CNF - Disable X function keys for F1..F4
318
319 ```ini
320 [X function keys]
321 ; F1 key
322 XF1=off
323 ; F2 key
324 ;XF2=60
325 XF2=off
326 ; F3 key
327 ;XF3=61
328 XF3=off
329 ; F4 key
330 ;XF4=62
331 XF4=off
332 ; F5 key
333 ;XF5=63
334 ```
335
336 * KEYBOARD.CNF - Add UEFI serial console sequences for F1..F10
337
338 ```ini
339 [User keys]
340 User1=59,0,$1B[M
341 User2=60,0,$1B[N
342 User3=61,0,$1B[O
343 User4=62,0,$1B[P
344 User5=63,0,$1B[Q
345 User6=64,0,$1B[R
346 User7=65,0,$1B[S
347 User8=66,0,$1B[T
348 User9=67,0,$1B[U
349 User10=68,0,$1B[V
350 ```
351
352 Connect power adapter to Galileo development board, and the logging messages
353 should be seen, followed by 5 second countdown, followed by an automatic boot to
354 the built-in UEFI Shell.
355
356 ![](https://github.com/tianocore/tianocore.github.io/wiki/Projects/QuarkPlatformPkg/Images/UefiShell.png)
357
358 ## **Source Level Debug Using Intel(R) UEFI Development Kit Debugger Tool**
359
360 ### Pre-requisites
361
362 * Intel(R) UEFI Development Kit Debugger Tool User Manual for Ver 1.5 or higher:
363 Available from https://firmware.intel.com/develop/intel-uefi-tools-and-utilities/intel-uefi-development-kit-debugger-tool
364 * Intel(R) UEFI Development Kit Debugger Tool Ver 1.5 or higher: Available from
365 https://firmware.intel.com/develop/intel-uefi-tools-and-utilities/intel-uefi-development-kit-debugger-tool
366 * [Tera Term](https://en.osdn.jp/projects/ttssh2/releases/) or other serial
367 terminal emulator with TCPIP support
368
369 Follow instructions in Intel(R) UEFI Development Kit Debugger Tool User manual
370 to setup host system.
371
372 Build a firmware image with SOURCE_DEBUG_ENABLE enabled
373 (```-D SOURCE_DEBUG_ENABLE```). This will select the appropriate libraries,
374 debug agent, and PCDs for Galileo. Galileo does not support a USB 2.0 debug
375 port, so only the UART based communications library is used.
376
377 Use Dediprog SF100 to update the Galileo development board FLASH image.
378
379 Update the ```[Debug Port]``` section of the SoftDebugger.ini file with the host
380 side UART configuration settings. The following example uses COM5, which must
381 be updated with the COM port the Galileo target is attached. The following
382 example also shows a baud rate of 921600 which is correct for a Galileo Gen 2.
383 If a Galileo Gen 1 is being used, set the baud rate to 460800. By default, the
384 Galileo console is redirected to TCPIP port 20715.
385
386 ```ini
387 [Debug Port]
388 Channel = Serial
389 Port = COM5
390 FlowControl = 0
391 BaudRate = 921600
392 Server =
393 ```
394
395 Connect power adapter to Galileo development board and run a command script with
396 the contents below to start a Tera Term session on TCPIP port 20715 and start
397 the Intel(R) UEFI Development Kit Debugger Tool using UART connection between
398 the host and target and WinDbg. The REBOOT button on the Galileo development
399 board may need to be pressed for the debugger to perform the initial connect.
400
401 ```cmd
402 start "Console" /B "c:\Program Files (x86)\teraterm\ttermpro.exe" localhost:20715 /nossh
403 start "Debugger" /B "C:\Program Files (x86)\Intel\Intel(R) UEFI Development Kit Debugger Tool\eXdi.exe" /LaunchWinDbg
404 ```
405
406 The figure below should be seen when a connection is made. The SoftDebugger
407 Debug Console window shows the status of the connection between the host and the
408 target. The Tera Term window shows the console output from the SEC phase until
409 the debug agent is initialized. The WinDbg window shows that the debugger is
410 connected and the WinDbg application can be used for run control, breakpoint
411 management, and viewing call stacks, local variables, global variables, etc.
412
413 ![](https://github.com/tianocore/tianocore.github.io/wiki/Projects/QuarkPlatformPkg/Images/UdkDebugger.png)
414
415 ## **Debug Using Intel(R) System Debugger using OpenOCD**
416
417 Setup hardware and software components following the instructions in the article at:
418 https://software.intel.com/en-us/articles/using-intel-system-debugger-with-openocd
419
420 Connect power adapter to Galileo development board.
421
422 The following batch file starts Tera Term serial console on COM5 at 921600 baud,
423 starts OpenOCD using a Flyswatter2, and starts Intel(R) System Studio Debugger.
424 Select the **Connect** button to complete the host to target connection.
425
426 ```cmd
427 set OPENOCD="C:\Program Files (x86)\IntelSWTools\system_studio_for_windows_2016.0.023\debugger\openocd"
428 start "Console" /B "c:\Program Files (x86)\teraterm\ttermpro.exe" /C=5 /BAUD=921600
429 start "OpenOcd" /B %OPENOCD%\bin\openocd.exe -f ..\scripts\interface\ftdi\flyswatter2.cfg -f ..\scripts\board\quark_x10xx_board.cfg
430 call "C:\Program Files (x86)\IntelSWTools\System Debugger 2016\system_debugger\start_xdb_gdb_remote.bat"
431 ```
432
433 When **Reset Target** is selected, the Galileo development board does not always
434 halt at the first instruction at the reset vector. If debug is required from
435 the first instruction of the reset vector, then update the file
436 ```UefiCpuPkg/SecCore/Ia32/ResetVector.asm``` and change the two NOP
437 instructions at the label ```ResetHandler:``` to ```JMP $```. This puts the CPU
438 into a wait loop until the debugger is connected and the debugger is used to set
439 instruction pointer to the next instruction.
440
441 ```
442 ;
443 ; For IA32, the reset vector must be at 0xFFFFFFF0, i.e., 4G-16 byte
444 ; Execution starts here upon power-on/platform-reset.
445 ;
446 ResetHandler:
447 ; nop
448 ; nop
449 jmp $
450 ApStartup:
451 ;
452 ; Jmp Rel16 instruction
453 ; Use machine code directly in case of the assembler optimization
454 ; SEC entry point relative address will be fixed up by some build tool.
455 ;
456 ; Typically, SEC entry point is the function _ModuleEntryPoint() defined in
457 ; SecEntry.asm
458 ;
459 DB 0e9h
460 DW -3
461 ```
462
463 ## **Install, Configure, and Boot Linux**
464
465 * Download SD Card Linux Image: Available at
466 http://www.intel.com/content/www/us/en/support/boards-and-kits/intel-galileo-boards/000005614.html
467 * Extract the SD Card Linux Image to a FAT formatted Micro SD FLASH device
468 * Install Micro SD FLASH device into Galileo development board
469
470 Connect power adapter to Galileo development board and boot to the UEFI Shell.
471
472 From the UEFI Shell execute the following commands to copy the GRUB EFI boot
473 loader to ```\efi\boot\bootia32.efi```. This allows the UEFI Boot Manager, on
474 all future boots, to auto detect that the Micro SD FLASH device is bootable.
475
476 ```
477 Shell> connect -r
478 Shell> map -r
479 Shell> fs0:
480 FS0:> mkdir efi
481 FS0:> mkdir efi\boot
482 FS0:> cp grub.efi efi\boot\bootia32.efi
483 ```
484
485 The GRUB boot loader is set to a UART baud rate of 115200. A couple changes are
486 required to change the baud rate to 460800 for Galileo Gen 1 or 921600 for
487 Galileo Gen 2. From the UEFI Shell, execute the following commands to make a
488 backup copy and edit the GRUB configuration file.
489
490 ```
491 FS0:> cp boot\grub\grub.conf boot\grub\grub.conf.org
492 FS0:> edit boot\grub\grub.conf
493 ```
494
495 * Delete the lines associated with the boot option with the following title.
496
497 ```
498 title Clanton SVP kernel-SPI initrd-SPI IMR-On IO-APIC/HPET NoEMU
499 ```
500
501 * Replace the two instances of 115200 in the following line to 460800 for
502 Galileo Gen 1 or 921600 for Galileo Gen 2.
503
504 ```
505 kernel /bzImage root=/dev/ram0 console=ttyS1,115200n8 earlycon=uart8250,mmio32,$EARLY_CON_ADDR_REPLACE,115200n8 reboot=efi,warm apic=debug rw LABEL=boot debugshell=5 rootimage=image-full-galileo-clanton.ext3
506 ```
507 * Press F3 to save the file
508 * Run the ```exit``` command to exit from the UEFI Shell and return to the
509 UEFI Boot Manager
510 * Select **Boot Manager**
511 * Select **UEFI Misc Device** for the Micro SD FLASH device.
512 * GRUB should run and Linux should boot with serial log messages.
513 * When the serial log messages stop, change the Tera Term baud rate to 115200
514 * Login as ```root```. No password is required.
515 * Use ```vi``` to edit ```/etc/inittab```
516 * Change the baud rate of ttyS1 from 115200 to 460800 for Galileo Gen 1 or
517 921600 for Galileo Gen 2. The line that need to be updated is shown below
518
519 ```
520 S:2345:respawn:/sbin/getty 115200 ttyS1
521 ```
522
523 * Save the updated ```/etc/inittab```
524 * Run ```reboot -f``` to shutdown Linux and reboot the platform.
525 * Set the Tera Term baud rate back to 460800 for Galileo Gen 1 or 921600 for
526 Galileo Gen 2.
527
528 After these changes both the EDK II firmware and the Linux operating system use
529 the same baud rate.
530
531 ### **Testing ACPI S3 Sleep**
532
533 The ACPI S3 Sleep and Resume feature can be tested on a Galileo development
534 board using the Real Time Clock (RTC) for a wake event. The shell script shown
535 below arms the RTC wake alarm 10 seconds in the future and puts the system to
536 sleep. A shorter time in seconds can be passed in as the first argument to the
537 script, but do not use times shorter than 2 or 3 seconds.
538
539 **NOTE**: The stmmac module is unloaded because the module is not compatible
540 with S3 resume.
541
542 ```sh
543 #
544 # Unload NIC driver that causes S3 to fail
545 #
546 rmmod stmmac
547
548 #
549 # Disable RTC wake alarm
550 #
551 echo 0 > /sys/class/rtc/rtc0/wakealarm
552
553 #
554 # Compute wake time that is $1 seconds in the future
555 #
556 let WakeTime=`date '+%s'`
557 echo $WakeTime
558 if ["$1" = ""]; then
559 let WakeTime=$WakeTime+10
560 else
561 let WakeTime=$WakeTime+$1
562 fi
563 echo $WakeTime
564
565 #
566 # Enable RTC wake alarm $1 seconds in the future
567 #
568 echo $WakeTime > /sys/class/rtc/rtc0/wakealarm
569
570 #
571 # Put systems into ACPI S3 sleep state
572 #
573 echo mem > /sys/power/state
574 ```
575
576 ## **UEFI Secure Boot Feature and Physical Presence**
577
578 Build a firmware image with SECURE_BOOT_ENABLE enabled
579 (```-D SECURE_BOOT_ENABLE```). This builds in support for UEFI authenticated
580 variables, UEFI image verification, and UEFI Secure Boot configuration screens
581 in the Device Manager. In order to change the UEFI Secure Boot configuration,
582 the user must assert physical presence. The Galileo development board only has
583 two push buttons (REBOOT and RESET). The REBOOT button unconditionally reboots
584 the platform. The RESET button asserts the reset signal on the Arduino header
585 and is also connected to a GPIO pin, so the state of the RESET button can be
586 read. The user asserts physical presence by holding the RESET button while the
587 Galileo development board boots, or by holding the RESET button while selecting
588 the **Secure Boot Configuration** option in the Device Manager.
589
590 Use Dediprog SF100 to update the Galileo development board FLASH image.
591
592 Connect power adapter to Galileo development board and boot to the UEFI Boot
593 Manager by pressing F2 or running the ```exit``` command from the UEFI Shell.
594 Select **Device Manager** and then**Secure Boot Configuration**. Change
595 **Customize Secure Boot** to **Customized** and then select **Custom Secure Boot
596 Options**. If **Custom Secure Boot Options** can not be selected, then physical
597 presence was not asserted using one of two methods listed above. Assert
598 physical presence and try again.
599
600 The **Custom Secure Boot Options** screen allows the Galileo development board
601 to be enrolled into UEFI Secure Boot. See [How to Sign UEFI Drivers & Application V1.31](
602 http://sourceforge.net/projects/edk2/files/General%20Documentation/SigningUefiImages%20-v1dot31.pdf/download)
603 in the [SecurityPkg Wiki](https://github.com/tianocore/tianocore.github.io/wiki/SecurityPkg)
604 for details on how to complete the UEFI Secure Boot enrollment.
605
606 ## **Enable Measured Boot Feature using Atmel I2C TPM on CryptoShield**
607
608 Build a firmware image with MEASURED_BOOT_ENABLE enabled
609 (```-D MEASURED_BOOT_ENABLE```) and TPM_12_HARDWARE set to ATMEL_I2C
610 (```-D TMP_12_HARDWARE=ATMEL_I2C```). This builds in the TCG PEIM and DXE
611 modules and uses the library for the Atmel I2C TPM hardware device.
612
613 Use Dediprog SF100 to update the Galileo development board FLASH image.
614
615 Attach the CryptoShield to the Arduino header of the Galileo development board
616 as shown below.
617
618 ![](https://github.com/tianocore/tianocore.github.io/wiki/Projects/QuarkPlatformPkg/Images/GalileoCryptoShield.jpg)
619
620 Connect power adapter to Galileo development board and boot to the UEFI Shell.
621 In the boot logging messages, messages similar to the following should be seen
622 as the Atmel I2C TPM hardware device is detected and used to measure the
623 contents of firmware volumes and firmware tables.
624
625 ```
626 Loading PEIM at 0x0000FC75188 EntryPoint=0x0000FC75260 TrEEConfigPei.efi
627 PROGRESS CODE: V03020002 I0
628 TrEEConfiguration.TpmDevice from Setup: 1
629 DetectTpmDevice:
630 TpmDevice final: 1
631 TpmDevice PCD: 8B01E5B6-4F19-46E8-AB93-1C53671B90CC
632 . . .
633 Loading PEIM at 0x0000FC70190 EntryPoint=0x0000FC70260 TcgPei.efi
634 PROGRESS CODE: V03020002 I0
635 Install PPI: E9DB0D58-D48D-47F6-9C6E-6F40E86C7B41
636 Install PPI: A030D115-54DD-447B-9064-F206883D7CCC
637 PROGRESS CODE: V03020003 I0
638 The FV which is measured by TcgPei starts at: 0xFFF10000
639 The FV which is measured by TcgPei has the size: 0xF0000
640 The FV which is measured by TcgPei starts at: 0xFFD00000
641 The FV which is measured by TcgPei has the size: 0x1E0000
642 . . .
643 Loading driver at 0x0000F620000 EntryPoint=0x0000F620260 TcgDxe.efi
644 . . .
645 TPM TcgDxe Measure Data when ReadyToBoot
646 ```
647 See the [SecurityPkg Wiki](https://github.com/tianocore/tianocore.github.io/wiki/SecurityPkg)
648 for additional details on EDK II TPM support
649
650 ## **Measuring Boot Performance**
651
652 Build a firmware image with PERFORMANCE_ENABLE enabled
653 (```-D PERFORMANCE_ENABLE```). This builds in the UEFI Shell and the DP.EFI
654 (Dump Performance) into a firmware volume and also includes a simple file system
655 driver for firmware volumes so the DP.EFI command can be run out of the FLASH.
656
657 Use Dediprog SF100 to update the Galileo development board FLASH image.
658
659 Connect power adapter to Galileo development board and let it boot to the UEFI
660 Shell. Then use the REBOOT button or the ```reset``` UEFI Shell command to
661 reboot the Galileo development board. The first boot after a FLASH update does
662 extra work that is only performed one time. In order to get correct performance
663 measurements, use the 2nd or later boots. After the 2nd boot, run the
664 ```dp -s``` command. The output should look similar to the figure below.
665
666 ![](https://github.com/tianocore/tianocore.github.io/wiki/Projects/QuarkPlatformPkg/Images/DpCommand.png)