aboutsummaryrefslogtreecommitdiffstats
path: root/Lesson_5
diff options
context:
space:
mode:
authorKonstantin Aladyshev <aladyshev22@gmail.com>2021-06-14 18:22:20 +0300
committerKonstantin Aladyshev <aladyshev22@gmail.com>2021-06-14 18:22:20 +0300
commitbb0e4662b485cf5a973c7f09de1425ac4897c2db (patch)
treedd62bd36ad9cf4707748e8d02c489a322dbb1015 /Lesson_5
parentfd5f0dbdb9c835b05db55fff6f5f794fa9ed083e (diff)
downloadUEFI-Lessons-bb0e4662b485cf5a973c7f09de1425ac4897c2db.tar.gz
UEFI-Lessons-bb0e4662b485cf5a973c7f09de1425ac4897c2db.tar.bz2
UEFI-Lessons-bb0e4662b485cf5a973c7f09de1425ac4897c2db.zip
Add lesson 5
Diffstat (limited to 'Lesson_5')
-rw-r--r--Lesson_5/Conf/target.txt7
-rw-r--r--Lesson_5/README.md53
-rw-r--r--Lesson_5/UefiLessonsPkg/HelloWorld/HelloWorld.c15
-rw-r--r--Lesson_5/UefiLessonsPkg/HelloWorld/HelloWorld.inf18
-rw-r--r--Lesson_5/UefiLessonsPkg/SimplestApp/SimplestApp.c10
-rw-r--r--Lesson_5/UefiLessonsPkg/SimplestApp/SimplestApp.inf16
-rw-r--r--Lesson_5/UefiLessonsPkg/UefiLessonsPkg.dsc30
7 files changed, 149 insertions, 0 deletions
diff --git a/Lesson_5/Conf/target.txt b/Lesson_5/Conf/target.txt
new file mode 100644
index 0000000..c109dcf
--- /dev/null
+++ b/Lesson_5/Conf/target.txt
@@ -0,0 +1,7 @@
+ACTIVE_PLATFORM = UefiLessonsPkg/UefiLessonsPkg.dsc
+TARGET = RELEASE
+TARGET_ARCH = X64
+TOOL_CHAIN_CONF = Conf/tools_def.txt
+TOOL_CHAIN_TAG = GCC5
+BUILD_RULE_CONF = Conf/build_rule.txt
+
diff --git a/Lesson_5/README.md b/Lesson_5/README.md
new file mode 100644
index 0000000..23130f4
--- /dev/null
+++ b/Lesson_5/README.md
@@ -0,0 +1,53 @@
+To build modules in our package we've used something like this:
+```
+$ build --platform=UefiLessonsPkg/UefiLessonsPkg.dsc \
+ --module=UefiLessonsPkg/HelloWorld/HelloWorld.inf \
+ --arch=X64 \
+ --buildtarget=RELEASE \
+ --tagname=GCC5
+```
+
+This is kinda long string. Let's simplify it.
+
+First we can omit `module` option from the command and always compile our package entirely with all its modules:
+
+```
+$ build --platform=UefiLessonsPkg/UefiLessonsPkg.dsc \
+ --arch=X64 \
+ --buildtarget=RELEASE \
+ --tagname=GCC5
+```
+
+When we initiate our environment with:
+```
+. edk2setup.sh
+```
+`Conf` directory is created in the edk2 folder. This directory is populated with a bunch of files.
+Also the `CONF_PATH` environment variable is created which points to the newly created `Conf` folder.
+
+Right now we are interested in the `Conf/target.txt` file.
+By default it has many comments (lines that start with `#` symbol) and is prepopulated with these values:
+```
+ACTIVE_PLATFORM = EmulatorPkg/EmulatorPkg.dsc
+TARGET = DEBUG
+TARGET_ARCH = IA32
+TOOL_CHAIN_CONF = Conf/tools_def.txt
+TOOL_CHAIN_TAG = VS2015x86
+BUILD_RULE_CONF = Conf/build_rule.txt
+```
+
+We can put all our build command options in this file to simplify our everyday life.
+```
+ACTIVE_PLATFORM = UefiLessonsPkg/UefiLessonsPkg.dsc
+TARGET = RELEASE
+TARGET_ARCH = X64
+TOOL_CHAIN_CONF = Conf/tools_def.txt
+TOOL_CHAIN_TAG = GCC5
+BUILD_RULE_CONF = Conf/build_rule.txt
+```
+
+After that we could build our package with all its modules with the one single command:
+```
+build
+```
+
diff --git a/Lesson_5/UefiLessonsPkg/HelloWorld/HelloWorld.c b/Lesson_5/UefiLessonsPkg/HelloWorld/HelloWorld.c
new file mode 100644
index 0000000..1f05899
--- /dev/null
+++ b/Lesson_5/UefiLessonsPkg/HelloWorld/HelloWorld.c
@@ -0,0 +1,15 @@
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiLib.h>
+
+EFI_STATUS
+EFIAPI
+UefiMain (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Hello World!\n");
+ gST->ConOut->OutputString(gST->ConOut, L"Hello again!\n");
+ Print(L"Bye!\n");
+ return EFI_SUCCESS;
+}
diff --git a/Lesson_5/UefiLessonsPkg/HelloWorld/HelloWorld.inf b/Lesson_5/UefiLessonsPkg/HelloWorld/HelloWorld.inf
new file mode 100644
index 0000000..d65ca2e
--- /dev/null
+++ b/Lesson_5/UefiLessonsPkg/HelloWorld/HelloWorld.inf
@@ -0,0 +1,18 @@
+[Defines]
+ INF_VERSION = 1.25
+ BASE_NAME = HelloWorld
+ FILE_GUID = 2e55fa38-f148-42d3-af90-1be247323e30
+ MODULE_TYPE = UEFI_APPLICATION
+ VERSION_STRING = 1.0
+ ENTRY_POINT = UefiMain
+
+[Sources]
+ HelloWorld.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+
+[LibraryClasses]
+ UefiApplicationEntryPoint
+ UefiLib
+
diff --git a/Lesson_5/UefiLessonsPkg/SimplestApp/SimplestApp.c b/Lesson_5/UefiLessonsPkg/SimplestApp/SimplestApp.c
new file mode 100644
index 0000000..8bdf500
--- /dev/null
+++ b/Lesson_5/UefiLessonsPkg/SimplestApp/SimplestApp.c
@@ -0,0 +1,10 @@
+EFI_STATUS
+EFIAPI
+UefiMain (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ return EFI_SUCCESS;
+}
+
diff --git a/Lesson_5/UefiLessonsPkg/SimplestApp/SimplestApp.inf b/Lesson_5/UefiLessonsPkg/SimplestApp/SimplestApp.inf
new file mode 100644
index 0000000..7d4bae2
--- /dev/null
+++ b/Lesson_5/UefiLessonsPkg/SimplestApp/SimplestApp.inf
@@ -0,0 +1,16 @@
+[Defines]
+ INF_VERSION = 1.25
+ BASE_NAME = SimplestApp
+ FILE_GUID = 4a298956-fbe0-47fb-ae3a-2d5a0a959a26
+ MODULE_TYPE = UEFI_APPLICATION
+ VERSION_STRING = 1.0
+ ENTRY_POINT = UefiMain
+
+[Sources]
+ SimplestApp.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+
+[LibraryClasses]
+ UefiApplicationEntryPoint
diff --git a/Lesson_5/UefiLessonsPkg/UefiLessonsPkg.dsc b/Lesson_5/UefiLessonsPkg/UefiLessonsPkg.dsc
new file mode 100644
index 0000000..0a2edbe
--- /dev/null
+++ b/Lesson_5/UefiLessonsPkg/UefiLessonsPkg.dsc
@@ -0,0 +1,30 @@
+[Defines]
+ DSC_SPECIFICATION = 0x0001001C
+ PLATFORM_GUID = 3db7270f-ffac-4139-90a4-0ae68f3f8167
+ PLATFORM_VERSION = 0.01
+ PLATFORM_NAME = UefiLessonsPkg
+ SKUID_IDENTIFIER = DEFAULT
+ SUPPORTED_ARCHITECTURES = X64
+ BUILD_TARGETS = RELEASE
+
+
+[LibraryClasses]
+ UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
+ UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
+ DebugLib|MdePkg/Library/UefiDebugLibConOut/UefiDebugLibConOut.inf
+ BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
+ PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
+ BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
+ RegisterFilterLib|MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf
+ PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
+ DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf
+ UefiLib|MdePkg/Library/UefiLib/UefiLib.inf
+ MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
+ DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
+ UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
+
+[Components]
+ UefiLessonsPkg/SimplestApp/SimplestApp.inf
+ UefiLessonsPkg/HelloWorld/HelloWorld.inf
+
+