public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Michael Kubacki" <mikuback@linux.microsoft.com>
To: devel@edk2.groups.io, gaoliming@byosoft.com.cn,
	kaaira7319@gmail.com, 'Ray Ni' <ray.ni@intel.com>
Subject: Re: 回复: [edk2-devel] GSoC 2021 Qemu OpenBoardPkg Project
Date: Wed, 19 May 2021 10:29:51 -0700	[thread overview]
Message-ID: <2162525c-4e35-0c09-4594-ecbfbc740dcc@linux.microsoft.com> (raw)
In-Reply-To: <000001d74c4b$1ae82a80$50b87f80$@byosoft.com.cn>

Thanks Liming.

Hi Kaaira,

Welcome! You can contact me at mikuback@linux.microsoft.com. You will 
sometimes see my email as michael.kubacki@microsoft.com and that is fine 
to use for communication though I tend to not use it on the mailing list 
due to way the mail server manipulates plaintext email.

GENERIC RESOURCES

I'm sharing some general resources in case you are not already familiar 
with them:

1. https://github.com/tianocore-training/Tianocore_Training_Contents/wiki

This one is good for topics like UEFI overview, EDK II concepts, and 
Minimum Platform.

In particular for your project, I recommend looking through the 
MinPlatform training - 
https://github.com/tianocore-training/Presentation_FW/blob/master/FW/Presentations/_D_05_EDK_II_Open_Source_MinPlatform_pres_gp.pdf

2. 
https://software.intel.com/content/www/us/en/develop/articles/unified-extensible-firmware-interface.html

These whitepapers are useful when you need more in depth detail about a 
particular area (like capsule update or work related to the memory map). 
I recommend bookmarking it and keeping it in mind as a reference.

3. https://uefi.org/learning_center/presentationsandvideos/

Scroll through here if you have some time and see if there's anything 
interesting. To help keep on your project schedule I don't think these 
are as important but there is a lot of interesting material there.

Reading through some of the key concepts in Beyond BIOS can be helpful 
and like the UEFI, ACPI, and PI (Platform Initialization) specs at 
https://uefi.org/specifications, I believe they are most useful as 
references when you are solving specific problems.

PROJECT-SPECIFIC RESOURCES

Since your project involves creating QEMU board within the Minimum 
Platform architecture, you can start looking into:

1. QEMU - An open source machine emulator
2. Minimum Platform Architecture - A software architecture to create 
basic platform firmware that can be extended with advanced functionality.
3. Intel FSP - Try to understand the high-level goals and how FSP 
interfaces with firmware.

1. QEMU - https://www.qemu.org/

Please set up the QEMU environment. Your QemuOpenBoardPkg will need to 
run on qemu-system-x86_64 at a minimum with a 32-bit PEI and a 64-bit 
DXE phase. Most real hardware firmwares also use a 32-bit PEI and a 
64-bit DXE.

I suggest you start with the OvmfPkg README - 
https://github.com/tianocore/edk2/blob/master/OvmfPkg/README

As an initial step you can try to build an OVMF FW with a 32-bit PEI 
(IA32) and 64-bit DXE (X64) and boot to the EFI shell. 
OvmfPkg/OvmfPkgIa32X64.dsc can be used to build a firmware for these 
target architectures.

Any time you submit patches to edk2, you can check edk2/maintainers.txt 
- https://github.com/tianocore/edk2/blob/master/Maintainers.txt for the 
appropriate maintainers and reviewers to CC on the patch. As you can 
see, Laszlo and Ard are the maintainers for OvmfPkg and Jordan is a 
reviewer. If there are any questions that require deep expertise in QEMU 
or OVMF, we will reach out to them. The Minimum Platform code is 
maintained in the edk2-platforms repository and it has a similar 
maintainers.txt file for its packages - 
https://github.com/tianocore/edk2-platforms/blob/master/Maintainers.txt.

I suggest you try sending a very trivial patch for a change in the 
edk2-platforms repository - https://github.com/tianocore/edk2-platforms 
to make sure that your git environment is set up properly to format edk2 
patches and your email service can send patches correctly.

We can discuss the details about how to set up your environment and what 
to change when you are ready. You can use this page to get started - 
https://github.com/tianocore/tianocore.github.io/wiki/How-To-Contribute.

2. EDK II Minimum Platform Specification - 
https://edk2-docs.gitbook.io/edk-ii-minimum-platform-specification/

For your project, this spec will be very useful. It describes why 
Minimum Platform was created and how it works at a high-level. Like the 
code, this document is open and available to the community. You might 
contribute content here in addition to your code. You can fix any bugs 
or update content in the spec using git patches and the mailing list 
similar to code.

3. Intel FSP - 
https://www.intel.com/content/www/us/en/intelligent-systems/intel-firmware-support-package/intel-fsp-overview.html

For more information about Intel FSP check out the Intel FSP External 
Architecture Specification in the link above. v2.2 is currently the 
latest version.

There is an open source QEMU FSP available here 
https://github.com/universalpayload/fspsdk/tree/qemu_fsp_x64. You will 
find the existing Minimum Platform boards use Intel FSP while OvmfPkg 
does not use FSP.

Firmware is really best learned hands on. Using the links and background 
info above, I suggest:

1. Read the OvmfPkg readme.
2. Build a 32-bit PEI and 64-bit DXE OVMF FW and boot it to EFI shell 
using QEMU.
3. Reading through the EDK II Minimum Platform Specification to gain a 
high level understanding of Minimum Platform.
4. Connect what you read to the code in 
https://github.com/tianocore/edk2-platforms/tree/master/Platform/Intel. 
Focus on higher level pieces like the board initialization library.
5. Note what each board package is doing. You will find common patterns 
for what a board package needs to implement to make the system boot.
6. As you read through the code, reference the general resources listed 
above to understand anything not Minimum Platform specific. Part of the 
learning process is knowing which spec to use for different interfaces. 
If you're unsure which spec something is in, feel free to reach out.
7. While looking through the code in edk2-platforms, think about a patch 
you can send to edk2-platforms for something very trivial such as a bug 
fix or documentation update.
8. Send the patch and get it reviewed-by the appropriate 
maintainers/reviewers and merged into the master branch.
9. Read through the code in OvmfPkg. Try to map the work it is doing to 
the board code you reviewed in edk2-platforms.
10. At this point, you could start outlining major pieces of 
initialization in OVMF and how they might map to a board package. Try to 
identify where the initialization pieces would reside in the board 
package and try to identify challenges that might arise. We will likely 
spend quite a bit of time here before jumping into too much code.

I know this is a lot of info. Please don't hesitate to reach out if you 
have any questions and I look forward to working with you.

Regards,
Michael

On 5/18/2021 6:05 PM, gaoliming wrote:
> Include Michael Kubacki.
> 
> Thanks
> Liming
>> -----邮件原件-----
>> 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 KAAIRA
>> GUPTA
>> 发送时间: 2021年5月18日 22:42
>> 收件人: Ray Ni <ray.ni@intel.com>; devel@edk2.groups.io
>> 主题: Re: [edk2-devel] GSoC 2021 Qemu OpenBoardPkg Project
>>
>> On Tue, May 18, 2021 at 08:01:57PM +0530, Kaaira Gupta wrote:
>>> Hey everyone,
>>>
>>> I have been selected as a student developer for the project MinPlatform
>>> Qemu OpenBoardPkg under the mentors Ray Ni and Michael Kubacki.
>> Thankyou
>>> for this opportunity. I have been over the major chapters of Beyond BIOS
>>> as recommended by Nate DeSimone. I want to get familiar with the code
>>> now to help me undersatnd the community practices and get my hands
>>> dirty. Where should I start? What development environment do I need?
>>> How can I use this community bonding period to give me a better start
>>> for the coding phase?
>>>
>>> How do the mentors want me to connect with them? Can we have a meet
>> to
>>> discuss this project's plan to add more details? This would be very
>>> helpful for me considering I don't have prior experience with EDK2.
>>
>> I noticed that the mail-id that I have used of Michael Kubacki doesn't
>> exist anymore. Please let me know how I can contact him.
>>
>>>
>>> Thank you,
>>> Kaaira
>>
>> Thanks,
>> Kaaira
>>
>>
>>
>>
> 
> 
> 
> 
> 
> 
> 

  parent reply	other threads:[~2021-05-19 17:29 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-18 14:31 GSoC 2021 Qemu OpenBoardPkg Project KAAIRA GUPTA
2021-05-18 14:41 ` KAAIRA GUPTA
2021-05-19  1:05   ` 回复: [edk2-devel] " gaoliming
2021-05-19 17:23     ` Oram, Isaac W
2021-05-19 17:29     ` Michael Kubacki [this message]
2021-05-19 18:57       ` 回复: " Michael Kubacki
2021-05-20  3:39         ` Daniel Schaefer
2021-05-20 15:05           ` Oram, Isaac W
2021-05-20 16:32             ` Michael Kubacki
2021-05-21  2:26               ` Daniel Schaefer
2021-05-21  3:38                 ` Oram, Isaac W
2021-05-24 18:59                   ` 回复: [edk2-devel] Generic MinPlatform Daniel Schaefer
     [not found]                   ` <168215E7E28C9D49.19255@groups.io>
2021-05-24 22:13                     ` Daniel Schaefer
2021-05-26  5:33                       ` Michael Kubacki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2162525c-4e35-0c09-4594-ecbfbc740dcc@linux.microsoft.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox