Re: Google Summer of Code 2021 interested student


Nate DeSimone
 

Hi Ayush,



Great to meet you and welcome to the TianoCore project! Glad you hear you are interested! Sorry it has taken me a while to get back to you. I completely agree that the codebase is rather large and navigating it can be a challenge if you don’t know where to start. Let’s take a couple of steps back and talk about the architecture of UEFI system firmware in general. At a high level, there are three pieces of code needed to create a complete UEFI firmware solution: Core, Silicon, and Platform.



[UEFI Firmware Building Blocks]



While the core code (aka EDK II) has been open source for many years, historically the platform and silicon code have not been. EDK II leaves a lot of functionality to platform code and the implementation of that is largely left as an exercise for the user. Historically only a Qemu example was given in the form of OvmfPkg. The lack of open source platform code in particular has led to large amount of inconsistency between implementations and has been a hinderance to the development of open source UEFI firmware in general.



MinPlatform intends to bring more consistency to the platform code by decomposing it into smaller more reusable pieces. Under the MinPlatform Architecture, platform code is further sub-divided into MinPlatform, Advanced Features, and Board. Under the new design, both Advanced Features and MinPlatform are reusable. Only the board code remains specific to the motherboard being used. The board code provides the glue that connects the generic advanced features with the chipset being used and any motherboard specific details required.



[cid:image002.png@01D71F40.03CF6350]



How the silicon code is provided varies depending on the silicon vendor. Typically, silicon code is a mix of open source and closed source. We have open source silicon code from several vendors in https://github.com/tianocore/edk2-platforms/tree/master/Silicon. The closed source silicon code is provided using differing mechanisms that vary by vendor. For example, Intel provides the silicon code using FSP binaries (Firmware Support Package). AMD provides the equivalent using AGESA. ARM SoCs typically use ARM Trusted Firmware (TF-A) to provide silicon code.



To help you get an environment set up, you can try using the EdkRepo tool. I have pre-built binaries available here: https://github.com/nate-desimone/edk2-staging/releases/tag/EdkRepo-preview-2020-10-09



Installation instructions are available here: https://github.com/tianocore/edk2-edkrepo



After you have edkrepo installed, you can set up a MinPlatform development environment by running: edkrepo clone min Intel-MinPlatform



From there, you can try building one of the existing MinPlatform boards using https://github.com/tianocore/edk2-platforms/blob/master/Platform/Intel/build_bios.py Detailed build instructions are available here: https://github.com/tianocore/edk2-platforms/tree/master/Platform/Intel#windows-build-instructions



In general, the build system starts with a single DSC file which can (and often does) include several other DSC, INF, FDF files. This provides a full description of all the UEFI modules to build and any firmware volumes that need to be constructed. Every OpenBoardPkg has a *OpenBoardPkg.dsc file that provides this initial starting point for the build.



As far as skills needed, the most important one is a strong understanding and comfort with the C programming language.



Finally, given that there seems to be a large amount of interest in the QemuOpenBoardPkg task, I would recommend that anyone interested in that task write up another proposal for an alternate task that is also interesting. It seems likely that we will get more than one application for the QemuOpenBoardPkg task and we can only pick one.



Hope this helps and welcome to the project!



With Best Regards,

Nate

-----Original Message-----
From: discuss@edk2.groups.io <discuss@edk2.groups.io> On Behalf Of
Ayush Dwivedi
Sent: Wednesday, March 17, 2021 1:10 PM
To: discuss@edk2.groups.io
Subject: [edk2-discuss] Google Summer of Code 2021 interested student
Hello everyone,
My name is Ayush Dwivedi. I am currently studying Computer Science and
Engineering and am in my 3rd year of B.Tech program. I am interested in
operating systems, firmwares and game programming. I have written some
personal projects in C and C++ programming languages and have
experimented with x86_64 assembly. Recently I have been using QEMU with
the OVMF UEFI firmware which I had built from source using edk2. I have
tried to write my own EFI applications(it was an attempt to understand how
UEFI differs from BIOS). I wish to be a part of the TianoCore community and
want to contribute. I would like to know what skills and knowledge is needed
for the task "MinPlatform Qemu Support". It is explained that we are needed
to port MinPlatform to QEMU so as of now I have started looking into the
OvmfPkg(since it already runs on QEMU) and Platform/Intel/MinPlatformPkg
but the source tree for edk2 and edk2-platform is huge so I am confused on
how and where I should start. I am looking forward to guidance from the
community.
Thank you for your precious time.
Regards,
Ayush Dwivedi

Join discuss@edk2.groups.io to automatically receive all group messages.