Skip to content
Bob Feng edited this page Mar 29, 2021 · 41 revisions

These tasks have been identified by our community. Many of these tasks would make good GSoC projects. They are currently open for development by community members, and would be a great way to get involved and start contributing. Please let us know on edk2-devel if you plan to work on one of these tasks (to prevent duplicated effort). Also, please provide status updates on edk2-devel so the community will know the project is still being actively developed.

Table of Contents

Project Ideas

New Languages and Compilers

Dynamic Linking enabling

Current EDK II doesn't support the dynamic linking (https://en.wikipedia.org/wiki/Dynamic_linker), which limits UEFI firmware to be split into modular components that can be distributed separately in binary and loaded only when necessary. This project is to add native dynamic library build support (ELF first) and introduce a dynamic linker in edk2 core.

Enable Clang/LLVM Build for Microsoft Windows

LLVM support in EDK II is currently limited to Linux builds. Getting LLVM running on Windows would enable the TianoCore project to support Clang and the LLVM toolchain more robustly. Microsoft Windows 10 should be the primary target.

  • Difficulty: Medium
  • Language: C, Python
  • Mentor:
  • Suggested by: @shijunjing

Add Rust Support to EDK II

Add support for the Rust programming language to EDK II

  • Difficulty: Hard
  • Language: Rust, C, Assembly
  • Mentor:
  • Suggested by: @nate-desimone
More information: Tasks-Add-Rust-Support-to-EDK-II

Port the Go language to UEFI

Add support for the Go programming language to EDK II

  • Difficulty: Hard
  • Language: Go, C, Assembly
  • Mentor:
  • Suggested by: @nate-desimone
More information: TODO

LLVM Optimizations

LLVM Address Sanitation using Intel MPX to detect buffer overflows

  • Depends on compiler & hardware that supports the Intel MPX compiler
  • Focus on firmware components
LLVM Static Analysis to extend Address Sanitation for FW security
  • Difficulty: Medium..Hard
  • Language: C, Assembly
  • Mentor:
  • Suggested by: @shijunjing

New Platforms and Boards

MinPlatform Qemu Support

Build a MinPlatform Board Port for Qemu.

More information: Tasks-MinPlatform-QemuOpenBoardPkg

Port MinPlatform to a New Motherboard

Build a MinPlatform board port for a new motherboard of your choice.

More information: Tasks-MinPlatform-Board-Port

Add a MinPlatform Board Port for the Raspberry Pi

Build a MinPlatform board port for the Raspberry Pi.

More information: Tasks-MinPlatform-Port-to-Raspberry-Pi

Testing and Quality Improvements

Write Unit Tests for EDK II

EDK II needs more unit tests... help us write them!

  • Difficulty: Easy...Medium
  • Language: C, Assembly
  • Mentor:
  • Suggested by: @nate-desimone

Test Harness Improvements

Improvements to the test harness in the edk2-test staging branch. https://github.com/tianocore/edk2-staging/tree/edk2-test

  • Test Harness for PEI using Capsule Update or Recovery feature to deliver tests
  • Test Harness for SMM using Capsule Update or Recovery feature to deliver tests
  • Performance improvements of test harness
Mentor: @mdkinney, Supreeth Venkatesh

Continuous Integration For EDK II Platforms

Azure pipelines CI is currently only enabled for core EDK II. Extend this by implementing Azure pipelines to test patches submitted for open source platforms hosted in edk2-platforms.

  • Difficulty: Easy
  • Language: Python
  • Mentor:
  • Suggested by: @nate-desimone

EDK II Core Improvements

Terminal driver improvements

Optimize cursor motion sequences; support Linux/UNIX standard (xterm/konsole/gnome-terminal/etc.) key codes and line-drawing characters (currently one must set their terminal emulator to use code page 437 for correct line drawing.)

  • Difficulty: Medium
  • Language: C
  • Mentor:
  • Suggested by: bjjohnson, @nate-desimone
More information: Tasks-Terminal-driver-improvements

DataHub & GCD scalability

The DXE core's DataHub and GCD (Global Coherency Domain) layers don't scale well as the number of data items gets large, since they are based on simple linked lists. Find better data structures.

  • Difficulty: Medium
  • Language: C
  • Mentor:
  • Suggested by: bjjohnson

Accessibility

Audio Output device support

The first step towards an audio interface is enabling standardised support for audio output. This task means prototyping an AUDIO_OUTPUT_PROTOCOL, and implementing at least one device driver producing this protocol. The initial drivers envisioned are `virtio-sound` (for use with QEMU), `USB Audio Class`, and `HDA`. The HDA driver would additionally need to prototype an HDA_CODEC_PROTOCOL and implement it in a driver targeting a specific hardware codec.

Follow-on tasks

  • HII integration of Audio output
  • HII integration of Speech synthesis?
  • Audio Input device support
  • Voice control

Debug Tool Improvements

SourceLevelDebugPkg & GDB

A fully functional gdb stub for x86/x64, attaching to SourceLevelDebugPkg's remote protocol.

  • Difficulty: Medium ... Hard
  • Language: Python, C
  • Mentor:
  • Suggested by: bjjohnson

MP safe Print, DEBUG, and ASSERT

Allow APs to safely print and use DEBUG trace messages.

  • Difficulty: Medium
  • Language: C
  • Mentor:
  • Suggested by: @ajfish

Port EmulatorPkg to ARM

Create a ARM based host environment for EmulatorPkg.

  • Difficulty: Medium
  • Language: C
  • Mentor:
  • Suggested by: @ajfish

EmulatorPkg network support for Linux

Port EmulatorPkg/EmuSnpDxe to support Linux.

  • Difficulty: Medium
  • Language: C
  • Mentor:
  • Suggested by: @ajfish

Utilize return address information

Make use of __builtin_return_address(n) & _ReturnAddress to add debug & data gathering capabilities. Some ideas:

  • Produce a protocol with info on the image handle so a shell command can dump out the information
  • Track, on a per call basis, where resources are being consumed
  • Detect memory leaks
  • Log information about stall and timer usage
  • Collect statistics on BootServices and RuntimeServices calls.
  • Performance profile library calls EFI boot and runtime services calls.
  • gBS is set up by a library so it could point to a debug wrapper for the functions.
  • Post process raw output (PDB name + offset in PE/COFF) to include function names via parsing .map files.
Summary:
  • Difficulty: Medium ... Hard
  • Language: C
  • Mentor:
  • Suggested by: @ajfish

Various Debug Improvements

Note: There are many ideas here. Please feel free to gather any reasonable subset for a project proposal.

  • Debug version of libraries, and tools to analyze the data:
  • UefiBootServicesTableLib.h & UefiRuntimeServicesLib.h that can profile UEFI service usage.
  • Debug version of MemoryAllocationLib.h that can detect memory leaks, buffer overruns, etc.
  • Add a library class for logging the data
  • Log data directly to image handle, per driver.
  • Log data to centralized data service.
  • Add a library class for a module to access/initiate leak checking.
  • Add sample based profiling to EmulatorPkg/Nt32Pkg. On a Mac this would be figuring out how to use Instruments to profile the emulator.
  • Add a sampling based profiling tool to a real EFI system. Note this requires the ability to capture a stack trace and then post process it (likely on the build system).
Summary:
  • Difficulty: Medium ... Hard
  • Language: C
  • Mentor:
  • Suggested by: @ajfish

UEFI Networking Improvements

Network Block Device (NBD) client

http://nbd.sourceforge.net/

  • Difficulty: Medium
  • Language: C
  • Mentor:
  • Suggested by: bjjohnson, andreiwarkentin
More information: Tasks-Network Block Device

SMB network share support

Enable accessing content on an SMB network share

DNS Proxy Support

Implement DNS proxy on EDK II

  • Difficulty:
  • Language: C
  • Mentor:
  • Suggested by: kidzyoung

UEFI Applications and UEFI Shell Improvements

HII command-line browser

A command-line based HII browser, suitable for automation. Either a shell command or set of commands for locating, dumping, and modifying configuration values, or commands for dumping and loading HII data to/from a file in an easily-edited format.

  • Difficulty: Medium ... Hard
  • Language: C
  • Mentor:
  • Suggested by: bjjohnson

Port ACPI-CA to a shell application

Port portions of ACPI-CA to a shell application to enable dumping and disassembly of ACPI tables.

Difficulty: Medium Language: C Mentor: TBD Suggested by: @ajfish, @jljusten

Port OpenSSH as a shell application

  • Difficulty: Medium
  • Language: C
  • Mentor:
  • Suggested by: bjjohnson

Tools for EDK II Ease-of-Use

UEFI Driver Wizard

Improvements to existing UEFI Driver Wizard

  • Update to latest version of wxPython
  • Update for latest UEFI Specifications
  • Consider adding PI module types (PEIMs, DXE Drivers, DXE Runtime Drivers, SMM Drivers)
  • Difficulty: Low
  • Mentor: @mdkinney

Various Ease-Of-Use Tools

Simplify EDK II development:

  • GUI frontend for EdkRepo.
  • GUI helper tool to configure and launch a build.
  • GUI helper tool to configure platform PCDs.
  • GUI helper tool to configure FLASH layout, Recovery, and Capsules.
  • Automatically set values in target.txt based on platform configuration (compiler, thread count, etc.).
Languages: C, Python Mentor: @ashedesimone, @mdkinney

Partially Complete Projects

Read-only FFS file-system driver

Develop a read-only filesystem driver which allows the contents of each PI 1.2 FFS in the system to appear as a pseudo-file system.

More information: Tasks-Read-only FFS file-system driver

Read-only ext2 driver

Develop a read-only ext2 filesystem driver. http://en.wikipedia.org/wiki/Ext2

More information: Tasks-ext2 file-system driver

See Also

Clone this wiki locally