2
2
3
3
[ ![ Crates.io] ( https://img.shields.io/crates/v/uefi )] ( https://crates.io/crates/uefi )
4
4
[ ![ Docs.rs] ( https://docs.rs/uefi/badge.svg )] ( https://docs.rs/uefi )
5
- ![ Stars] ( https://img.shields.io/github/stars/rust-osdev/uefi-rs )
6
5
![ License] ( https://img.shields.io/github/license/rust-osdev/uefi-rs )
7
6
![ Build status] ( https://github.com/rust-osdev/uefi-rs/workflows/Rust/badge.svg )
7
+ ![ Stars] ( https://img.shields.io/github/stars/rust-osdev/uefi-rs )
8
8
9
9
## Description
10
10
11
- [ UEFI] is the successor to the BIOS. It provides an early boot environment for
12
- OS loaders, hypervisors and other low-level applications. While it started out
13
- as x86-specific, it has been adopted on other platforms, such as ARM.
11
+ [ UEFI] started as the successor firmware to the BIOS in x86 space and developed
12
+ to a universal firmware specification for various platforms, such as ARM. It
13
+ provides an early boot environment with a variety of [ specified] [ spec ]
14
+ ready-to-use "high-level" functionality, such as accessing disks or the network.
15
+ EFI images, the files that can be loaded by an UEFI environment, can leverage
16
+ these abstractions to extend the functionality in form of additional drivers,
17
+ OS-specific bootloaders, or different kind of low-level applications.
18
+
19
+ Our mission is to provide ** safe** and ** performant** wrappers for UEFI
20
+ interfaces, and allow developers to write idiomatic Rust code.
21
+
22
+ This repository provides various crates:
23
+
24
+ - ` uefi-raw ` : Raw Rust UEFI bindings for basic structures and functions.
25
+ - ` uefi ` : High-level wrapper around various low-level UEFI APIs. \
26
+ Most probably, you want to use this crate.
27
+ - ` uefi-services ` : Optional Rust convenience with a global allocator and a
28
+ ` log ` -based logger implementation.
14
29
15
- This crate makes it easy to both:
16
- - Write UEFI applications in Rust (for ` i686 ` , ` x86_64 ` , or ` aarch64 ` )
17
- - Call UEFI functions from an OS (usually built with a [ custom target] [ rustc-custom ] )
30
+ You can use the abstractions for example to:
18
31
19
- The objective is to provide ** safe ** and ** performant ** wrappers for UEFI interfaces,
20
- and allow developers to write idiomatic Rust code.
32
+ - create OS-specific loaders and leverage UEFI boot service
33
+ - access UEFI runtime services from an OS
21
34
22
- Check out [ the UEFI application template] ( template ) for a quick start.
35
+ All crates are compatible with all platforms that both the Rust compiler and
36
+ UEFI support, such as ` i686 ` , ` x86_64 ` , and ` aarch64 ` ). Please note that we
37
+ can't test all possible hardware/firmware/platform combinations.
23
38
24
39
[ UEFI ] : https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface
25
- [ rustc-custom ] : https://doc.rust-lang.org/rustc/targets/custom.html
26
40
27
- ![ uefi-rs running in QEMU] ( https://imgur.com/SFPSVuO.png )
41
+ ![ UEFI App running in QEMU] ( https://imgur.com/SFPSVuO.png )
42
+ Screenshot of an application running in QEMU on an UEFI firmware that leverages
43
+ our Rust library.
44
+
45
+ ## User Documentation
46
+
47
+ For a quick start, please check out [ the UEFI application template] ( template ) .
48
+
49
+ The [ uefi-rs book] contains a tutorial, how-tos, and overviews of some important
50
+ UEFI concepts. Reference documentation for the various crates can be found on
51
+ [ docs.rs] :
52
+
53
+ - [ docs.rs/uefi] ( https://docs.rs/uefi )
54
+ - [ docs.rs/uefi-macros] ( https://docs.rs/uefi-macros )
55
+ - [ docs.rs/uefi-raw] ( https://docs.rs/uefi-raw )
56
+ - [ docs.rs/uefi-services] ( https://docs.rs/uefi-services )
57
+
58
+ For additional information, refer to the [ UEFI specification] [ spec ] .
59
+
60
+ [ spec ] : https://uefi.org/specs/UEFI/2.10
61
+ [ uefi-rs book ] : https://rust-osdev.github.io/uefi-rs/HEAD
62
+ [ docs.rs ] : https://docs.rs
63
+
64
+ ### MSRV
28
65
29
- ## Project structure
66
+ See the [ uefi package's README] ( uefi/README.md#MSRV ) .
67
+
68
+ ## Developer Guide
69
+
70
+ ### Project structure
30
71
31
72
This project contains multiple sub-crates:
32
73
33
74
- ` uefi ` : defines the standard UEFI tables / interfaces.
34
75
The objective is to stay unopinionated and safely wrap most interfaces.
35
76
36
- - ` uefi-macros ` : procedural macros that are used to derive some traits in ` uefi ` .
77
+ - ` uefi-macros ` : procedural macros that are used to derive some traits
78
+ in ` uefi ` .
37
79
38
80
- ` uefi-raw ` : raw types that closely match the definitions in the UEFI
39
81
Specification. Safe wrappers for these types are provided by the ` uefi `
40
82
crate. The raw types are suitable for implementing UEFI firmware.
41
83
42
- - ` uefi-services ` : provides a panic handler, and initializes the ` alloc ` / ` logger ` features.
84
+ - ` uefi-services ` : provides a panic handler, and initializes
85
+ the ` alloc ` / ` logger ` features.
43
86
44
87
- ` uefi-test-runner ` : a UEFI application that runs unit / integration tests.
45
88
46
89
[ log ] : https://github.com/rust-lang-nursery/log
47
90
48
- ## Documentation
49
-
50
- The [ uefi-rs book] contains a tutorial, how-tos, and overviews of some
51
- important UEFI concepts.
52
-
53
- Reference documentation can be found on docs.rs:
54
- - [ docs.rs/uefi] ( https://docs.rs/uefi )
55
- - [ docs.rs/uefi-macros] ( https://docs.rs/uefi-macros )
56
- - [ docs.rs/uefi-raw] ( https://docs.rs/uefi-raw )
57
- - [ docs.rs/uefi-services] ( https://docs.rs/uefi-services )
58
-
59
- For additional information, refer to the [ UEFI specification] [ spec ] .
60
-
61
- [ spec ] : http://www.uefi.org/specifications
62
- [ uefi-rs book ] : https://rust-osdev.github.io/uefi-rs/HEAD
63
-
64
- ## Building and testing uefi-rs
91
+ ### Building and testing uefi-rs
65
92
66
93
Use the ` cargo xtask ` command to build and test the crate.
67
94
68
95
Available commands:
96
+
69
97
- ` build ` : build all the UEFI packages
70
98
- ` --release ` : build in release mode
71
99
- ` --target {x86_64,ia32,aarch64} ` : choose target UEFI arch
@@ -77,9 +105,10 @@ Available commands:
77
105
- ` --warnings-as-errors ` : treat warnings as errors
78
106
- ` run ` : build ` uefi-test-runner ` and run it in QEMU
79
107
- ` --ci ` : disable some tests that don't work in the CI
80
- - ` --disable-kvm ` : disable hardware accelerated virtualization support in QEMU.
81
- Especially useful if you want to run the tests under
82
- [ WSL] ( https://docs.microsoft.com/en-us/windows/wsl ) on Windows.
108
+ - ` --disable-kvm ` : disable hardware accelerated virtualization support in
109
+ QEMU.
110
+ Especially useful if you want to run the tests under
111
+ [ WSL] ( https://docs.microsoft.com/en-us/windows/wsl ) on Windows.
83
112
- ` --example <NAME> ` : run an example instead of the main binary.
84
113
- ` --headless ` : run QEMU without a GUI
85
114
- ` --ovmf-code <PATH> ` : path of an OVMF code file
@@ -94,18 +123,16 @@ most of the library's functionality.
94
123
Check out the testing project's [ ` README.md ` ] ( uefi-test-runner/README.md ) for
95
124
prerequisites for running the tests.
96
125
97
- ## MSRV
98
-
99
- See the [ uefi package's README] ( uefi/README.md#MSRV ) .
100
-
101
126
## Contributing
102
127
103
- We welcome issues and pull requests! For instructions on how to set up a development
104
- environment and how to add new protocols, check out [ CONTRIBUTING.md] ( CONTRIBUTING.md ) .
128
+ We welcome issues and pull requests! For instructions on how to set up a
129
+ development environment and how to add new protocols, check out
130
+ [ CONTRIBUTING.md] ( CONTRIBUTING.md ) .
105
131
106
132
## License
107
133
108
134
The code in this repository is licensed under the Mozilla Public License 2.
109
- This license allows you to use the crate in proprietary programs, but any modifications to the files must be open-sourced.
135
+ This license allows you to use the crate in proprietary programs, but any
136
+ modifications to the files must be open-sourced.
110
137
111
138
The full text of the license is available in the [ license file] ( LICENSE ) .
0 commit comments