mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-08 21:06:48 +00:00
Rename aster-frame to ostd
This commit is contained in:
parent
fb59fa7a55
commit
59350a8578
2
.github/workflows/osdk_test.yml
vendored
2
.github/workflows/osdk_test.yml
vendored
@ -3,8 +3,8 @@ name: OSDK Test
|
|||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- framework/**
|
|
||||||
- osdk/**
|
- osdk/**
|
||||||
|
- ostd/**
|
||||||
- tools/**
|
- tools/**
|
||||||
- Cargo.toml
|
- Cargo.toml
|
||||||
push:
|
push:
|
||||||
|
102
Cargo.lock
generated
102
Cargo.lock
generated
@ -77,13 +77,13 @@ name = "aster-block"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"align_ext",
|
"align_ext",
|
||||||
"aster-frame",
|
|
||||||
"aster-util",
|
"aster-util",
|
||||||
"bitflags 1.3.2",
|
"bitflags 1.3.2",
|
||||||
"component",
|
"component",
|
||||||
"int-to-c-enum",
|
"int-to-c-enum",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"log",
|
"log",
|
||||||
|
"ostd",
|
||||||
"pod",
|
"pod",
|
||||||
"spin 0.9.8",
|
"spin 0.9.8",
|
||||||
"static_assertions",
|
"static_assertions",
|
||||||
@ -93,63 +93,22 @@ dependencies = [
|
|||||||
name = "aster-console"
|
name = "aster-console"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aster-frame",
|
|
||||||
"aster-util",
|
"aster-util",
|
||||||
"bitflags 1.3.2",
|
"bitflags 1.3.2",
|
||||||
"component",
|
"component",
|
||||||
"log",
|
"log",
|
||||||
|
"ostd",
|
||||||
"spin 0.9.8",
|
"spin 0.9.8",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "aster-frame"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"acpi",
|
|
||||||
"align_ext",
|
|
||||||
"aml",
|
|
||||||
"array-init",
|
|
||||||
"aster-main",
|
|
||||||
"bit_field",
|
|
||||||
"bitflags 1.3.2",
|
|
||||||
"bitvec",
|
|
||||||
"buddy_system_allocator",
|
|
||||||
"cfg-if",
|
|
||||||
"gimli",
|
|
||||||
"iced-x86",
|
|
||||||
"id-alloc",
|
|
||||||
"inherit-methods-macro",
|
|
||||||
"int-to-c-enum",
|
|
||||||
"intrusive-collections",
|
|
||||||
"ktest",
|
|
||||||
"lazy_static",
|
|
||||||
"linux-boot-params",
|
|
||||||
"log",
|
|
||||||
"multiboot2",
|
|
||||||
"num",
|
|
||||||
"num-derive",
|
|
||||||
"num-traits",
|
|
||||||
"pod",
|
|
||||||
"rsdp",
|
|
||||||
"spin 0.9.8",
|
|
||||||
"static_assertions",
|
|
||||||
"tdx-guest",
|
|
||||||
"trapframe",
|
|
||||||
"unwinding",
|
|
||||||
"volatile",
|
|
||||||
"x86",
|
|
||||||
"x86_64",
|
|
||||||
"xarray",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aster-framebuffer"
|
name = "aster-framebuffer"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aster-frame",
|
|
||||||
"component",
|
"component",
|
||||||
"font8x8",
|
"font8x8",
|
||||||
"log",
|
"log",
|
||||||
|
"ostd",
|
||||||
"spin 0.9.8",
|
"spin 0.9.8",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -158,7 +117,6 @@ name = "aster-input"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ascii",
|
"ascii",
|
||||||
"aster-frame",
|
|
||||||
"aster-rights",
|
"aster-rights",
|
||||||
"aster-util",
|
"aster-util",
|
||||||
"bitflags 1.3.2",
|
"bitflags 1.3.2",
|
||||||
@ -166,6 +124,7 @@ dependencies = [
|
|||||||
"int-to-c-enum",
|
"int-to-c-enum",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"log",
|
"log",
|
||||||
|
"ostd",
|
||||||
"spin 0.9.8",
|
"spin 0.9.8",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -183,7 +142,6 @@ name = "aster-network"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"align_ext",
|
"align_ext",
|
||||||
"aster-frame",
|
|
||||||
"aster-rights",
|
"aster-rights",
|
||||||
"aster-util",
|
"aster-util",
|
||||||
"bitflags 1.3.2",
|
"bitflags 1.3.2",
|
||||||
@ -192,6 +150,7 @@ dependencies = [
|
|||||||
"int-to-c-enum",
|
"int-to-c-enum",
|
||||||
"ktest",
|
"ktest",
|
||||||
"log",
|
"log",
|
||||||
|
"ostd",
|
||||||
"pod",
|
"pod",
|
||||||
"ringbuf",
|
"ringbuf",
|
||||||
"smoltcp",
|
"smoltcp",
|
||||||
@ -206,7 +165,6 @@ dependencies = [
|
|||||||
"ascii",
|
"ascii",
|
||||||
"aster-block",
|
"aster-block",
|
||||||
"aster-console",
|
"aster-console",
|
||||||
"aster-frame",
|
|
||||||
"aster-input",
|
"aster-input",
|
||||||
"aster-network",
|
"aster-network",
|
||||||
"aster-rights",
|
"aster-rights",
|
||||||
@ -237,6 +195,7 @@ dependencies = [
|
|||||||
"libflate",
|
"libflate",
|
||||||
"log",
|
"log",
|
||||||
"lru",
|
"lru",
|
||||||
|
"ostd",
|
||||||
"paste",
|
"paste",
|
||||||
"pod",
|
"pod",
|
||||||
"rand",
|
"rand",
|
||||||
@ -276,10 +235,10 @@ dependencies = [
|
|||||||
name = "aster-time"
|
name = "aster-time"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aster-frame",
|
|
||||||
"aster-util",
|
"aster-util",
|
||||||
"component",
|
"component",
|
||||||
"log",
|
"log",
|
||||||
|
"ostd",
|
||||||
"spin 0.9.8",
|
"spin 0.9.8",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -287,11 +246,11 @@ dependencies = [
|
|||||||
name = "aster-util"
|
name = "aster-util"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aster-frame",
|
|
||||||
"aster-rights",
|
"aster-rights",
|
||||||
"aster-rights-proc",
|
"aster-rights-proc",
|
||||||
"inherit-methods-macro",
|
"inherit-methods-macro",
|
||||||
"ktest",
|
"ktest",
|
||||||
|
"ostd",
|
||||||
"pod",
|
"pod",
|
||||||
"typeflags-util",
|
"typeflags-util",
|
||||||
]
|
]
|
||||||
@ -303,7 +262,6 @@ dependencies = [
|
|||||||
"align_ext",
|
"align_ext",
|
||||||
"aster-block",
|
"aster-block",
|
||||||
"aster-console",
|
"aster-console",
|
||||||
"aster-frame",
|
|
||||||
"aster-input",
|
"aster-input",
|
||||||
"aster-network",
|
"aster-network",
|
||||||
"aster-rights",
|
"aster-rights",
|
||||||
@ -315,6 +273,7 @@ dependencies = [
|
|||||||
"id-alloc",
|
"id-alloc",
|
||||||
"int-to-c-enum",
|
"int-to-c-enum",
|
||||||
"log",
|
"log",
|
||||||
|
"ostd",
|
||||||
"pod",
|
"pod",
|
||||||
"smoltcp",
|
"smoltcp",
|
||||||
"spin 0.9.8",
|
"spin 0.9.8",
|
||||||
@ -325,12 +284,12 @@ dependencies = [
|
|||||||
name = "asterinas"
|
name = "asterinas"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aster-frame",
|
|
||||||
"aster-framebuffer",
|
"aster-framebuffer",
|
||||||
"aster-nix",
|
"aster-nix",
|
||||||
"aster-time",
|
"aster-time",
|
||||||
"component",
|
"component",
|
||||||
"id-alloc",
|
"id-alloc",
|
||||||
|
"ostd",
|
||||||
"x86_64",
|
"x86_64",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -1134,6 +1093,47 @@ version = "1.18.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
|
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ostd"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"acpi",
|
||||||
|
"align_ext",
|
||||||
|
"aml",
|
||||||
|
"array-init",
|
||||||
|
"aster-main",
|
||||||
|
"bit_field",
|
||||||
|
"bitflags 1.3.2",
|
||||||
|
"bitvec",
|
||||||
|
"buddy_system_allocator",
|
||||||
|
"cfg-if",
|
||||||
|
"gimli",
|
||||||
|
"iced-x86",
|
||||||
|
"id-alloc",
|
||||||
|
"inherit-methods-macro",
|
||||||
|
"int-to-c-enum",
|
||||||
|
"intrusive-collections",
|
||||||
|
"ktest",
|
||||||
|
"lazy_static",
|
||||||
|
"linux-boot-params",
|
||||||
|
"log",
|
||||||
|
"multiboot2",
|
||||||
|
"num",
|
||||||
|
"num-derive",
|
||||||
|
"num-traits",
|
||||||
|
"pod",
|
||||||
|
"rsdp",
|
||||||
|
"spin 0.9.8",
|
||||||
|
"static_assertions",
|
||||||
|
"tdx-guest",
|
||||||
|
"trapframe",
|
||||||
|
"unwinding",
|
||||||
|
"volatile",
|
||||||
|
"x86",
|
||||||
|
"x86_64",
|
||||||
|
"xarray",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owo-colors"
|
name = "owo-colors"
|
||||||
version = "3.5.0"
|
version = "3.5.0"
|
||||||
|
18
Cargo.toml
18
Cargo.toml
@ -1,15 +1,15 @@
|
|||||||
[workspace]
|
[workspace]
|
||||||
resolver = "2"
|
resolver = "2"
|
||||||
members = [
|
members = [
|
||||||
"framework/aster-frame",
|
"ostd",
|
||||||
"framework/libs/align_ext",
|
"ostd/libs/align_ext",
|
||||||
"framework/libs/aster-main",
|
"ostd/libs/aster-main",
|
||||||
"framework/libs/id-alloc",
|
"ostd/libs/id-alloc",
|
||||||
"framework/libs/linux-bzimage/builder",
|
"ostd/libs/linux-bzimage/builder",
|
||||||
"framework/libs/linux-bzimage/boot-params",
|
"ostd/libs/linux-bzimage/boot-params",
|
||||||
"framework/libs/linux-bzimage/setup",
|
"ostd/libs/linux-bzimage/setup",
|
||||||
"framework/libs/ktest",
|
"ostd/libs/ktest",
|
||||||
"framework/libs/ktest-proc-macro",
|
"ostd/libs/ktest-proc-macro",
|
||||||
"kernel",
|
"kernel",
|
||||||
"kernel/aster-nix",
|
"kernel/aster-nix",
|
||||||
"kernel/comps/block",
|
"kernel/comps/block",
|
||||||
|
22
Makefile
22
Makefile
@ -85,13 +85,13 @@ export
|
|||||||
# Basically, non-OSDK crates do not depend on Aster Frame and can be checked
|
# Basically, non-OSDK crates do not depend on Aster Frame and can be checked
|
||||||
# or tested without OSDK.
|
# or tested without OSDK.
|
||||||
NON_OSDK_CRATES := \
|
NON_OSDK_CRATES := \
|
||||||
framework/libs/align_ext \
|
ostd/libs/align_ext \
|
||||||
framework/libs/aster-main \
|
ostd/libs/aster-main \
|
||||||
framework/libs/id-alloc \
|
ostd/libs/id-alloc \
|
||||||
framework/libs/linux-bzimage/builder \
|
ostd/libs/linux-bzimage/builder \
|
||||||
framework/libs/linux-bzimage/boot-params \
|
ostd/libs/linux-bzimage/boot-params \
|
||||||
framework/libs/ktest \
|
ostd/libs/ktest \
|
||||||
framework/libs/ktest-proc-macro \
|
ostd/libs/ktest-proc-macro \
|
||||||
kernel/libs/cpio-decoder \
|
kernel/libs/cpio-decoder \
|
||||||
kernel/libs/int-to-c-enum \
|
kernel/libs/int-to-c-enum \
|
||||||
kernel/libs/int-to-c-enum/derive \
|
kernel/libs/int-to-c-enum/derive \
|
||||||
@ -101,11 +101,11 @@ NON_OSDK_CRATES := \
|
|||||||
kernel/libs/typeflags \
|
kernel/libs/typeflags \
|
||||||
kernel/libs/typeflags-util
|
kernel/libs/typeflags-util
|
||||||
|
|
||||||
# In contrast, OSDK crates depend on Aster Frame (or being aster-frame itself)
|
# In contrast, OSDK crates depend on OSTD (or being `ostd` itself)
|
||||||
# and need to be built or tested with OSDK.
|
# and need to be built or tested with OSDK.
|
||||||
OSDK_CRATES := \
|
OSDK_CRATES := \
|
||||||
framework/aster-frame \
|
ostd \
|
||||||
framework/libs/linux-bzimage/setup \
|
ostd/libs/linux-bzimage/setup \
|
||||||
kernel \
|
kernel \
|
||||||
kernel/aster-nix \
|
kernel/aster-nix \
|
||||||
kernel/comps/block \
|
kernel/comps/block \
|
||||||
@ -179,7 +179,7 @@ test:
|
|||||||
ktest: initramfs $(CARGO_OSDK)
|
ktest: initramfs $(CARGO_OSDK)
|
||||||
@# Exclude linux-bzimage-setup from ktest since it's hard to be unit tested
|
@# Exclude linux-bzimage-setup from ktest since it's hard to be unit tested
|
||||||
@for dir in $(OSDK_CRATES); do \
|
@for dir in $(OSDK_CRATES); do \
|
||||||
[ $$dir = "framework/libs/linux-bzimage/setup" ] && continue; \
|
[ $$dir = "ostd/libs/linux-bzimage/setup" ] && continue; \
|
||||||
(cd $$dir && cargo osdk test) || exit 1; \
|
(cd $$dir && cargo osdk test) || exit 1; \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -20,20 +20,20 @@ Asterinas Kernel implements Linux ABI in a safe and efficient way.
|
|||||||
This means it can seamlessly replace Linux,
|
This means it can seamlessly replace Linux,
|
||||||
offering enhanced safety and security.
|
offering enhanced safety and security.
|
||||||
|
|
||||||
#### [Part 2: Asterinas Framework](framework/)
|
#### [Part 2: Asterinas OSTD](ostd/)
|
||||||
|
|
||||||
The Framework lays down a minimalistic, powerful, and solid foundation
|
Asterinas OSTD lays down a minimalistic, powerful, and solid foundation
|
||||||
for OS development.
|
for OS development.
|
||||||
It's akin to Rust's `std` crate
|
It's akin to Rust's `std` crate
|
||||||
but crafted for the demands of _safe_ Rust OS development.
|
but crafted for the demands of _safe_ Rust OS development.
|
||||||
Asterinas Kernel is built on this very Framework.
|
Asterinas Kernel is built on this very OSTD.
|
||||||
|
|
||||||
#### [Part 3: Asterinas OSDK](osdk/guide/)
|
#### [Part 3: Asterinas OSDK](osdk/guide/)
|
||||||
|
|
||||||
The OSDK is a command-line tool
|
The OSDK is a command-line tool
|
||||||
that streamlines the workflow to
|
that streamlines the workflow to
|
||||||
create, build, test, and run Rust OS projects
|
create, build, test, and run Rust OS projects
|
||||||
that are built upon Asterinas Framework.
|
that are built upon Asterinas OSTD.
|
||||||
Developed specifically for OS developers,
|
Developed specifically for OS developers,
|
||||||
it extends Rust's Cargo tool to better suite their specific needs.
|
it extends Rust's Cargo tool to better suite their specific needs.
|
||||||
OSDK is instrumental in the development of Asterinas Kernel.
|
OSDK is instrumental in the development of Asterinas Kernel.
|
||||||
|
@ -11,10 +11,10 @@
|
|||||||
* [Linux Compatibility](kernel/linux-compatibility.md)
|
* [Linux Compatibility](kernel/linux-compatibility.md)
|
||||||
* [Roadmap](kernel/roadmap.md)
|
* [Roadmap](kernel/roadmap.md)
|
||||||
|
|
||||||
# Asterinas Framework
|
# Asterinas OSTD
|
||||||
|
|
||||||
* [An Overview of the Framework](framework/README.md)
|
* [An Overview of OSTD](ostd/README.md)
|
||||||
* [Example: Writing a Kernel in 100 Lines of Safe Rust](framework/a-100-line-kernel.md)
|
* [Example: Writing a Kernel in 100 Lines of Safe Rust](ostd/a-100-line-kernel.md)
|
||||||
* [Example: Writing a Driver in 100 Lines of Safe Rust]()
|
* [Example: Writing a Driver in 100 Lines of Safe Rust]()
|
||||||
* [Soundness Analysis]()
|
* [Soundness Analysis]()
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ make ktest
|
|||||||
To test an individual crate in kernel mode, enter the directory of the crate and invoke `cargo osdk test`.
|
To test an individual crate in kernel mode, enter the directory of the crate and invoke `cargo osdk test`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd asterinas/framework/aster-frame
|
cd asterinas/ostd
|
||||||
cargo osdk test
|
cargo osdk test
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ as [zero-cost abstractions](https://monomorph.is/posts/zero-cost-abstractions/).
|
|||||||
|
|
||||||
Fortunatelly, our efforts
|
Fortunatelly, our efforts
|
||||||
to design and implement an OS framework meeting these standards
|
to design and implement an OS framework meeting these standards
|
||||||
have borne fruit in the form of the [Asterinas Framework](../framework/).
|
have borne fruit in the form of the [Asterinas OSTD](../ostd/).
|
||||||
Using this framework as a foundation,
|
Using this framework as a foundation,
|
||||||
we have developed the Asterinas Kernel;
|
we have developed the Asterinas Kernel;
|
||||||
this framework also enables others to create their own framekernels,
|
this framework also enables others to create their own framekernels,
|
||||||
|
@ -77,11 +77,11 @@ and each test case is marked with `#[ktest]`.
|
|||||||
|
|
||||||
The `Cargo.toml` file is the Rust project manifest.
|
The `Cargo.toml` file is the Rust project manifest.
|
||||||
In addition to the contents of a normal Rust project,
|
In addition to the contents of a normal Rust project,
|
||||||
OSDK will add the dependencies of the Asterinas framework to the file.
|
OSDK will add the dependencies of the Asterinas OSTD to the file.
|
||||||
The dependency version may change over time.
|
The dependency version may change over time.
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[dependencies.aster_frame]
|
[dependencies.ostd]
|
||||||
git = "https://github.com/asterinas/asterinas"
|
git = "https://github.com/asterinas/asterinas"
|
||||||
branch = "main"
|
branch = "main"
|
||||||
|
|
||||||
@ -116,4 +116,4 @@ The default manifest of a kernel project:
|
|||||||
### `rust-toolchain.toml`
|
### `rust-toolchain.toml`
|
||||||
|
|
||||||
The Rust toolchain for the kernel.
|
The Rust toolchain for the kernel.
|
||||||
It aligns with the toolchain of the Asterinas framework.
|
It aligns with the toolchain of the Asterinas OSTD.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Asterinas Framework
|
# Asterinas OSTD
|
||||||
|
|
||||||
> Confucious remarked,
|
> Confucious remarked,
|
||||||
> "I could follow whatever my heart desired
|
> "I could follow whatever my heart desired
|
||||||
@ -7,7 +7,7 @@
|
|||||||
> 子曰:
|
> 子曰:
|
||||||
> "从心所欲,不逾矩。"
|
> "从心所欲,不逾矩。"
|
||||||
|
|
||||||
With Asterinas Framework,
|
With Asterinas OSTD,
|
||||||
you don't have to learn the dark art of unsafe Rust programming
|
you don't have to learn the dark art of unsafe Rust programming
|
||||||
and risk shooting yourself in the foot.
|
and risk shooting yourself in the foot.
|
||||||
You will be doing whatever your heart desired
|
You will be doing whatever your heart desired
|
||||||
@ -17,7 +17,7 @@ even if today marks your Day 1 as a Rust programmer.
|
|||||||
|
|
||||||
## APIs
|
## APIs
|
||||||
|
|
||||||
Asterinas Framework stands
|
Asterinas OSTD stands
|
||||||
as a powerful and solid foundation for safe kernel development,
|
as a powerful and solid foundation for safe kernel development,
|
||||||
providing high-level safe Rust APIs that are
|
providing high-level safe Rust APIs that are
|
||||||
|
|
||||||
@ -38,14 +38,14 @@ Most of these APIs fall into the following categories:
|
|||||||
To explore how these APIs come into play,
|
To explore how these APIs come into play,
|
||||||
see [the example of a 100-line kernel in safe Rust](a-100-line-kernel.md).
|
see [the example of a 100-line kernel in safe Rust](a-100-line-kernel.md).
|
||||||
|
|
||||||
The framework APIs have been extensively documented.
|
The OSTD APIs have been extensively documented.
|
||||||
You can access the comprehensive API documentation for each release by visiting the [API docs](https://asterinas.github.io/api-docs).
|
You can access the comprehensive API documentation for each release by visiting the [API docs](https://asterinas.github.io/api-docs).
|
||||||
Additionally, you can refer to the latest nightly version API documentation at [API docs nightly](https://asterinas.github.io/api-docs-nightly),
|
Additionally, you can refer to the latest nightly version API documentation at [API docs nightly](https://asterinas.github.io/api-docs-nightly),
|
||||||
which remains in sync with the latest changes in the main branch.
|
which remains in sync with the latest changes in the main branch.
|
||||||
|
|
||||||
## Four Requirements Satisfied
|
## Four Requirements Satisfied
|
||||||
|
|
||||||
In designing and implementing Asterinas Framework,
|
In designing and implementing OSTD,
|
||||||
we have risen to meet the challenge of
|
we have risen to meet the challenge of
|
||||||
fulfilling [the aforementioned four criteria as demanded by the framekernel architecture](../kernel/the-framekernel-architecture.md).
|
fulfilling [the aforementioned four criteria as demanded by the framekernel architecture](../kernel/the-framekernel-architecture.md).
|
||||||
|
|
||||||
@ -55,19 +55,19 @@ file systems,
|
|||||||
network protocols,
|
network protocols,
|
||||||
and device drivers (e.g., Virtio drivers)
|
and device drivers (e.g., Virtio drivers)
|
||||||
have been implemented in safe Rust
|
have been implemented in safe Rust
|
||||||
by leveraging the Framework.
|
by leveraging OSTD.
|
||||||
|
|
||||||
Adopting a minimalist philosophy,
|
Adopting a minimalist philosophy,
|
||||||
the Framework has a small codebase.
|
OSTD has a small codebase.
|
||||||
At its core lies the `aster-frame` crate,
|
At its core lies the `ostd` crate,
|
||||||
currently encompassing about 10K lines of code
|
currently encompassing about 10K lines of code
|
||||||
---a figure that is even smaller than those of many microkernels.
|
---a figure that is even smaller than those of many microkernels.
|
||||||
As the Framework evolves,
|
As OSTD evolves,
|
||||||
its codebase will expand,
|
its codebase will expand,
|
||||||
albeit at a relatively slow rate
|
albeit at a relatively slow rate
|
||||||
in comparison to the OS services layered atop it.
|
in comparison to the OS services layered atop it.
|
||||||
|
|
||||||
The Framework's efficiency is measurable
|
OSTD's efficiency is measurable
|
||||||
through the performance metrics of its APIs
|
through the performance metrics of its APIs
|
||||||
and the system calls of Asterinas Kernel.
|
and the system calls of Asterinas Kernel.
|
||||||
No intrinsic limitations have been identified within Rust
|
No intrinsic limitations have been identified within Rust
|
@ -1,7 +1,7 @@
|
|||||||
# Example: Writing a Kernel in About 100 Lines of Safe Rust
|
# Example: Writing a Kernel in About 100 Lines of Safe Rust
|
||||||
|
|
||||||
To give you a sense of
|
To give you a sense of
|
||||||
how Asterinas Framework enables writing kernels in safe Rust,
|
how Asterinas OSTD enables writing kernels in safe Rust,
|
||||||
we will show a new kernel in about 100 lines of safe Rust.
|
we will show a new kernel in about 100 lines of safe Rust.
|
||||||
|
|
||||||
Our new kernel will be able to run the following Hello World program.
|
Our new kernel will be able to run the following Hello World program.
|
||||||
@ -39,7 +39,7 @@ The user program above requires our kernel to support three main features:
|
|||||||
|
|
||||||
A sample implementation of the kernel in safe Rust is given below.
|
A sample implementation of the kernel in safe Rust is given below.
|
||||||
Comments are added
|
Comments are added
|
||||||
to highlight how the APIs of Asterinas Framework enable safe kernel development.
|
to highlight how the APIs of Asterinas OSTD enable safe kernel development.
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
#![no_std]
|
#![no_std]
|
||||||
@ -52,13 +52,13 @@ use core::str;
|
|||||||
use alloc::sync::Arc;
|
use alloc::sync::Arc;
|
||||||
use alloc::vec;
|
use alloc::vec;
|
||||||
|
|
||||||
use aster_frame::cpu::UserContext;
|
use ostd::cpu::UserContext;
|
||||||
use aster_frame::prelude::*;
|
use ostd::prelude::*;
|
||||||
use aster_frame::task::{Task, TaskOptions};
|
use ostd::task::{Task, TaskOptions};
|
||||||
use aster_frame::user::{ReturnReason, UserMode, UserSpace};
|
use ostd::user::{ReturnReason, UserMode, UserSpace};
|
||||||
use aster_frame::mm::{PageFlags, PAGE_SIZE, Vaddr, FrameAllocOptions, VmIo, VmMapOptions, VmSpace};
|
use ostd::mm::{PageFlags, PAGE_SIZE, Vaddr, FrameAllocOptions, VmIo, VmMapOptions, VmSpace};
|
||||||
|
|
||||||
/// The kernel's boot and initialization process is managed by Asterinas Framework.
|
/// The kernel's boot and initialization process is managed by Asterinas OSTD.
|
||||||
/// After the process is done, the kernel's execution environment
|
/// After the process is done, the kernel's execution environment
|
||||||
/// (e.g., stack, heap, tasks) will be ready for use and the entry function
|
/// (e.g., stack, heap, tasks) will be ready for use and the entry function
|
||||||
/// labeled as `#[aster_main]` will be called.
|
/// labeled as `#[aster_main]` will be called.
|
||||||
@ -130,9 +130,9 @@ fn create_user_task(user_space: Arc<UserSpace>) -> Arc<Task> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kernel tasks are managed by the Framework,
|
// Kernel tasks are managed by OSTD,
|
||||||
// while scheduling algorithms for them can be
|
// while scheduling algorithms for them can be
|
||||||
// determined by the users of the Framework.
|
// determined by the users of OSTD.
|
||||||
TaskOptions::new(user_task)
|
TaskOptions::new(user_task)
|
||||||
.user_space(Some(user_space))
|
.user_space(Some(user_space))
|
||||||
.data(0)
|
.data(0)
|
@ -1,29 +0,0 @@
|
|||||||
# Asterinas Framework
|
|
||||||
|
|
||||||
Asterinas Framework is a Rust OS framework that facilitates the development of and innovation in OS kernels written in Rust.
|
|
||||||
|
|
||||||
## An overview
|
|
||||||
|
|
||||||
Asterinas Framework provides a solid foundation for Rust developers to build their own OS kernels. While Asterinas Framework origins from Asterinas, the first ever framekernel, Asterinas Framework is well suited for building OS kernels of any architecture, be it a framekernel, a monolithic kernel, or a microkernel.
|
|
||||||
|
|
||||||
Asterinas Framework offers the following key values.
|
|
||||||
|
|
||||||
1. **Lowering the entry bar for OS innovation.** Building an OS from scratch is not easy. Not to mention a novel one. Before adding any novel or interesting feature, an OS developer must first have something runnable, which must include basic functionalities for managing CPU, memory, and interrupts. Asterinas Framework has laid this groundwork so that OS developers do not have to deal with the most low-level, error-prone, architecture-specific aspects of OS development themselves.
|
|
||||||
|
|
||||||
2. **Enhancing the memory safety of Rust OSes.** Asterinas Framework encapsulates low-level, machine-oriented unsafe Rust code into high-level, machine-agnostic safe APIs. These APIs are carefully designed and implemented to be sound and minimal, ensuring the memory safety of any safe Rust callers. Our experience in building Asterinas has shown that Asterinas Framework is powerful enough to allow a feature-rich, Linux-compatible kernel to be completely written in safe Rust, including its device drivers.
|
|
||||||
|
|
||||||
3. **Promoting code reuse across Rust OS projects.** Shipped as crates, Rust code can be reused across projects---except when they are OSes. A crate that implements a feature or driver for OS A can hardly be reused by OS B because the crate must be [`no_std`](https://docs.rust-embedded.org/book/intro/no-std.html#summary) and depend on the infrastructure APIs provided by OS A, which are obviously different from that provided by OS B. This incompatibility problem can be resolved by Asterinas Framework as it can serve as a common ground across different Rust OS projects, as long as they are built upon Asterinas Framework.
|
|
||||||
|
|
||||||
4. **Boost productivity with user-mode development.** Traditionally, developing a kernel feature involves countless rounds of coding, failing, and rebooting on bare-metal or virtual machines, which is a painfully slow process. Asterinas Framework accelerates the process by allowing high-level OS features like file systems and network stacks to be quickly tested in user mode, making the experience of OS development as smooth as that of application development. To support user-mode development, Asterinas Framework is implemented for the Linux platform, in addition to bare-mental or virtual machine environments.
|
|
||||||
|
|
||||||
## Framework APIs
|
|
||||||
|
|
||||||
TODO
|
|
||||||
|
|
||||||
## Implementation status
|
|
||||||
|
|
||||||
TODO
|
|
||||||
|
|
||||||
## Roadmap and plan
|
|
||||||
|
|
||||||
TODO
|
|
@ -4,8 +4,8 @@ version = "0.4.0"
|
|||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
id-alloc = { path = "../framework/libs/id-alloc" }
|
id-alloc = { path = "../ostd/libs/id-alloc" }
|
||||||
aster-frame = { path = "../framework/aster-frame" }
|
ostd = { path = "../ostd" }
|
||||||
aster-nix = { path = "aster-nix" }
|
aster-nix = { path = "aster-nix" }
|
||||||
component = { path = "libs/comp-sys/component" }
|
component = { path = "libs/comp-sys/component" }
|
||||||
|
|
||||||
@ -15,4 +15,4 @@ aster-time = { path = "comps/time" }
|
|||||||
aster-framebuffer = { path = "comps/framebuffer" }
|
aster-framebuffer = { path = "comps/framebuffer" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
intel_tdx = ["aster-frame/intel_tdx", "aster-nix/intel_tdx"]
|
intel_tdx = ["ostd/intel_tdx", "aster-nix/intel_tdx"]
|
||||||
|
@ -6,8 +6,8 @@ edition = "2021"
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
aster-frame = { path = "../../framework/aster-frame" }
|
ostd = { path = "../../ostd" }
|
||||||
align_ext = { path = "../../framework/libs/align_ext" }
|
align_ext = { path = "../../ostd/libs/align_ext" }
|
||||||
pod = { git = "https://github.com/asterinas/pod", rev = "d7dba56" }
|
pod = { git = "https://github.com/asterinas/pod", rev = "d7dba56" }
|
||||||
aster-input = { path = "../comps/input" }
|
aster-input = { path = "../comps/input" }
|
||||||
aster-block = { path = "../comps/block" }
|
aster-block = { path = "../comps/block" }
|
||||||
@ -21,7 +21,7 @@ typeflags = { path = "../libs/typeflags" }
|
|||||||
typeflags-util = { path = "../libs/typeflags-util" }
|
typeflags-util = { path = "../libs/typeflags-util" }
|
||||||
aster-rights-proc = { path = "../libs/aster-rights-proc" }
|
aster-rights-proc = { path = "../libs/aster-rights-proc" }
|
||||||
aster-util = { path = "../libs/aster-util" }
|
aster-util = { path = "../libs/aster-util" }
|
||||||
id-alloc = { path = "../../framework/libs/id-alloc" }
|
id-alloc = { path = "../../ostd/libs/id-alloc" }
|
||||||
int-to-c-enum = { path = "../libs/int-to-c-enum" }
|
int-to-c-enum = { path = "../libs/int-to-c-enum" }
|
||||||
cpio-decoder = { path = "../libs/cpio-decoder" }
|
cpio-decoder = { path = "../libs/cpio-decoder" }
|
||||||
ascii = { version = "1.1", default-features = false, features = ["alloc"] }
|
ascii = { version = "1.1", default-features = false, features = ["alloc"] }
|
||||||
@ -42,7 +42,7 @@ smoltcp = { version = "0.9.1", default-features = false, features = [
|
|||||||
"socket-raw",
|
"socket-raw",
|
||||||
"socket-dhcpv4",
|
"socket-dhcpv4",
|
||||||
] }
|
] }
|
||||||
ktest = { path = "../../framework/libs/ktest" }
|
ktest = { path = "../../ostd/libs/ktest" }
|
||||||
tdx-guest = { version = "0.1.0", optional = true }
|
tdx-guest = { version = "0.1.0", optional = true }
|
||||||
|
|
||||||
# parse elf file
|
# parse elf file
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::cpu::UserContext;
|
use ostd::cpu::UserContext;
|
||||||
|
|
||||||
use crate::cpu::LinuxAbi;
|
use crate::cpu::LinuxAbi;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::cpu::UserContext;
|
use ostd::cpu::UserContext;
|
||||||
|
|
||||||
use crate::process::signal::{sig_num::SigNum, SignalContext};
|
use crate::process::signal::{sig_num::SigNum, SignalContext};
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
pub use aster_frame::arch::console;
|
pub use ostd::arch::console;
|
||||||
use aster_frame::mm::VmReader;
|
use ostd::mm::VmReader;
|
||||||
use spin::Once;
|
use spin::Once;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
use alloc::format;
|
use alloc::format;
|
||||||
|
|
||||||
use aster_frame::trap::{disable_local, in_interrupt_context};
|
use ostd::trap::{disable_local, in_interrupt_context};
|
||||||
use ringbuf::{ring_buffer::RbBase, Rb, StaticRb};
|
use ringbuf::{ring_buffer::RbBase, Rb, StaticRb};
|
||||||
|
|
||||||
use super::termio::{KernelTermios, WinSize, CC_C_CHAR};
|
use super::termio::{KernelTermios, WinSize, CC_C_CHAR};
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
use aster_frame::early_print;
|
use ostd::early_print;
|
||||||
use spin::Once;
|
use spin::Once;
|
||||||
|
|
||||||
use self::{driver::TtyDriver, line_discipline::LineDiscipline};
|
use self::{driver::TtyDriver, line_discipline::LineDiscipline};
|
||||||
|
@ -188,17 +188,17 @@ impl AsRef<Error> for Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<aster_frame::Error> for Error {
|
impl From<ostd::Error> for Error {
|
||||||
fn from(frame_error: aster_frame::Error) -> Self {
|
fn from(frame_error: ostd::Error) -> Self {
|
||||||
match frame_error {
|
match frame_error {
|
||||||
aster_frame::Error::AccessDenied => Error::new(Errno::EFAULT),
|
ostd::Error::AccessDenied => Error::new(Errno::EFAULT),
|
||||||
aster_frame::Error::NoMemory => Error::new(Errno::ENOMEM),
|
ostd::Error::NoMemory => Error::new(Errno::ENOMEM),
|
||||||
aster_frame::Error::InvalidArgs => Error::new(Errno::EINVAL),
|
ostd::Error::InvalidArgs => Error::new(Errno::EINVAL),
|
||||||
aster_frame::Error::IoError => Error::new(Errno::EIO),
|
ostd::Error::IoError => Error::new(Errno::EIO),
|
||||||
aster_frame::Error::NotEnoughResources => Error::new(Errno::EBUSY),
|
ostd::Error::NotEnoughResources => Error::new(Errno::EBUSY),
|
||||||
aster_frame::Error::PageFault => Error::new(Errno::EFAULT),
|
ostd::Error::PageFault => Error::new(Errno::EFAULT),
|
||||||
aster_frame::Error::Overflow => Error::new(Errno::EOVERFLOW),
|
ostd::Error::Overflow => Error::new(Errno::EOVERFLOW),
|
||||||
aster_frame::Error::MapAlreadyMappedVaddr => Error::new(Errno::EINVAL),
|
ostd::Error::MapAlreadyMappedVaddr => Error::new(Errno::EINVAL),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -288,16 +288,16 @@ impl From<cpio_decoder::error::Error> for Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Error> for aster_frame::Error {
|
impl From<Error> for ostd::Error {
|
||||||
fn from(error: Error) -> Self {
|
fn from(error: Error) -> Self {
|
||||||
match error.errno {
|
match error.errno {
|
||||||
Errno::EACCES => aster_frame::Error::AccessDenied,
|
Errno::EACCES => ostd::Error::AccessDenied,
|
||||||
Errno::EIO => aster_frame::Error::IoError,
|
Errno::EIO => ostd::Error::IoError,
|
||||||
Errno::ENOMEM => aster_frame::Error::NoMemory,
|
Errno::ENOMEM => ostd::Error::NoMemory,
|
||||||
Errno::EFAULT => aster_frame::Error::PageFault,
|
Errno::EFAULT => ostd::Error::PageFault,
|
||||||
Errno::EINVAL => aster_frame::Error::InvalidArgs,
|
Errno::EINVAL => ostd::Error::InvalidArgs,
|
||||||
Errno::EBUSY => aster_frame::Error::NotEnoughResources,
|
Errno::EBUSY => ostd::Error::NotEnoughResources,
|
||||||
_ => aster_frame::Error::InvalidArgs,
|
_ => ostd::Error::InvalidArgs,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
use core::{fmt::Display, ops::Range};
|
use core::{fmt::Display, ops::Range};
|
||||||
|
|
||||||
use aster_frame::mm::VmIo;
|
|
||||||
use aster_rights::Full;
|
use aster_rights::Full;
|
||||||
|
use ostd::mm::VmIo;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
constants::{EXFAT_FILE_NAME_LEN, MAX_NAME_LENGTH},
|
constants::{EXFAT_FILE_NAME_LEN, MAX_NAME_LENGTH},
|
||||||
|
@ -6,10 +6,10 @@
|
|||||||
use core::{num::NonZeroUsize, ops::Range, sync::atomic::AtomicU64};
|
use core::{num::NonZeroUsize, ops::Range, sync::atomic::AtomicU64};
|
||||||
|
|
||||||
use aster_block::{bio::BioWaiter, id::BlockId, BlockDevice};
|
use aster_block::{bio::BioWaiter, id::BlockId, BlockDevice};
|
||||||
use aster_frame::mm::Frame;
|
|
||||||
pub(super) use aster_frame::mm::VmIo;
|
|
||||||
use hashbrown::HashMap;
|
use hashbrown::HashMap;
|
||||||
use lru::LruCache;
|
use lru::LruCache;
|
||||||
|
use ostd::mm::Frame;
|
||||||
|
pub(super) use ostd::mm::VmIo;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
bitmap::ExfatBitmap,
|
bitmap::ExfatBitmap,
|
||||||
|
@ -12,8 +12,8 @@ use aster_block::{
|
|||||||
id::{Bid, BlockId},
|
id::{Bid, BlockId},
|
||||||
BLOCK_SIZE,
|
BLOCK_SIZE,
|
||||||
};
|
};
|
||||||
use aster_frame::mm::{Frame, FrameAllocOptions, VmIo};
|
|
||||||
use aster_rights::Full;
|
use aster_rights::Full;
|
||||||
|
use ostd::mm::{Frame, FrameAllocOptions, VmIo};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
constants::*,
|
constants::*,
|
||||||
|
@ -21,7 +21,7 @@ mod test {
|
|||||||
bio::{BioEnqueueError, BioStatus, BioType, SubmittedBio},
|
bio::{BioEnqueueError, BioStatus, BioType, SubmittedBio},
|
||||||
BlockDevice,
|
BlockDevice,
|
||||||
};
|
};
|
||||||
use aster_frame::mm::{FrameAllocOptions, Segment, VmIo};
|
use ostd::mm::{FrameAllocOptions, Segment, VmIo};
|
||||||
use rand::{rngs::SmallRng, RngCore, SeedableRng};
|
use rand::{rngs::SmallRng, RngCore, SeedableRng};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::sync::RwMutexReadGuard;
|
use ostd::sync::RwMutexReadGuard;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
fs::{
|
fs::{
|
||||||
|
@ -11,11 +11,11 @@ pub(super) use aster_block::{
|
|||||||
id::Bid,
|
id::Bid,
|
||||||
BlockDevice, BLOCK_SIZE,
|
BlockDevice, BLOCK_SIZE,
|
||||||
};
|
};
|
||||||
pub(super) use aster_frame::{
|
pub(super) use aster_rights::Full;
|
||||||
|
pub(super) use ostd::{
|
||||||
mm::{Frame, FrameAllocOptions, Segment, VmIo},
|
mm::{Frame, FrameAllocOptions, Segment, VmIo},
|
||||||
sync::{RwMutex, RwMutexReadGuard, RwMutexWriteGuard},
|
sync::{RwMutex, RwMutexReadGuard, RwMutexWriteGuard},
|
||||||
};
|
};
|
||||||
pub(super) use aster_rights::Full;
|
|
||||||
pub(super) use static_assertions::const_assert;
|
pub(super) use static_assertions::const_assert;
|
||||||
|
|
||||||
pub(super) use super::utils::{Dirty, IsPowerOf};
|
pub(super) use super::utils::{Dirty, IsPowerOf};
|
||||||
|
@ -6,12 +6,12 @@ use core::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use aster_block::bio::BioWaiter;
|
use aster_block::bio::BioWaiter;
|
||||||
use aster_frame::{
|
use aster_rights::Full;
|
||||||
|
use aster_util::slot_vec::SlotVec;
|
||||||
|
use ostd::{
|
||||||
mm::{Frame, VmIo},
|
mm::{Frame, VmIo},
|
||||||
sync::RwMutexWriteGuard,
|
sync::RwMutexWriteGuard,
|
||||||
};
|
};
|
||||||
use aster_rights::Full;
|
|
||||||
use aster_util::slot_vec::SlotVec;
|
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -5,9 +5,9 @@
|
|||||||
use core::ops::Range;
|
use core::ops::Range;
|
||||||
|
|
||||||
use aster_block::bio::{BioStatus, BioWaiter};
|
use aster_block::bio::{BioStatus, BioWaiter};
|
||||||
use aster_frame::mm::{Frame, FrameAllocOptions};
|
|
||||||
use aster_rights::Full;
|
use aster_rights::Full;
|
||||||
use lru::LruCache;
|
use lru::LruCache;
|
||||||
|
use ostd::mm::{Frame, FrameAllocOptions};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
prelude::*,
|
prelude::*,
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#![feature(trait_upcasting)]
|
#![feature(trait_upcasting)]
|
||||||
#![register_tool(component_access_control)]
|
#![register_tool(component_access_control)]
|
||||||
|
|
||||||
use aster_frame::{
|
use ostd::{
|
||||||
arch::qemu::{exit_qemu, QemuExitCode},
|
arch::qemu::{exit_qemu, QemuExitCode},
|
||||||
boot,
|
boot,
|
||||||
};
|
};
|
||||||
@ -91,7 +91,7 @@ fn init_thread() {
|
|||||||
thread::work_queue::init();
|
thread::work_queue::init();
|
||||||
// FIXME: Remove this if we move the step of mounting
|
// FIXME: Remove this if we move the step of mounting
|
||||||
// the filesystems to be done within the init process.
|
// the filesystems to be done within the init process.
|
||||||
aster_frame::trap::enable_local();
|
ostd::trap::enable_local();
|
||||||
net::lazy_init();
|
net::lazy_init();
|
||||||
fs::lazy_init();
|
fs::lazy_init();
|
||||||
// driver::pci::virtio::block::block_device_test();
|
// driver::pci::virtio::block::block_device_test();
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
use alloc::collections::btree_map::Entry;
|
use alloc::collections::btree_map::Entry;
|
||||||
use core::sync::atomic::{AtomicU64, Ordering};
|
use core::sync::atomic::{AtomicU64, Ordering};
|
||||||
|
|
||||||
use aster_frame::sync::WaitQueue;
|
|
||||||
use keyable_arc::KeyableWeak;
|
use keyable_arc::KeyableWeak;
|
||||||
|
use ostd::sync::WaitQueue;
|
||||||
use smoltcp::{
|
use smoltcp::{
|
||||||
iface::{SocketHandle, SocketSet},
|
iface::{SocketHandle, SocketSet},
|
||||||
phy::Device,
|
phy::Device,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::sync::WaitQueue;
|
use ostd::sync::WaitQueue;
|
||||||
use smoltcp::iface::SocketSet;
|
use smoltcp::iface::SocketSet;
|
||||||
|
|
||||||
use self::common::IfaceCommon;
|
use self::common::IfaceCommon;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::arch::timer::Jiffies;
|
use ostd::arch::timer::Jiffies;
|
||||||
|
|
||||||
pub(super) fn get_network_timestamp() -> smoltcp::time::Instant {
|
pub(super) fn get_network_timestamp() -> smoltcp::time::Instant {
|
||||||
let millis = Jiffies::elapsed().as_duration().as_millis();
|
let millis = Jiffies::elapsed().as_duration().as_millis();
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use core::time::Duration;
|
use core::time::Duration;
|
||||||
|
|
||||||
use aster_frame::{arch::timer::Jiffies, task::Priority};
|
use ostd::{arch::timer::Jiffies, task::Priority};
|
||||||
|
|
||||||
use super::Iface;
|
use super::Iface;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -13,13 +13,13 @@ pub(crate) use alloc::{
|
|||||||
};
|
};
|
||||||
pub(crate) use core::{any::Any, ffi::CStr, fmt::Debug};
|
pub(crate) use core::{any::Any, ffi::CStr, fmt::Debug};
|
||||||
|
|
||||||
pub(crate) use aster_frame::{
|
|
||||||
mm::{Vaddr, PAGE_SIZE},
|
|
||||||
sync::{Mutex, MutexGuard, RwLock, RwMutex, SpinLock, SpinLockGuard},
|
|
||||||
};
|
|
||||||
pub(crate) use bitflags::bitflags;
|
pub(crate) use bitflags::bitflags;
|
||||||
pub(crate) use int_to_c_enum::TryFromInt;
|
pub(crate) use int_to_c_enum::TryFromInt;
|
||||||
pub(crate) use log::{debug, error, info, log_enabled, trace, warn};
|
pub(crate) use log::{debug, error, info, log_enabled, trace, warn};
|
||||||
|
pub(crate) use ostd::{
|
||||||
|
mm::{Vaddr, PAGE_SIZE},
|
||||||
|
sync::{Mutex, MutexGuard, RwLock, RwMutex, SpinLock, SpinLockGuard},
|
||||||
|
};
|
||||||
pub(crate) use pod::Pod;
|
pub(crate) use pod::Pod;
|
||||||
|
|
||||||
/// return current process
|
/// return current process
|
||||||
|
@ -4,12 +4,12 @@
|
|||||||
|
|
||||||
use core::sync::atomic::Ordering;
|
use core::sync::atomic::Ordering;
|
||||||
|
|
||||||
use aster_frame::{
|
use aster_rights::Full;
|
||||||
|
use ostd::{
|
||||||
cpu::UserContext,
|
cpu::UserContext,
|
||||||
mm::VmIo,
|
mm::VmIo,
|
||||||
user::{UserContextApi, UserSpace},
|
user::{UserContextApi, UserSpace},
|
||||||
};
|
};
|
||||||
use aster_rights::Full;
|
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
credentials,
|
credentials,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::sync::{RwLockReadGuard, RwLockWriteGuard};
|
use ostd::sync::{RwLockReadGuard, RwLockWriteGuard};
|
||||||
|
|
||||||
use super::{group::AtomicGid, user::AtomicUid, Gid, Uid};
|
use super::{group::AtomicGid, user::AtomicUid, Gid, Uid};
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
use aster_frame::sync::{RwLockReadGuard, RwLockWriteGuard};
|
|
||||||
use aster_rights::{Dup, Read, TRights, Write};
|
use aster_rights::{Dup, Read, TRights, Write};
|
||||||
use aster_rights_proc::require;
|
use aster_rights_proc::require;
|
||||||
|
use ostd::sync::{RwLockReadGuard, RwLockWriteGuard};
|
||||||
|
|
||||||
use super::{capabilities::CapSet, credentials_::Credentials_, Credentials, Gid, Uid};
|
use super::{capabilities::CapSet, credentials_::Credentials_, Credentials, Gid, Uid};
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
use aster_frame::user::UserSpace;
|
use ostd::user::UserSpace;
|
||||||
|
|
||||||
use super::PosixThread;
|
use super::PosixThread;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
use core::sync::atomic::{AtomicBool, Ordering};
|
use core::sync::atomic::{AtomicBool, Ordering};
|
||||||
|
|
||||||
use aster_frame::cpu::num_cpus;
|
use ostd::cpu::num_cpus;
|
||||||
use spin::Once;
|
use spin::Once;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::{
|
use ostd::{
|
||||||
cpu::UserContext,
|
cpu::UserContext,
|
||||||
user::{UserContextApi, UserSpace},
|
user::{UserContextApi, UserSpace},
|
||||||
};
|
};
|
||||||
|
@ -7,14 +7,14 @@ use alloc::{
|
|||||||
};
|
};
|
||||||
use core::time::Duration;
|
use core::time::Duration;
|
||||||
|
|
||||||
use aster_frame::{
|
use id_alloc::IdAlloc;
|
||||||
|
use ostd::{
|
||||||
arch::{
|
arch::{
|
||||||
timer::{self, TIMER_FREQ},
|
timer::{self, TIMER_FREQ},
|
||||||
x86::trap::is_kernel_interrupted,
|
x86::trap::is_kernel_interrupted,
|
||||||
},
|
},
|
||||||
sync::Mutex,
|
sync::Mutex,
|
||||||
};
|
};
|
||||||
use id_alloc::IdAlloc;
|
|
||||||
|
|
||||||
use super::Process;
|
use super::Process;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -19,8 +19,8 @@ use core::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use align_ext::AlignExt;
|
use align_ext::AlignExt;
|
||||||
use aster_frame::mm::{VmIo, MAX_USERSPACE_VADDR};
|
|
||||||
use aster_rights::{Full, Rights};
|
use aster_rights::{Full, Rights};
|
||||||
|
use ostd::mm::{VmIo, MAX_USERSPACE_VADDR};
|
||||||
|
|
||||||
use self::aux_vec::{AuxKey, AuxVec};
|
use self::aux_vec::{AuxKey, AuxVec};
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
//! When create a process from elf file, we will use the elf_load_info to construct the VmSpace
|
//! When create a process from elf file, we will use the elf_load_info to construct the VmSpace
|
||||||
|
|
||||||
use align_ext::AlignExt;
|
use align_ext::AlignExt;
|
||||||
use aster_frame::mm::VmIo;
|
|
||||||
use aster_rights::{Full, Rights};
|
use aster_rights::{Full, Rights};
|
||||||
|
use ostd::mm::VmIo;
|
||||||
use xmas_elf::program::{self, ProgramHeader64};
|
use xmas_elf::program::{self, ProgramHeader64};
|
||||||
|
|
||||||
use super::elf_file::Elf;
|
use super::elf_file::Elf;
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
use core::mem::{self, size_of};
|
use core::mem::{self, size_of};
|
||||||
|
|
||||||
use aster_frame::cpu::GeneralRegs;
|
|
||||||
use aster_util::{read_union_fields, union_read_ptr::UnionReadPtr};
|
use aster_util::{read_union_fields, union_read_ptr::UnionReadPtr};
|
||||||
|
use ostd::cpu::GeneralRegs;
|
||||||
|
|
||||||
use super::sig_num::SigNum;
|
use super::sig_num::SigNum;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -16,9 +16,9 @@ pub mod signals;
|
|||||||
use core::{mem, sync::atomic::Ordering};
|
use core::{mem, sync::atomic::Ordering};
|
||||||
|
|
||||||
use align_ext::AlignExt;
|
use align_ext::AlignExt;
|
||||||
use aster_frame::{cpu::UserContext, user::UserContextApi};
|
|
||||||
use c_types::{siginfo_t, ucontext_t};
|
use c_types::{siginfo_t, ucontext_t};
|
||||||
pub use events::{SigEvents, SigEventsFilter};
|
pub use events::{SigEvents, SigEventsFilter};
|
||||||
|
use ostd::{cpu::UserContext, user::UserContextApi};
|
||||||
pub use pauser::Pauser;
|
pub use pauser::Pauser;
|
||||||
pub use poll::{Pollee, Poller};
|
pub use poll::{Pollee, Poller};
|
||||||
use sig_action::{SigAction, SigActionFlags, SigDefaultAction};
|
use sig_action::{SigAction, SigActionFlags, SigDefaultAction};
|
||||||
|
@ -7,7 +7,7 @@ use core::{
|
|||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
use aster_frame::sync::WaitQueue;
|
use ostd::sync::WaitQueue;
|
||||||
|
|
||||||
use super::{sig_mask::SigMask, SigEvents, SigEventsFilter};
|
use super::{sig_mask::SigMask, SigEvents, SigEventsFilter};
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -24,7 +24,7 @@ use crate::{
|
|||||||
/// into one. Both putting the current thread to sleep and waking it up can be done through the
|
/// into one. Both putting the current thread to sleep and waking it up can be done through the
|
||||||
/// same `Pauser` object, using its `pause`- and `resume`-family methods.
|
/// same `Pauser` object, using its `pause`- and `resume`-family methods.
|
||||||
///
|
///
|
||||||
/// [`Waiter`]: aster_frame::sync::Waiter
|
/// [`Waiter`]: ostd::sync::Waiter
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
///
|
///
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::cpu::{
|
use ostd::cpu::{
|
||||||
CpuException, CpuExceptionInfo, ALIGNMENT_CHECK, BOUND_RANGE_EXCEEDED, DIVIDE_BY_ZERO,
|
CpuException, CpuExceptionInfo, ALIGNMENT_CHECK, BOUND_RANGE_EXCEEDED, DIVIDE_BY_ZERO,
|
||||||
GENERAL_PROTECTION_FAULT, INVALID_OPCODE, PAGE_FAULT, SIMD_FLOATING_POINT_EXCEPTION,
|
GENERAL_PROTECTION_FAULT, INVALID_OPCODE, PAGE_FAULT, SIMD_FLOATING_POINT_EXCEPTION,
|
||||||
X87_FLOATING_POINT_EXCEPTION,
|
X87_FLOATING_POINT_EXCEPTION,
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
use alloc::sync::Arc;
|
use alloc::sync::Arc;
|
||||||
use core::time::Duration;
|
use core::time::Duration;
|
||||||
|
|
||||||
use aster_frame::sync::{MutexGuard, SpinLock, WaitQueue};
|
use ostd::sync::{MutexGuard, SpinLock, WaitQueue};
|
||||||
|
|
||||||
use crate::time::wait::WaitTimeout;
|
use crate::time::wait::WaitTimeout;
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ impl<Guard> LockErr<Guard> {
|
|||||||
///
|
///
|
||||||
/// ```rust
|
/// ```rust
|
||||||
/// use alloc::sync::Arc;
|
/// use alloc::sync::Arc;
|
||||||
/// use aster_frame::sync::Mutex;
|
/// use ostd::sync::Mutex;
|
||||||
/// use crate::{process::sync::Condvar, thread::{kernel_thread::KernelThreadExt, Thread}};
|
/// use crate::{process::sync::Condvar, thread::{kernel_thread::KernelThreadExt, Thread}};
|
||||||
///
|
///
|
||||||
/// // Initializing a shared condition between threads
|
/// // Initializing a shared condition between threads
|
||||||
@ -264,7 +264,7 @@ impl Condvar {
|
|||||||
|
|
||||||
#[cfg(ktest)]
|
#[cfg(ktest)]
|
||||||
mod test {
|
mod test {
|
||||||
use aster_frame::sync::Mutex;
|
use ostd::sync::Mutex;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::thread::{
|
use crate::thread::{
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::task::{set_scheduler, Scheduler, Task, TaskAdapter};
|
|
||||||
use intrusive_collections::LinkedList;
|
use intrusive_collections::LinkedList;
|
||||||
|
use ostd::task::{set_scheduler, Scheduler, Task, TaskAdapter};
|
||||||
|
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::cpu::UserContext;
|
use ostd::cpu::UserContext;
|
||||||
|
|
||||||
use super::SyscallReturn;
|
use super::SyscallReturn;
|
||||||
use crate::{cpu::LinuxAbi, prelude::*};
|
use crate::{cpu::LinuxAbi, prelude::*};
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::cpu::UserContext;
|
use ostd::cpu::UserContext;
|
||||||
|
|
||||||
use super::SyscallReturn;
|
use super::SyscallReturn;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::{cpu::UserContext, user::UserContextApi};
|
|
||||||
use aster_rights::WriteOp;
|
use aster_rights::WriteOp;
|
||||||
|
use ostd::{cpu::UserContext, user::UserContextApi};
|
||||||
|
|
||||||
use super::{constants::*, SyscallReturn};
|
use super::{constants::*, SyscallReturn};
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#![allow(unused_variables)]
|
#![allow(unused_variables)]
|
||||||
|
|
||||||
use aster_frame::cpu::UserContext;
|
use ostd::cpu::UserContext;
|
||||||
|
|
||||||
use super::SyscallReturn;
|
use super::SyscallReturn;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
//! Read the Cpu context content then dispatch syscall to corrsponding handler
|
//! Read the Cpu context content then dispatch syscall to corrsponding handler
|
||||||
//! The each sub module contains functions that handle real syscall logic.
|
//! The each sub module contains functions that handle real syscall logic.
|
||||||
use aster_frame::cpu::UserContext;
|
|
||||||
pub use clock_gettime::ClockId;
|
pub use clock_gettime::ClockId;
|
||||||
|
use ostd::cpu::UserContext;
|
||||||
|
|
||||||
use crate::{cpu::LinuxAbi, prelude::*};
|
use crate::{cpu::LinuxAbi, prelude::*};
|
||||||
|
|
||||||
@ -160,7 +160,7 @@ macro_rules! dispatch_fn_inner {
|
|||||||
$crate::syscall::syscall_handler!($cnt, $handler, $args, &$context)
|
$crate::syscall::syscall_handler!($cnt, $handler, $args, &$context)
|
||||||
};
|
};
|
||||||
( $args: ident, $context: ident, $handler: ident ( args[ .. $cnt: tt ] , &mut context ) ) => {
|
( $args: ident, $context: ident, $handler: ident ( args[ .. $cnt: tt ] , &mut context ) ) => {
|
||||||
// `$context` is already of type `&mut aster_frame::cpu::UserContext`,
|
// `$context` is already of type `&mut ostd::cpu::UserContext`,
|
||||||
// so no need to take `&mut` again
|
// so no need to take `&mut` again
|
||||||
$crate::syscall::syscall_handler!($cnt, $handler, $args, $context)
|
$crate::syscall::syscall_handler!($cnt, $handler, $args, $context)
|
||||||
};
|
};
|
||||||
@ -178,7 +178,7 @@ macro_rules! impl_syscall_nums_and_dispatch_fn {
|
|||||||
pub fn syscall_dispatch(
|
pub fn syscall_dispatch(
|
||||||
syscall_number: u64,
|
syscall_number: u64,
|
||||||
args: [u64; 6],
|
args: [u64; 6],
|
||||||
context: &mut aster_frame::cpu::UserContext,
|
context: &mut ostd::cpu::UserContext,
|
||||||
) -> $crate::prelude::Result<$crate::syscall::SyscallReturn> {
|
) -> $crate::prelude::Result<$crate::syscall::SyscallReturn> {
|
||||||
match syscall_number {
|
match syscall_number {
|
||||||
$(
|
$(
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#![allow(unused_variables)]
|
#![allow(unused_variables)]
|
||||||
|
|
||||||
use aster_frame::mm::VmIo;
|
use ostd::mm::VmIo;
|
||||||
|
|
||||||
use super::SyscallReturn;
|
use super::SyscallReturn;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::{cpu::UserContext, user::UserContextApi};
|
use ostd::{cpu::UserContext, user::UserContextApi};
|
||||||
|
|
||||||
use super::SyscallReturn;
|
use super::SyscallReturn;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -8,8 +8,8 @@ use core::{
|
|||||||
sync::atomic::{AtomicBool, Ordering},
|
sync::atomic::{AtomicBool, Ordering},
|
||||||
};
|
};
|
||||||
|
|
||||||
use aster_frame::{cpu_local, sync::SpinLock, trap::SoftIrqLine, CpuLocal};
|
|
||||||
use intrusive_collections::{intrusive_adapter, LinkedList, LinkedListAtomicLink};
|
use intrusive_collections::{intrusive_adapter, LinkedList, LinkedListAtomicLink};
|
||||||
|
use ostd::{cpu_local, sync::SpinLock, trap::SoftIrqLine, CpuLocal};
|
||||||
|
|
||||||
use crate::softirq_id::{TASKLESS_SOFTIRQ_ID, TASKLESS_URGENT_SOFTIRQ_ID};
|
use crate::softirq_id::{TASKLESS_SOFTIRQ_ID, TASKLESS_URGENT_SOFTIRQ_ID};
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ use crate::softirq_id::{TASKLESS_SOFTIRQ_ID, TASKLESS_URGENT_SOFTIRQ_ID};
|
|||||||
///
|
///
|
||||||
/// Users can create a `Taskless` and schedule it at any place.
|
/// Users can create a `Taskless` and schedule it at any place.
|
||||||
/// ```rust
|
/// ```rust
|
||||||
/// #use aster_frame::softirq::Taskless;
|
/// #use ostd::softirq::Taskless;
|
||||||
///
|
///
|
||||||
/// #fn my_func() {}
|
/// #fn my_func() {}
|
||||||
///
|
///
|
||||||
@ -189,7 +189,7 @@ fn taskless_softirq_handler(
|
|||||||
mod test {
|
mod test {
|
||||||
use core::sync::atomic::AtomicUsize;
|
use core::sync::atomic::AtomicUsize;
|
||||||
|
|
||||||
use aster_frame::trap::enable_local;
|
use ostd::trap::enable_local;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#![allow(unused_variables)]
|
#![allow(unused_variables)]
|
||||||
|
|
||||||
use aster_frame::cpu::*;
|
use ostd::cpu::*;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
prelude::*, process::signal::signals::fault::FaultSignal,
|
prelude::*, process::signal::signals::fault::FaultSignal,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::{
|
use ostd::{
|
||||||
cpu::CpuSet,
|
cpu::CpuSet,
|
||||||
task::{Priority, TaskOptions},
|
task::{Priority, TaskOptions},
|
||||||
};
|
};
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
use core::sync::atomic::{AtomicU32, Ordering};
|
use core::sync::atomic::{AtomicU32, Ordering};
|
||||||
|
|
||||||
use aster_frame::task::Task;
|
use ostd::task::Task;
|
||||||
|
|
||||||
use self::status::{AtomicThreadStatus, ThreadStatus};
|
use self::status::{AtomicThreadStatus, ThreadStatus};
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::{
|
use ostd::{
|
||||||
task::{preempt, Task, TaskOptions},
|
task::{preempt, Task, TaskOptions},
|
||||||
user::{ReturnReason, UserContextApi, UserMode, UserSpace},
|
user::{ReturnReason, UserContextApi, UserMode, UserSpace},
|
||||||
};
|
};
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
use aster_frame::cpu::CpuSet;
|
use ostd::cpu::CpuSet;
|
||||||
use spin::Once;
|
use spin::Once;
|
||||||
use work_item::WorkItem;
|
use work_item::WorkItem;
|
||||||
use worker_pool::WorkerPool;
|
use worker_pool::WorkerPool;
|
||||||
@ -65,7 +65,7 @@ static WORKQUEUE_GLOBAL_HIGH_PRI: Once<Arc<WorkQueue>> = Once::new();
|
|||||||
/// Certainly, users can also create a dedicated WorkQueue and WorkerPool.
|
/// Certainly, users can also create a dedicated WorkQueue and WorkerPool.
|
||||||
///
|
///
|
||||||
/// ```rust
|
/// ```rust
|
||||||
/// use aster_frame::cpu::CpuSet;
|
/// use ostd::cpu::CpuSet;
|
||||||
/// use crate::thread::work_queue::{WorkQueue, WorkerPool, WorkItem};
|
/// use crate::thread::work_queue::{WorkQueue, WorkerPool, WorkItem};
|
||||||
///
|
///
|
||||||
/// fn deferred_task(){
|
/// fn deferred_task(){
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
use core::sync::atomic::{AtomicBool, Ordering};
|
use core::sync::atomic::{AtomicBool, Ordering};
|
||||||
|
|
||||||
use aster_frame::cpu::CpuSet;
|
use ostd::cpu::CpuSet;
|
||||||
|
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
use aster_frame::{cpu::CpuSet, task::Priority};
|
use ostd::{cpu::CpuSet, task::Priority};
|
||||||
|
|
||||||
use super::worker_pool::WorkerPool;
|
use super::worker_pool::WorkerPool;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -7,7 +7,7 @@ use core::{
|
|||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
use aster_frame::{
|
use ostd::{
|
||||||
cpu::CpuSet,
|
cpu::CpuSet,
|
||||||
sync::WaitQueue,
|
sync::WaitQueue,
|
||||||
task::{add_task, Priority},
|
task::{add_task, Priority},
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
use alloc::sync::Arc;
|
use alloc::sync::Arc;
|
||||||
use core::time::Duration;
|
use core::time::Duration;
|
||||||
|
|
||||||
use aster_frame::sync::SpinLock;
|
use ostd::sync::SpinLock;
|
||||||
|
|
||||||
use crate::time::Clock;
|
use crate::time::Clock;
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
use alloc::sync::Arc;
|
use alloc::sync::Arc;
|
||||||
use core::time::Duration;
|
use core::time::Duration;
|
||||||
|
|
||||||
use aster_frame::{arch::timer::Jiffies, cpu_local, sync::SpinLock, CpuLocal};
|
|
||||||
use aster_time::read_monotonic_time;
|
use aster_time::read_monotonic_time;
|
||||||
|
use ostd::{arch::timer::Jiffies, cpu_local, sync::SpinLock, CpuLocal};
|
||||||
use paste::paste;
|
use paste::paste;
|
||||||
use spin::Once;
|
use spin::Once;
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
use core::time::Duration;
|
use core::time::Duration;
|
||||||
|
|
||||||
use aster_frame::arch::timer::TIMER_FREQ;
|
|
||||||
use aster_time::NANOS_PER_SECOND;
|
use aster_time::NANOS_PER_SECOND;
|
||||||
|
use ostd::arch::timer::TIMER_FREQ;
|
||||||
|
|
||||||
pub mod timer;
|
pub mod timer;
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ use core::{
|
|||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
use aster_frame::sync::SpinLock;
|
use ostd::sync::SpinLock;
|
||||||
|
|
||||||
use super::Clock;
|
use super::Clock;
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use alloc::{boxed::Box, vec::Vec};
|
use alloc::{boxed::Box, vec::Vec};
|
||||||
|
|
||||||
use aster_frame::{arch::timer, sync::RwLock, trap::SoftIrqLine};
|
use ostd::{arch::timer, sync::RwLock, trap::SoftIrqLine};
|
||||||
|
|
||||||
use crate::softirq_id::TIMER_SOFTIRQ_ID;
|
use crate::softirq_id::TIMER_SOFTIRQ_ID;
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ impl SystemTime {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// convert aster_frame::time::Time to System time
|
/// convert ostd::time::Time to System time
|
||||||
fn convert_system_time(system_time: aster_time::SystemTime) -> Result<SystemTime> {
|
fn convert_system_time(system_time: aster_time::SystemTime) -> Result<SystemTime> {
|
||||||
let month = match Month::try_from(system_time.month) {
|
let month = match Month::try_from(system_time.month) {
|
||||||
Ok(month) => month,
|
Ok(month) => month,
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use core::time::Duration;
|
use core::time::Duration;
|
||||||
|
|
||||||
use aster_frame::sync::{WaitQueue, Waiter};
|
use ostd::sync::{WaitQueue, Waiter};
|
||||||
|
|
||||||
use super::{clocks::JIFFIES_TIMER_MANAGER, timer::Timeout};
|
use super::{clocks::JIFFIES_TIMER_MANAGER, timer::Timeout};
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
use core::mem;
|
use core::mem;
|
||||||
|
|
||||||
use aster_frame::mm::VmIo;
|
|
||||||
use aster_rights::Full;
|
use aster_rights::Full;
|
||||||
|
use ostd::mm::VmIo;
|
||||||
|
|
||||||
use crate::{prelude::*, vm::vmar::Vmar};
|
use crate::{prelude::*, vm::vmar::Vmar};
|
||||||
mod iovec;
|
mod iovec;
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
use core::time::Duration;
|
use core::time::Duration;
|
||||||
|
|
||||||
use aster_frame::mm::VmIo;
|
|
||||||
use aster_rights::Full;
|
use aster_rights::Full;
|
||||||
|
use ostd::mm::VmIo;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
net::socket::{ip::stream::CongestionControl, LingerOption},
|
net::socket::{ip::stream::CongestionControl, LingerOption},
|
||||||
|
@ -17,13 +17,13 @@
|
|||||||
use alloc::{boxed::Box, sync::Arc};
|
use alloc::{boxed::Box, sync::Arc};
|
||||||
use core::{mem::ManuallyDrop, time::Duration};
|
use core::{mem::ManuallyDrop, time::Duration};
|
||||||
|
|
||||||
use aster_frame::{
|
|
||||||
mm::{Frame, VmIo, PAGE_SIZE},
|
|
||||||
sync::SpinLock,
|
|
||||||
};
|
|
||||||
use aster_rights::Rights;
|
use aster_rights::Rights;
|
||||||
use aster_time::{read_monotonic_time, Instant};
|
use aster_time::{read_monotonic_time, Instant};
|
||||||
use aster_util::coeff::Coeff;
|
use aster_util::coeff::Coeff;
|
||||||
|
use ostd::{
|
||||||
|
mm::{Frame, VmIo, PAGE_SIZE},
|
||||||
|
sync::SpinLock,
|
||||||
|
};
|
||||||
use pod::Pod;
|
use pod::Pod;
|
||||||
use spin::Once;
|
use spin::Once;
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::mm::PageFlags;
|
|
||||||
use aster_rights::Rights;
|
use aster_rights::Rights;
|
||||||
use bitflags::bitflags;
|
use bitflags::bitflags;
|
||||||
|
use ostd::mm::PageFlags;
|
||||||
|
|
||||||
bitflags! {
|
bitflags! {
|
||||||
/// The memory access permissions of memory mappings.
|
/// The memory access permissions of memory mappings.
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
use core::ops::Range;
|
use core::ops::Range;
|
||||||
|
|
||||||
use aster_frame::mm::VmIo;
|
|
||||||
use aster_rights::Rights;
|
use aster_rights::Rights;
|
||||||
|
use ostd::mm::VmIo;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
options::VmarChildOptions, vm_mapping::VmarMapOptions, VmPerms, Vmar, VmarRightsOp, Vmar_,
|
options::VmarChildOptions, vm_mapping::VmarMapOptions, VmPerms, Vmar, VmarRightsOp, Vmar_,
|
||||||
@ -159,13 +159,13 @@ impl Vmar<Rights> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl VmIo for Vmar<Rights> {
|
impl VmIo for Vmar<Rights> {
|
||||||
fn read_bytes(&self, offset: usize, buf: &mut [u8]) -> aster_frame::Result<()> {
|
fn read_bytes(&self, offset: usize, buf: &mut [u8]) -> ostd::Result<()> {
|
||||||
self.check_rights(Rights::READ)?;
|
self.check_rights(Rights::READ)?;
|
||||||
self.0.read(offset, buf)?;
|
self.0.read(offset, buf)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_bytes(&self, offset: usize, buf: &[u8]) -> aster_frame::Result<()> {
|
fn write_bytes(&self, offset: usize, buf: &[u8]) -> ostd::Result<()> {
|
||||||
self.check_rights(Rights::WRITE)?;
|
self.check_rights(Rights::WRITE)?;
|
||||||
self.0.write(offset, buf)?;
|
self.0.write(offset, buf)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -13,8 +13,8 @@ pub mod vm_mapping;
|
|||||||
use core::{cmp::min, ops::Range};
|
use core::{cmp::min, ops::Range};
|
||||||
|
|
||||||
use align_ext::AlignExt;
|
use align_ext::AlignExt;
|
||||||
use aster_frame::mm::{VmSpace, MAX_USERSPACE_VADDR};
|
|
||||||
use aster_rights::Rights;
|
use aster_rights::Rights;
|
||||||
|
use ostd::mm::{VmSpace, MAX_USERSPACE_VADDR};
|
||||||
|
|
||||||
use self::{
|
use self::{
|
||||||
interval::{Interval, IntervalSet},
|
interval::{Interval, IntervalSet},
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
//! Options for allocating child VMARs.
|
//! Options for allocating child VMARs.
|
||||||
|
|
||||||
use aster_frame::{mm::PAGE_SIZE, Error, Result};
|
use ostd::{mm::PAGE_SIZE, Error, Result};
|
||||||
|
|
||||||
use super::Vmar;
|
use super::Vmar;
|
||||||
|
|
||||||
@ -135,8 +135,8 @@ impl<R> VmarChildOptions<R> {
|
|||||||
|
|
||||||
#[cfg(ktest)]
|
#[cfg(ktest)]
|
||||||
mod test {
|
mod test {
|
||||||
use aster_frame::mm::VmIo;
|
|
||||||
use aster_rights::Full;
|
use aster_rights::Full;
|
||||||
|
use ostd::mm::VmIo;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::vm::{
|
use crate::vm::{
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
use core::ops::Range;
|
use core::ops::Range;
|
||||||
|
|
||||||
use aster_frame::mm::VmIo;
|
|
||||||
use aster_rights::{Dup, Rights, TRightSet, TRights};
|
use aster_rights::{Dup, Rights, TRightSet, TRights};
|
||||||
use aster_rights_proc::require;
|
use aster_rights_proc::require;
|
||||||
|
use ostd::mm::VmIo;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
options::VmarChildOptions, vm_mapping::VmarMapOptions, VmPerms, Vmar, VmarRightsOp, Vmar_,
|
options::VmarChildOptions, vm_mapping::VmarMapOptions, VmPerms, Vmar, VmarRightsOp, Vmar_,
|
||||||
@ -180,13 +180,13 @@ impl<R: TRights> Vmar<TRightSet<R>> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<R: TRights> VmIo for Vmar<TRightSet<R>> {
|
impl<R: TRights> VmIo for Vmar<TRightSet<R>> {
|
||||||
fn read_bytes(&self, offset: usize, buf: &mut [u8]) -> aster_frame::Result<()> {
|
fn read_bytes(&self, offset: usize, buf: &mut [u8]) -> ostd::Result<()> {
|
||||||
self.check_rights(Rights::READ)?;
|
self.check_rights(Rights::READ)?;
|
||||||
self.0.read(offset, buf)?;
|
self.0.read(offset, buf)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_bytes(&self, offset: usize, buf: &[u8]) -> aster_frame::Result<()> {
|
fn write_bytes(&self, offset: usize, buf: &[u8]) -> ostd::Result<()> {
|
||||||
self.check_rights(Rights::WRITE)?;
|
self.check_rights(Rights::WRITE)?;
|
||||||
self.0.write(offset, buf)?;
|
self.0.write(offset, buf)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
use core::ops::Range;
|
use core::ops::Range;
|
||||||
|
|
||||||
use aster_frame::mm::{Frame, FrameVec, PageFlags, VmIo, VmMapOptions, VmSpace};
|
use ostd::mm::{Frame, FrameVec, PageFlags, VmIo, VmMapOptions, VmSpace};
|
||||||
|
|
||||||
use super::{interval::Interval, is_intersected, Vmar, Vmar_};
|
use super::{interval::Interval, is_intersected, Vmar, Vmar_};
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
use core::ops::Range;
|
use core::ops::Range;
|
||||||
|
|
||||||
use aster_frame::mm::{Frame, VmIo};
|
|
||||||
use aster_rights::{Rights, TRights};
|
use aster_rights::{Rights, TRights};
|
||||||
|
use ostd::mm::{Frame, VmIo};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
options::{VmoCowChild, VmoSliceChild},
|
options::{VmoCowChild, VmoSliceChild},
|
||||||
@ -151,13 +151,13 @@ impl Vmo<Rights> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl VmIo for Vmo<Rights> {
|
impl VmIo for Vmo<Rights> {
|
||||||
fn read_bytes(&self, offset: usize, buf: &mut [u8]) -> aster_frame::Result<()> {
|
fn read_bytes(&self, offset: usize, buf: &mut [u8]) -> ostd::Result<()> {
|
||||||
self.check_rights(Rights::READ)?;
|
self.check_rights(Rights::READ)?;
|
||||||
self.0.read_bytes(offset, buf)?;
|
self.0.read_bytes(offset, buf)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_bytes(&self, offset: usize, buf: &[u8]) -> aster_frame::Result<()> {
|
fn write_bytes(&self, offset: usize, buf: &[u8]) -> ostd::Result<()> {
|
||||||
self.check_rights(Rights::WRITE)?;
|
self.check_rights(Rights::WRITE)?;
|
||||||
self.0.write_bytes(offset, buf)?;
|
self.0.write_bytes(offset, buf)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -8,11 +8,11 @@
|
|||||||
use core::ops::Range;
|
use core::ops::Range;
|
||||||
|
|
||||||
use align_ext::AlignExt;
|
use align_ext::AlignExt;
|
||||||
use aster_frame::{
|
use aster_rights::Rights;
|
||||||
|
use ostd::{
|
||||||
collections::xarray::{CursorMut, XArray, XMark},
|
collections::xarray::{CursorMut, XArray, XMark},
|
||||||
mm::{Frame, FrameAllocOptions, VmReader, VmWriter},
|
mm::{Frame, FrameAllocOptions, VmReader, VmWriter},
|
||||||
};
|
};
|
||||||
use aster_rights::Rights;
|
|
||||||
|
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ use self::options::ChildType;
|
|||||||
/// # Implementation
|
/// # Implementation
|
||||||
///
|
///
|
||||||
/// `Vmo` provides high-level APIs for address space management by wrapping
|
/// `Vmo` provides high-level APIs for address space management by wrapping
|
||||||
/// around its low-level counterpart `aster_frame::vm::VmFrames`.
|
/// around its low-level counterpart `ostd::vm::VmFrames`.
|
||||||
/// Compared with `VmFrames`,
|
/// Compared with `VmFrames`,
|
||||||
/// `Vmo` is easier to use (by offering more powerful APIs) and
|
/// `Vmo` is easier to use (by offering more powerful APIs) and
|
||||||
/// harder to misuse (thanks to its nature of being capability).
|
/// harder to misuse (thanks to its nature of being capability).
|
||||||
|
@ -7,12 +7,12 @@
|
|||||||
use core::{marker::PhantomData, ops::Range};
|
use core::{marker::PhantomData, ops::Range};
|
||||||
|
|
||||||
use align_ext::AlignExt;
|
use align_ext::AlignExt;
|
||||||
use aster_frame::{
|
use aster_rights::{Dup, Rights, TRightSet, TRights, Write};
|
||||||
|
use aster_rights_proc::require;
|
||||||
|
use ostd::{
|
||||||
collections::xarray::XArray,
|
collections::xarray::XArray,
|
||||||
mm::{Frame, FrameAllocOptions},
|
mm::{Frame, FrameAllocOptions},
|
||||||
};
|
};
|
||||||
use aster_rights::{Dup, Rights, TRightSet, TRights, Write};
|
|
||||||
use aster_rights_proc::require;
|
|
||||||
use typeflags_util::{SetExtend, SetExtendOp};
|
use typeflags_util::{SetExtend, SetExtendOp};
|
||||||
|
|
||||||
use super::{Pager, Pages, Vmo, VmoFlags, VmoMark, VmoRightsOp};
|
use super::{Pager, Pages, Vmo, VmoFlags, VmoMark, VmoRightsOp};
|
||||||
@ -476,8 +476,8 @@ impl VmoChildType for VmoCowChild {}
|
|||||||
|
|
||||||
#[cfg(ktest)]
|
#[cfg(ktest)]
|
||||||
mod test {
|
mod test {
|
||||||
use aster_frame::mm::VmIo;
|
|
||||||
use aster_rights::Full;
|
use aster_rights::Full;
|
||||||
|
use ostd::mm::VmIo;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::mm::Frame;
|
use ostd::mm::Frame;
|
||||||
|
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
use core::ops::Range;
|
use core::ops::Range;
|
||||||
|
|
||||||
use aster_frame::mm::{Frame, VmIo};
|
|
||||||
use aster_rights::{Dup, Rights, TRightSet, TRights, Write};
|
use aster_rights::{Dup, Rights, TRightSet, TRights, Write};
|
||||||
use aster_rights_proc::require;
|
use aster_rights_proc::require;
|
||||||
|
use ostd::mm::{Frame, VmIo};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
options::{VmoCowChild, VmoSliceChild},
|
options::{VmoCowChild, VmoSliceChild},
|
||||||
@ -145,13 +145,13 @@ impl<R: TRights> Vmo<TRightSet<R>> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<R: TRights> VmIo for Vmo<TRightSet<R>> {
|
impl<R: TRights> VmIo for Vmo<TRightSet<R>> {
|
||||||
fn read_bytes(&self, offset: usize, buf: &mut [u8]) -> aster_frame::Result<()> {
|
fn read_bytes(&self, offset: usize, buf: &mut [u8]) -> ostd::Result<()> {
|
||||||
self.check_rights(Rights::READ)?;
|
self.check_rights(Rights::READ)?;
|
||||||
self.0.read_bytes(offset, buf)?;
|
self.0.read_bytes(offset, buf)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_bytes(&self, offset: usize, buf: &[u8]) -> aster_frame::Result<()> {
|
fn write_bytes(&self, offset: usize, buf: &[u8]) -> ostd::Result<()> {
|
||||||
self.check_rights(Rights::WRITE)?;
|
self.check_rights(Rights::WRITE)?;
|
||||||
self.0.write_bytes(offset, buf)?;
|
self.0.write_bytes(offset, buf)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -9,8 +9,8 @@ edition = "2021"
|
|||||||
bitflags = "1.3"
|
bitflags = "1.3"
|
||||||
spin = "0.9.4"
|
spin = "0.9.4"
|
||||||
pod = { git = "https://github.com/asterinas/pod", rev = "d7dba56" }
|
pod = { git = "https://github.com/asterinas/pod", rev = "d7dba56" }
|
||||||
aster-frame = { path = "../../../framework/aster-frame" }
|
ostd = { path = "../../../ostd" }
|
||||||
align_ext = { path = "../../../framework/libs/align_ext" }
|
align_ext = { path = "../../../ostd/libs/align_ext" }
|
||||||
aster-util = { path = "../../libs/aster-util" }
|
aster-util = { path = "../../libs/aster-util" }
|
||||||
int-to-c-enum = { path = "../../libs/int-to-c-enum" }
|
int-to-c-enum = { path = "../../libs/int-to-c-enum" }
|
||||||
component = { path = "../../libs/comp-sys/component" }
|
component = { path = "../../libs/comp-sys/component" }
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use align_ext::AlignExt;
|
use align_ext::AlignExt;
|
||||||
use aster_frame::{
|
use int_to_c_enum::TryFromInt;
|
||||||
|
use ostd::{
|
||||||
mm::{Frame, Segment, VmReader, VmWriter},
|
mm::{Frame, Segment, VmReader, VmWriter},
|
||||||
sync::WaitQueue,
|
sync::WaitQueue,
|
||||||
};
|
};
|
||||||
use int_to_c_enum::TryFromInt;
|
|
||||||
|
|
||||||
use super::{id::Sid, BlockDevice};
|
use super::{id::Sid, BlockDevice};
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
@ -140,9 +140,9 @@ pub enum BioEnqueueError {
|
|||||||
TooBig,
|
TooBig,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<BioEnqueueError> for aster_frame::Error {
|
impl From<BioEnqueueError> for ostd::Error {
|
||||||
fn from(_error: BioEnqueueError) -> Self {
|
fn from(_error: BioEnqueueError) -> Self {
|
||||||
aster_frame::Error::NotEnoughResources
|
ostd::Error::NotEnoughResources
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::mm::{Frame, FrameAllocOptions, Segment, VmIo};
|
use ostd::mm::{Frame, FrameAllocOptions, Segment, VmIo};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
bio::{Bio, BioEnqueueError, BioSegment, BioStatus, BioType, BioWaiter, SubmittedBio},
|
bio::{Bio, BioEnqueueError, BioSegment, BioStatus, BioType, BioWaiter, SubmittedBio},
|
||||||
@ -75,9 +75,9 @@ impl dyn BlockDevice {
|
|||||||
|
|
||||||
impl VmIo for dyn BlockDevice {
|
impl VmIo for dyn BlockDevice {
|
||||||
/// Reads consecutive bytes of several sectors in size.
|
/// Reads consecutive bytes of several sectors in size.
|
||||||
fn read_bytes(&self, offset: usize, buf: &mut [u8]) -> aster_frame::Result<()> {
|
fn read_bytes(&self, offset: usize, buf: &mut [u8]) -> ostd::Result<()> {
|
||||||
if offset % SECTOR_SIZE != 0 || buf.len() % SECTOR_SIZE != 0 {
|
if offset % SECTOR_SIZE != 0 || buf.len() % SECTOR_SIZE != 0 {
|
||||||
return Err(aster_frame::Error::InvalidArgs);
|
return Err(ostd::Error::InvalidArgs);
|
||||||
}
|
}
|
||||||
if buf.is_empty() {
|
if buf.is_empty() {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
@ -111,14 +111,14 @@ impl VmIo for dyn BlockDevice {
|
|||||||
let _ = bio_segment.reader().read(&mut buf.into());
|
let _ = bio_segment.reader().read(&mut buf.into());
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
_ => Err(aster_frame::Error::IoError),
|
_ => Err(ostd::Error::IoError),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Writes consecutive bytes of several sectors in size.
|
/// Writes consecutive bytes of several sectors in size.
|
||||||
fn write_bytes(&self, offset: usize, buf: &[u8]) -> aster_frame::Result<()> {
|
fn write_bytes(&self, offset: usize, buf: &[u8]) -> ostd::Result<()> {
|
||||||
if offset % SECTOR_SIZE != 0 || buf.len() % SECTOR_SIZE != 0 {
|
if offset % SECTOR_SIZE != 0 || buf.len() % SECTOR_SIZE != 0 {
|
||||||
return Err(aster_frame::Error::InvalidArgs);
|
return Err(ostd::Error::InvalidArgs);
|
||||||
}
|
}
|
||||||
if buf.is_empty() {
|
if buf.is_empty() {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
@ -150,16 +150,16 @@ impl VmIo for dyn BlockDevice {
|
|||||||
let status = bio.submit_sync(self)?;
|
let status = bio.submit_sync(self)?;
|
||||||
match status {
|
match status {
|
||||||
BioStatus::Complete => Ok(()),
|
BioStatus::Complete => Ok(()),
|
||||||
_ => Err(aster_frame::Error::IoError),
|
_ => Err(ostd::Error::IoError),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl dyn BlockDevice {
|
impl dyn BlockDevice {
|
||||||
/// Asynchronously writes consecutive bytes of several sectors in size.
|
/// Asynchronously writes consecutive bytes of several sectors in size.
|
||||||
pub fn write_bytes_async(&self, offset: usize, buf: &[u8]) -> aster_frame::Result<BioWaiter> {
|
pub fn write_bytes_async(&self, offset: usize, buf: &[u8]) -> ostd::Result<BioWaiter> {
|
||||||
if offset % SECTOR_SIZE != 0 || buf.len() % SECTOR_SIZE != 0 {
|
if offset % SECTOR_SIZE != 0 || buf.len() % SECTOR_SIZE != 0 {
|
||||||
return Err(aster_frame::Error::InvalidArgs);
|
return Err(ostd::Error::InvalidArgs);
|
||||||
}
|
}
|
||||||
if buf.is_empty() {
|
if buf.is_empty() {
|
||||||
return Ok(BioWaiter::new());
|
return Ok(BioWaiter::new());
|
||||||
|
@ -41,8 +41,8 @@ mod impl_block_device;
|
|||||||
mod prelude;
|
mod prelude;
|
||||||
pub mod request_queue;
|
pub mod request_queue;
|
||||||
|
|
||||||
use aster_frame::sync::SpinLock;
|
|
||||||
use component::{init_component, ComponentInitError};
|
use component::{init_component, ComponentInitError};
|
||||||
|
use ostd::sync::SpinLock;
|
||||||
use spin::Once;
|
use spin::Once;
|
||||||
|
|
||||||
use self::{
|
use self::{
|
||||||
@ -50,7 +50,7 @@ use self::{
|
|||||||
prelude::*,
|
prelude::*,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const BLOCK_SIZE: usize = aster_frame::mm::PAGE_SIZE;
|
pub const BLOCK_SIZE: usize = ostd::mm::PAGE_SIZE;
|
||||||
pub const SECTOR_SIZE: usize = 512;
|
pub const SECTOR_SIZE: usize = 512;
|
||||||
|
|
||||||
pub trait BlockDevice: Send + Sync + Any + Debug {
|
pub trait BlockDevice: Send + Sync + Any + Debug {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MPL-2.0
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
use aster_frame::sync::{Mutex, WaitQueue};
|
use ostd::sync::{Mutex, WaitQueue};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
bio::{BioEnqueueError, BioType, SubmittedBio},
|
bio::{BioEnqueueError, BioType, SubmittedBio},
|
||||||
|
@ -8,7 +8,7 @@ edition = "2021"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
bitflags = "1.3"
|
bitflags = "1.3"
|
||||||
spin = "0.9.4"
|
spin = "0.9.4"
|
||||||
aster-frame = { path = "../../../framework/aster-frame" }
|
ostd = { path = "../../../ostd" }
|
||||||
aster-util = { path = "../../libs/aster-util" }
|
aster-util = { path = "../../libs/aster-util" }
|
||||||
component = { path = "../../libs/comp-sys/component" }
|
component = { path = "../../libs/comp-sys/component" }
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
|
@ -10,8 +10,8 @@ extern crate alloc;
|
|||||||
use alloc::{collections::BTreeMap, fmt::Debug, string::String, sync::Arc, vec::Vec};
|
use alloc::{collections::BTreeMap, fmt::Debug, string::String, sync::Arc, vec::Vec};
|
||||||
use core::any::Any;
|
use core::any::Any;
|
||||||
|
|
||||||
use aster_frame::{mm::VmReader, sync::SpinLock};
|
|
||||||
use component::{init_component, ComponentInitError};
|
use component::{init_component, ComponentInitError};
|
||||||
|
use ostd::{mm::VmReader, sync::SpinLock};
|
||||||
use spin::Once;
|
use spin::Once;
|
||||||
|
|
||||||
pub type ConsoleCallback = dyn Fn(VmReader) + Send + Sync;
|
pub type ConsoleCallback = dyn Fn(VmReader) + Send + Sync;
|
||||||
|
@ -6,7 +6,7 @@ edition = "2021"
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
aster-frame = { path = "../../../framework/aster-frame" }
|
ostd = { path = "../../../ostd" }
|
||||||
component = { path = "../../libs/comp-sys/component" }
|
component = { path = "../../libs/comp-sys/component" }
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
spin = "0.9.4"
|
spin = "0.9.4"
|
||||||
|
@ -13,14 +13,14 @@ use core::{
|
|||||||
ops::{Index, IndexMut},
|
ops::{Index, IndexMut},
|
||||||
};
|
};
|
||||||
|
|
||||||
use aster_frame::{
|
use component::{init_component, ComponentInitError};
|
||||||
|
use font8x8::UnicodeFonts;
|
||||||
|
use ostd::{
|
||||||
boot,
|
boot,
|
||||||
io_mem::IoMem,
|
io_mem::IoMem,
|
||||||
mm::{VmIo, PAGE_SIZE},
|
mm::{VmIo, PAGE_SIZE},
|
||||||
sync::SpinLock,
|
sync::SpinLock,
|
||||||
};
|
};
|
||||||
use component::{init_component, ComponentInitError};
|
|
||||||
use font8x8::UnicodeFonts;
|
|
||||||
use spin::Once;
|
use spin::Once;
|
||||||
|
|
||||||
#[init_component]
|
#[init_component]
|
||||||
@ -39,7 +39,7 @@ pub(crate) fn init() {
|
|||||||
let mut writer = {
|
let mut writer = {
|
||||||
let framebuffer = boot::framebuffer_arg();
|
let framebuffer = boot::framebuffer_arg();
|
||||||
let mut size = 0;
|
let mut size = 0;
|
||||||
for i in aster_frame::mm::FRAMEBUFFER_REGIONS.get().unwrap().iter() {
|
for i in ostd::mm::FRAMEBUFFER_REGIONS.get().unwrap().iter() {
|
||||||
size = i.len();
|
size = i.len();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ edition = "2021"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
bitflags = "1.3"
|
bitflags = "1.3"
|
||||||
spin = "0.9.4"
|
spin = "0.9.4"
|
||||||
aster-frame = { path = "../../../framework/aster-frame" }
|
ostd = { path = "../../../ostd" }
|
||||||
aster-util = { path = "../../libs/aster-util" }
|
aster-util = { path = "../../libs/aster-util" }
|
||||||
aster-rights = { path = "../../libs/aster-rights" }
|
aster-rights = { path = "../../libs/aster-rights" }
|
||||||
component = { path = "../../libs/comp-sys/component" }
|
component = { path = "../../libs/comp-sys/component" }
|
||||||
|
@ -12,9 +12,9 @@ pub mod key;
|
|||||||
use alloc::{collections::BTreeMap, string::String, sync::Arc, vec::Vec};
|
use alloc::{collections::BTreeMap, string::String, sync::Arc, vec::Vec};
|
||||||
use core::{any::Any, fmt::Debug};
|
use core::{any::Any, fmt::Debug};
|
||||||
|
|
||||||
use aster_frame::sync::SpinLock;
|
|
||||||
use component::{init_component, ComponentInitError};
|
use component::{init_component, ComponentInitError};
|
||||||
use key::{Key, KeyStatus};
|
use key::{Key, KeyStatus};
|
||||||
|
use ostd::sync::SpinLock;
|
||||||
use spin::Once;
|
use spin::Once;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
@ -6,16 +6,16 @@ edition = "2021"
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
align_ext = { path = "../../../framework/libs/align_ext" }
|
align_ext = { path = "../../../ostd/libs/align_ext" }
|
||||||
aster-frame = { path = "../../../framework/aster-frame" }
|
|
||||||
aster-util = { path = "../../libs/aster-util" }
|
aster-util = { path = "../../libs/aster-util" }
|
||||||
aster-rights = { path = "../../libs/aster-rights" }
|
aster-rights = { path = "../../libs/aster-rights" }
|
||||||
bitflags = "1.3"
|
bitflags = "1.3"
|
||||||
bitvec = { version = "1.0.1", default-features = false, features = ["alloc"]}
|
bitvec = { version = "1.0.1", default-features = false, features = ["alloc"]}
|
||||||
component = { path = "../../libs/comp-sys/component" }
|
component = { path = "../../libs/comp-sys/component" }
|
||||||
int-to-c-enum = { path = "../../libs/int-to-c-enum" }
|
int-to-c-enum = { path = "../../libs/int-to-c-enum" }
|
||||||
ktest = { path = "../../../framework/libs/ktest" }
|
ktest = { path = "../../../ostd/libs/ktest" }
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
|
ostd = { path = "../../../ostd" }
|
||||||
pod = { git = "https://github.com/asterinas/pod", rev = "d7dba56" }
|
pod = { git = "https://github.com/asterinas/pod", rev = "d7dba56" }
|
||||||
ringbuf = { version = "0.3.2", default-features = false, features = ["alloc"] }
|
ringbuf = { version = "0.3.2", default-features = false, features = ["alloc"] }
|
||||||
smoltcp = { version = "0.9.1", default-features = false, features = ["alloc", "log", "medium-ethernet", "medium-ip", "proto-dhcpv4", "proto-ipv4", "proto-igmp", "socket-icmp", "socket-udp", "socket-tcp", "socket-raw", "socket-dhcpv4"] }
|
smoltcp = { version = "0.9.1", default-features = false, features = ["alloc", "log", "medium-ethernet", "medium-ip", "proto-dhcpv4", "proto-ipv4", "proto-igmp", "socket-icmp", "socket-udp", "socket-tcp", "socket-raw", "socket-dhcpv4"] }
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
use alloc::{collections::LinkedList, sync::Arc};
|
use alloc::{collections::LinkedList, sync::Arc};
|
||||||
|
|
||||||
use align_ext::AlignExt;
|
use align_ext::AlignExt;
|
||||||
use aster_frame::{
|
use ostd::{
|
||||||
mm::{
|
mm::{
|
||||||
Daddr, DmaDirection, DmaStream, FrameAllocOptions, HasDaddr, VmReader, VmWriter, PAGE_SIZE,
|
Daddr, DmaDirection, DmaStream, FrameAllocOptions, HasDaddr, VmReader, VmWriter, PAGE_SIZE,
|
||||||
},
|
},
|
||||||
|
@ -8,14 +8,14 @@ use alloc::{
|
|||||||
};
|
};
|
||||||
use core::ops::Range;
|
use core::ops::Range;
|
||||||
|
|
||||||
use aster_frame::{
|
use bitvec::{array::BitArray, prelude::Lsb0};
|
||||||
|
use ktest::ktest;
|
||||||
|
use ostd::{
|
||||||
mm::{
|
mm::{
|
||||||
Daddr, DmaDirection, DmaStream, FrameAllocOptions, HasDaddr, VmReader, VmWriter, PAGE_SIZE,
|
Daddr, DmaDirection, DmaStream, FrameAllocOptions, HasDaddr, VmReader, VmWriter, PAGE_SIZE,
|
||||||
},
|
},
|
||||||
sync::{RwLock, SpinLock},
|
sync::{RwLock, SpinLock},
|
||||||
};
|
};
|
||||||
use bitvec::{array::BitArray, prelude::Lsb0};
|
|
||||||
use ktest::ktest;
|
|
||||||
|
|
||||||
/// `DmaPool` is responsible for allocating small streaming DMA segments
|
/// `DmaPool` is responsible for allocating small streaming DMA segments
|
||||||
/// (equal to or smaller than PAGE_SIZE),
|
/// (equal to or smaller than PAGE_SIZE),
|
||||||
@ -95,7 +95,7 @@ impl DmaPool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Allocates a `DmaSegment` from the pool
|
/// Allocates a `DmaSegment` from the pool
|
||||||
pub fn alloc_segment(self: &Arc<Self>) -> Result<DmaSegment, aster_frame::Error> {
|
pub fn alloc_segment(self: &Arc<Self>) -> Result<DmaSegment, ostd::Error> {
|
||||||
// Lock order: pool.avail_pages -> pool.all_pages
|
// Lock order: pool.avail_pages -> pool.all_pages
|
||||||
// pool.avail_pages -> page.allocated_segments
|
// pool.avail_pages -> page.allocated_segments
|
||||||
let mut avail_pages = self.avail_pages.lock_irq_disabled();
|
let mut avail_pages = self.avail_pages.lock_irq_disabled();
|
||||||
@ -150,12 +150,12 @@ impl DmaPage {
|
|||||||
direction: DmaDirection,
|
direction: DmaDirection,
|
||||||
is_cache_coherent: bool,
|
is_cache_coherent: bool,
|
||||||
pool: Weak<DmaPool>,
|
pool: Weak<DmaPool>,
|
||||||
) -> Result<Self, aster_frame::Error> {
|
) -> Result<Self, ostd::Error> {
|
||||||
let dma_stream = {
|
let dma_stream = {
|
||||||
let vm_segment = FrameAllocOptions::new(1).alloc_contiguous()?;
|
let vm_segment = FrameAllocOptions::new(1).alloc_contiguous()?;
|
||||||
|
|
||||||
DmaStream::map(vm_segment, direction, is_cache_coherent)
|
DmaStream::map(vm_segment, direction, is_cache_coherent)
|
||||||
.map_err(|_| aster_frame::Error::AccessDenied)?
|
.map_err(|_| ostd::Error::AccessDenied)?
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
@ -234,17 +234,17 @@ impl DmaSegment {
|
|||||||
self.size
|
self.size
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn reader(&self) -> Result<VmReader<'_>, aster_frame::Error> {
|
pub fn reader(&self) -> Result<VmReader<'_>, ostd::Error> {
|
||||||
let offset = self.start_addr - self.dma_stream.daddr();
|
let offset = self.start_addr - self.dma_stream.daddr();
|
||||||
Ok(self.dma_stream.reader()?.skip(offset).limit(self.size))
|
Ok(self.dma_stream.reader()?.skip(offset).limit(self.size))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn writer(&self) -> Result<VmWriter<'_>, aster_frame::Error> {
|
pub fn writer(&self) -> Result<VmWriter<'_>, ostd::Error> {
|
||||||
let offset = self.start_addr - self.dma_stream.daddr();
|
let offset = self.start_addr - self.dma_stream.daddr();
|
||||||
Ok(self.dma_stream.writer()?.skip(offset).limit(self.size))
|
Ok(self.dma_stream.writer()?.skip(offset).limit(self.size))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn sync(&self, byte_range: Range<usize>) -> Result<(), aster_frame::Error> {
|
pub fn sync(&self, byte_range: Range<usize>) -> Result<(), ostd::Error> {
|
||||||
let offset = self.daddr() - self.dma_stream.daddr();
|
let offset = self.daddr() - self.dma_stream.daddr();
|
||||||
let range = byte_range.start + offset..byte_range.end + offset;
|
let range = byte_range.start + offset..byte_range.end + offset;
|
||||||
self.dma_stream.sync(range)
|
self.dma_stream.sync(range)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user