Skip to content

Commit a454ab7

Browse files
committed
doc: update README
1 parent 1379320 commit a454ab7

File tree

1 file changed

+67
-42
lines changed

1 file changed

+67
-42
lines changed

README.md

Lines changed: 67 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,70 +2,96 @@
22

33
[![Crates.io](https://img.shields.io/crates/v/uefi)](https://crates.io/crates/uefi)
44
[![Docs.rs](https://docs.rs/uefi/badge.svg)](https://docs.rs/uefi)
5-
![Stars](https://img.shields.io/github/stars/rust-osdev/uefi-rs)
65
![License](https://img.shields.io/github/license/rust-osdev/uefi-rs)
76
![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)
88

99
## Description
1010

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+
- `uefi-services`: optional Rust convenience with a global allocator and a
27+
`log`-based logger implementation
1428

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])
29+
You can use the abstractions for example to:
1830

19-
The objective is to provide **safe** and **performant** wrappers for UEFI interfaces,
20-
and allow developers to write idiomatic Rust code.
31+
- create OS-specific loaders and leverage UEFI boot service
32+
- access UEFI runtime services from an OS
2133

22-
Check out [the UEFI application template](template) for a quick start.
34+
All crates are compatible with all platforms that both the Rust compiler and
35+
UEFI support, such as `i686`, `x86_64`, and `aarch64`). Please note that we
36+
can't test all possible hardware/firmware/platform combinations.
2337

2438
[UEFI]: https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface
25-
[rustc-custom]: https://doc.rust-lang.org/rustc/targets/custom.html
2639

27-
![uefi-rs running in QEMU](https://imgur.com/SFPSVuO.png)
40+
![UEFI App running in QEMU](https://imgur.com/SFPSVuO.png)
41+
Screenshot of an application running in QEMU on an UEFI firmware that leverages
42+
our Rust library.
43+
44+
## User Documentation
45+
46+
For a quick start, please check out [the UEFI application template](template).
47+
48+
The [uefi-rs book] contains a tutorial, how-tos, and overviews of some important
49+
UEFI concepts. Reference documentation for the various crates can be found on
50+
<docs.rs>:
51+
52+
- [docs.rs/uefi](https://docs.rs/uefi)
53+
- [docs.rs/uefi-macros](https://docs.rs/uefi-macros)
54+
- [docs.rs/uefi-raw](https://docs.rs/uefi-raw)
55+
- [docs.rs/uefi-services](https://docs.rs/uefi-services)
56+
57+
For additional information, refer to the [UEFI specification][spec].
58+
59+
[spec]: https://uefi.org/specs/UEFI/2.10
60+
[uefi-rs book]: https://rust-osdev.github.io/uefi-rs/HEAD
61+
62+
### MSRV
2863

29-
## Project structure
64+
See the [uefi package's README](uefi/README.md#MSRV).
65+
66+
## Developer Guide
67+
68+
### Project structure
3069

3170
This project contains multiple sub-crates:
3271

3372
- `uefi`: defines the standard UEFI tables / interfaces.
3473
The objective is to stay unopinionated and safely wrap most interfaces.
3574

36-
- `uefi-macros`: procedural macros that are used to derive some traits in `uefi`.
75+
- `uefi-macros`: procedural macros that are used to derive some traits
76+
in `uefi`.
3777

3878
- `uefi-raw`: raw types that closely match the definitions in the UEFI
3979
Specification. Safe wrappers for these types are provided by the `uefi`
4080
crate. The raw types are suitable for implementing UEFI firmware.
4181

42-
- `uefi-services`: provides a panic handler, and initializes the `alloc` / `logger` features.
82+
- `uefi-services`: provides a panic handler, and initializes
83+
the `alloc` / `logger` features.
4384

4485
- `uefi-test-runner`: a UEFI application that runs unit / integration tests.
4586

4687
[log]: https://github.com/rust-lang-nursery/log
4788

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
89+
### Building and testing uefi-rs
6590

6691
Use the `cargo xtask` command to build and test the crate.
6792

6893
Available commands:
94+
6995
- `build`: build all the UEFI packages
7096
- `--release`: build in release mode
7197
- `--target {x86_64,ia32,aarch64}`: choose target UEFI arch
@@ -77,9 +103,10 @@ Available commands:
77103
- `--warnings-as-errors`: treat warnings as errors
78104
- `run`: build `uefi-test-runner` and run it in QEMU
79105
- `--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.
106+
- `--disable-kvm`: disable hardware accelerated virtualization support in
107+
QEMU.
108+
Especially useful if you want to run the tests under
109+
[WSL](https://docs.microsoft.com/en-us/windows/wsl) on Windows.
83110
- `--example <NAME>`: run an example instead of the main binary.
84111
- `--headless`: run QEMU without a GUI
85112
- `--ovmf-code <PATH>`: path of an OVMF code file
@@ -94,18 +121,16 @@ most of the library's functionality.
94121
Check out the testing project's [`README.md`](uefi-test-runner/README.md) for
95122
prerequisites for running the tests.
96123

97-
## MSRV
98-
99-
See the [uefi package's README](uefi/README.md#MSRV).
100-
101124
## Contributing
102125

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).
126+
We welcome issues and pull requests! For instructions on how to set up a
127+
development environment and how to add new protocols, check out
128+
[CONTRIBUTING.md](CONTRIBUTING.md).
105129

106130
## License
107131

108132
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.
133+
This license allows you to use the crate in proprietary programs, but any
134+
modifications to the files must be open-sourced.
110135

111136
The full text of the license is available in the [license file](LICENSE).

0 commit comments

Comments
 (0)