Brian Richardson edited this page Feb 28, 2017 · 16 revisions

Table of Contents

Tasks

These tasks have been identified by our community. 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.

Open Projects

Enable LLVM Build for Microsoft Windows

LLVM support in EDK II is currently limited to Linux builds. Add build support under Microsoft Windows 10.

  • Mentor: Steven Shi

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 Mentor: Steven Shi

Add Visual Studio 2017 Support

Microsoft Visual Studio will be released March 7, 2017. Add VS2017 build support to EDK II.

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: andrewfish, jljusten

Implement I2C Stack for PI 1.3

Build I2C support as a PI component, based on the PI 1.3 specification. Initial development on Galileo or MinnowBoardMax platforms.

  • Mentor: Mike Kinney

Intel Gailieo Platform Improvements

Add features to Galileo based on open source platform in EDK II. https://github.com/tianocore/edk2/tree/master/QuarkPlatformPkg

  • Switch from private SD/MMC stack to standard one in MdeModulePkg.
  • Debugger/Console using USB client mode for multiple high perf UARTs in ESRAM
  • Logging and Debugger support over USB using ESRAM for DMA.
Mentor: Mike Kinney

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: Mike Kinney, Supreeth Venkatesh

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)
Mentor: Mike Kinney

Coverity Static Analysis Tools

Enable Coverity Scan for all EDK II projects. https://scan.coverity.com/

  • Evaluate open source CI tools to fine best one to periodically auto run Coverity static analysis
  • Look into ways to auto-post results to TianoCore (website, wiki, or git repo).
  • Look into ways to automate Bugzilla issue generation based on Coverity results.
Mentor: Mike Kinney, Steven Shi

MP safe Print, DEBUG, and ASSERT

Allow APs to safely print and use DEBUG trace messages.

> Note: This project depends on an open-source MP implementation, which is currently not available.

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

Port Intel Firmware Engine SDK Extensions to OVMF

Intel Firmware Engine adds UserExtensions in the SDK to describe connections between modules and module parameters (as "Patchable In Binary" PCDs). This enables binary distribution of configurable firmware components. Porting these extensions to a branch of OVMF would allow development and testing of these concepts on a virtual platform.

Languages: C, Python Mentor: Jaben Carsey

Tools for EDK II Ease-of-Use

Simplify EDK II development:

  • GUI helper tool to pull multiple repos and setup WORKSPACE.
  • 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.
  • Use Intel Firmware Engine user extensions to perform additional build checking.
  • Automatically set values in target.txt based on platform configuration (compiler, thread count, etc.).
Languages: C, Python Mentor: Mike Kinney

Continuous Integration

On demand builds to verify patch series before sending to edk2-devel (for Windows, Linux, OSX)

Port EmulatorPkg to Windows

Port EmulatorPkg to Microsoft Windows (32/64 bit), as a replacement for NT32.

  • Difficulty: Medium
  • Language: C
  • Mentor:
  • Suggested by: andrewfish
More information: Tasks-EmulatorPkg for Windows

Port EmulatorPkg to ARM

Create a ARM based host environment for EmulatorPkg.

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

EmulatorPkg network support for Linux

Port EmulatorPkg/EmuSnpDxe to support Linux.

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

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

  • Difficulty: Hard
  • Language: C
  • Mentor:
  • Suggested by: jljusten, geekboy15a, jcarsey

DNS Proxy Support

Implement DNS proxy on EDK II

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

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

Terminal driver improvements

Optimize cursor motion sequences; support Linux/UNIX standard (xterm/konsole/gnome-terminal/etc.) key codes and line-drawing characters

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

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

DataHub & GCD scalability

The DataHub and GCD 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

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.
Difficulty: Medium ... Hard Language: C Suggested by: andrewfish

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).
Difficulty: Medium ... Hard Language: C Suggested by: andrewfish

Optimize OVMF for Xen HVM domains

Add Xen specific support in OVMF to improve boot & runtime performance. http://www.xen.org/

  • Difficulty: Medium/Hard
  • Language: C
  • Mentor:
  • Suggested by: andreiwarkentin, Bei Guan

Port OpenSSH as a shell application

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

Partially Complete or Deferred Projects

Read-only ext2 driver

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

More information: Tasks-ext2 file-system driver

Compatibility Support Module

A CSM allows a UEFI system to boot legacy operating systems on IA32 & X64 systems. In other words, most current production OS's. Strong preference is for a BSD licensed solution, as this is license used by nearly all of our code. A SeaBIOS based solution could be considered, but would not be as widely usable (GPL license). http://www.coreboot.org/SeaBIOS

  • Difficulty: Hard
  • Language: Assembly, C
  • Mentor:
  • Suggested by: bjjohnson
  • Status: No longer a priority, since UEFI OS support is mainstream. SeaBIOS can be built as a CSM, but a BSD licensed alternative is still not available.

Previously 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

Shell editor improvements

Various improvements for the Shell editor

  • Difficulty: Medium
  • Language: C
  • Mentor: jljusten
  • Suggested by: jljusten, geekboy15a, jcarsey
  • Status: Available in main edk2 tree
More information: Tasks-Text Editor

Enable Xen Support in OVMF

Get Xen to boot UEFI with OVMF.

  • Difficulty: Hard (depending on tasks taken on)
  • Language: C
  • Mentor: andreiwarkentin, jljusten
  • Suggested by: andreiwarkentin
  • Status: Available in main edk2 tree

USB-to-serial driver

Develop a USB driver for a common USB-to-serial adapter.

  • Difficulty: Medium
  • Language: C
  • Mentor:
  • Suggested by: jljusten
More information: Tasks-USB Serial Adapter driver

Multiprocessor support in UefiCpuPkg/CpuDxe

Enable multiprocessor support for IA32 & X64 within UefiCpuPkg/CpuDxe. (Implement MdePkg/Include/Protocol/MpService.h)

  • Difficulty: Medium
  • Language: Assembly, C
  • Mentor:
  • Suggested by: jljusten
  • Status: Available in EDK II tree
More information: Tasks-UefiCpuPkg-CpuDxe MP support

Enable Link-time Code Optimization for Linux builds

Enable Link-time Code Optimization on Linux for either GCC or LLVM/CLANG. http://gcc.gnu.org/wiki/LinkTimeOptimization

This feature hopefully would significantly reduce code generation size for Linux based builds.

  • Difficulty: Medium
  • Language: C
  • Mentor:
  • Suggested by: andrewfish, jljusten
  • Status: Available in GCC5 & CLANG38 toolchains

See Also

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.