Tasks

Brian Richardson edited this page Feb 25, 2017 · 4 revisions
Clone this wiki locally

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. These are also available as ideas for students working on Google Summer of Code 2017.

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/CLANG 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. Based on https://acpica.org/node/126
    • Table Verifier: AML method execution for testing without booting to an OS.
  • Difficulty: Medium
  • Language: C
  • Mentor: TBD
  • Suggested by: andrewfish, jljusten

Implement I2C Stack for PI 1.3

Build I2C support as a UEFI PI component, based on the PI 1.3 specification. Initial development on Intel Galileo or MinnowBoard Max/Turbot platforms.

  • Mentor: Mike Kinney

Intel Gailieo Platform Improvements

Add features to Intel 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

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
  • Mentor:
  • Suggested by: andrewfish

Various Debug Improvements

  • Note: There are many ideas here. GSoC students should 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
  • Mentor:
  • 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