Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Tasks Add Rust Support to EDK II

Nate DeSimone edited this pageFeb 25, 2022 ·2 revisions

Add support for the Rust programming language to EDK II

  • Project Size: Large
  • Difficulty: Hard
  • Language: Rust, C, Assembly
  • Mentor:
  • Suggested by:@nate-desimone

Details

Multiple independent implementations of Rust language support for UEFI have been created, however all attempts thus far have not been integrated with the EDK II BaseTools build system. This project would involve reconciling all the various UEFI Rust implementations and reconciling Rust's cargo packaging system with the existing EDK II LibraryClass dependency tracking system. Then, UEFI services bindings would need to be defined and implemented for Rust.

Current UEFI Rust implementations requireno_std Rust code, largely due to the fact that the chances of implementing a full std:: for UEFI in a reasonable timeframe is about 0%. The Rust language designers somewhat assumed any given target OS would provide an implementation of libc as a pre-requisite for implementing std:: however this assumption does not hold well for UEFI. While there is a libc implementation inAppPkg's StdLib this implementation depends on the UEFI shell and thus cannot be used to implement UEFI drivers or DXE drivers, reducing its utility for this task.

However, most firmware development use cases don't need a full implementation of std. One can use a statement likeextern crate my_std as std; and then implement a subset of std:: and then implement a global default allocator that uses the UEFI AllocatePool() boot service. This would enable a lot of std:: functionality like std::collections. This project should create a subset of std that at a minimum provides a global default allocator for DXE. Since PEI lacks a complete heap implementation, PEIMs implemented in Rust would need to be limited to core::

Existing Work

@jyao1 made an initial effort to build EDK II Rust support, though it is not fully complete. His work in progress is available on edk2-staging:https://github.com/tianocore/edk2-staging/tree/edkii-rust

Unfortunately the rust-osdevuefi-rs implementation is released under the MPL, which is a weak copyleft license and is not compatible with TianoCore's BSD+Patent licensing. Accordingly, you will need toNOT read that code at all to make sure that that TianoCore's BSD licensing is not tainted.

Development Environment

Building: This project should ideally support all edk2 supported OSes and toolchains. Though you can start with any edk2 supported OS or toolchain of your choice.

Links for More Information

Further Discussion

Interested parties are welcome to discuss this project onedk2-devel.

See Also

Tasks

Clone this wiki locally


[8]ページ先頭

©2009-2025 Movatter.jp