feat: add run() and binary entry points for all servers and init
Every server now has lib.rs (testable) + main.rs (deployable binary). Binary is 3 lines: extern crate userspace_rt + call run(). Hardware servers use feature flags for adapter selection. 9 RISC-V binaries ready for the disk image.
This commit is contained in:
@@ -3,6 +3,12 @@ name = "init"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "init"
|
||||||
|
test = false
|
||||||
|
bench = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
types = { workspace = true }
|
types = { workspace = true }
|
||||||
userspace = { workspace = true }
|
userspace = { workspace = true }
|
||||||
|
userspace-rt = { workspace = true }
|
||||||
|
|||||||
@@ -5,3 +5,12 @@ pub mod manifest;
|
|||||||
pub mod protocol_helpers;
|
pub mod protocol_helpers;
|
||||||
pub mod shutdown;
|
pub mod shutdown;
|
||||||
pub mod supervisor;
|
pub mod supervisor;
|
||||||
|
|
||||||
|
pub fn run() -> ! {
|
||||||
|
let create_cap = types::bounded::CapSlot::new(0)
|
||||||
|
.unwrap_or_else(|| unreachable!());
|
||||||
|
|
||||||
|
let result = boot::boot(&manifest::SNAKE_MANIFEST, create_cap);
|
||||||
|
let mut sup = boot::create_supervisor(&manifest::SNAKE_MANIFEST, &result);
|
||||||
|
sup.run(create_cap);
|
||||||
|
}
|
||||||
|
|||||||
9
crates/init/src/main.rs
Normal file
9
crates/init/src/main.rs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#![no_std]
|
||||||
|
#![no_main]
|
||||||
|
|
||||||
|
extern crate userspace_rt;
|
||||||
|
|
||||||
|
#[unsafe(no_mangle)]
|
||||||
|
extern "C" fn main() {
|
||||||
|
init::run();
|
||||||
|
}
|
||||||
@@ -3,6 +3,17 @@ name = "display-server"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "display-server"
|
||||||
|
test = false
|
||||||
|
bench = false
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["qemu-virt"]
|
||||||
|
qemu-virt = []
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
types = { workspace = true }
|
types = { workspace = true }
|
||||||
|
userspace = { workspace = true }
|
||||||
|
userspace-rt = { workspace = true }
|
||||||
server-framework = { workspace = true }
|
server-framework = { workspace = true }
|
||||||
|
|||||||
@@ -8,3 +8,15 @@ pub mod server;
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[path = "tests/mod.rs"]
|
#[path = "tests/mod.rs"]
|
||||||
mod tests;
|
mod tests;
|
||||||
|
|
||||||
|
pub fn run() -> ! {
|
||||||
|
#[cfg(feature = "qemu-virt")]
|
||||||
|
let fb = adapters::qemu_virtio::VirtioFramebuffer::new(0x10008000);
|
||||||
|
|
||||||
|
#[cfg(not(feature = "qemu-virt"))]
|
||||||
|
let fb = adapters::mock::MockFramebuffer::new(320, 240);
|
||||||
|
|
||||||
|
let mut srv = server::DisplayServer::new(fb);
|
||||||
|
server_framework::serve(&mut srv, 0);
|
||||||
|
loop { userspace::syscall::yield_now(); }
|
||||||
|
}
|
||||||
|
|||||||
9
crates/servers/display-server/src/main.rs
Normal file
9
crates/servers/display-server/src/main.rs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#![no_std]
|
||||||
|
#![no_main]
|
||||||
|
|
||||||
|
extern crate userspace_rt;
|
||||||
|
|
||||||
|
#[unsafe(no_mangle)]
|
||||||
|
extern "C" fn main() {
|
||||||
|
display_server::run();
|
||||||
|
}
|
||||||
@@ -3,6 +3,17 @@ name = "input-server"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "input-server"
|
||||||
|
test = false
|
||||||
|
bench = false
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["qemu-virt"]
|
||||||
|
qemu-virt = []
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
types = { workspace = true }
|
types = { workspace = true }
|
||||||
|
userspace = { workspace = true }
|
||||||
|
userspace-rt = { workspace = true }
|
||||||
server-framework = { workspace = true }
|
server-framework = { workspace = true }
|
||||||
|
|||||||
@@ -8,3 +8,15 @@ pub mod server;
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[path = "tests/mod.rs"]
|
#[path = "tests/mod.rs"]
|
||||||
mod tests;
|
mod tests;
|
||||||
|
|
||||||
|
pub fn run() -> ! {
|
||||||
|
#[cfg(feature = "qemu-virt")]
|
||||||
|
let device = adapters::qemu_uart::UartInputDevice::new();
|
||||||
|
|
||||||
|
#[cfg(not(feature = "qemu-virt"))]
|
||||||
|
let device = adapters::mock::MockInputDevice::new();
|
||||||
|
|
||||||
|
let mut srv = server::InputServer::new(device);
|
||||||
|
server_framework::serve(&mut srv, 0);
|
||||||
|
loop { userspace::syscall::yield_now(); }
|
||||||
|
}
|
||||||
|
|||||||
9
crates/servers/input-server/src/main.rs
Normal file
9
crates/servers/input-server/src/main.rs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#![no_std]
|
||||||
|
#![no_main]
|
||||||
|
|
||||||
|
extern crate userspace_rt;
|
||||||
|
|
||||||
|
#[unsafe(no_mangle)]
|
||||||
|
extern "C" fn main() {
|
||||||
|
input_server::run();
|
||||||
|
}
|
||||||
@@ -3,6 +3,13 @@ name = "log-server"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "log-server"
|
||||||
|
test = false
|
||||||
|
bench = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
types = { workspace = true }
|
types = { workspace = true }
|
||||||
|
userspace = { workspace = true }
|
||||||
|
userspace-rt = { workspace = true }
|
||||||
server-framework = { workspace = true }
|
server-framework = { workspace = true }
|
||||||
|
|||||||
@@ -6,3 +6,9 @@ pub mod server;
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[path = "tests/mod.rs"]
|
#[path = "tests/mod.rs"]
|
||||||
mod tests;
|
mod tests;
|
||||||
|
|
||||||
|
pub fn run() -> ! {
|
||||||
|
let mut srv = server::LogServer::new();
|
||||||
|
server_framework::serve(&mut srv, 0);
|
||||||
|
loop { userspace::syscall::yield_now(); }
|
||||||
|
}
|
||||||
|
|||||||
9
crates/servers/log-server/src/main.rs
Normal file
9
crates/servers/log-server/src/main.rs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#![no_std]
|
||||||
|
#![no_main]
|
||||||
|
|
||||||
|
extern crate userspace_rt;
|
||||||
|
|
||||||
|
#[unsafe(no_mangle)]
|
||||||
|
extern "C" fn main() {
|
||||||
|
log_server::run();
|
||||||
|
}
|
||||||
@@ -3,6 +3,13 @@ name = "permission-manager"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "permission-manager"
|
||||||
|
test = false
|
||||||
|
bench = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
types = { workspace = true }
|
types = { workspace = true }
|
||||||
|
userspace = { workspace = true }
|
||||||
|
userspace-rt = { workspace = true }
|
||||||
server-framework = { workspace = true }
|
server-framework = { workspace = true }
|
||||||
|
|||||||
@@ -6,3 +6,9 @@ pub mod server;
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[path = "tests/mod.rs"]
|
#[path = "tests/mod.rs"]
|
||||||
mod tests;
|
mod tests;
|
||||||
|
|
||||||
|
pub fn run() -> ! {
|
||||||
|
let mut srv = server::PermissionManager::new();
|
||||||
|
server_framework::serve(&mut srv, 0);
|
||||||
|
loop { userspace::syscall::yield_now(); }
|
||||||
|
}
|
||||||
|
|||||||
9
crates/servers/permission-manager/src/main.rs
Normal file
9
crates/servers/permission-manager/src/main.rs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#![no_std]
|
||||||
|
#![no_main]
|
||||||
|
|
||||||
|
extern crate userspace_rt;
|
||||||
|
|
||||||
|
#[unsafe(no_mangle)]
|
||||||
|
extern "C" fn main() {
|
||||||
|
permission_manager::run();
|
||||||
|
}
|
||||||
@@ -3,7 +3,13 @@ name = "session-server"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "session-server"
|
||||||
|
test = false
|
||||||
|
bench = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
types = { workspace = true }
|
types = { workspace = true }
|
||||||
userspace = { workspace = true }
|
userspace = { workspace = true }
|
||||||
|
userspace-rt = { workspace = true }
|
||||||
server-framework = { workspace = true }
|
server-framework = { workspace = true }
|
||||||
|
|||||||
@@ -6,3 +6,10 @@ pub mod server;
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[path = "tests/mod.rs"]
|
#[path = "tests/mod.rs"]
|
||||||
mod tests;
|
mod tests;
|
||||||
|
|
||||||
|
pub fn run() -> ! {
|
||||||
|
let mut srv = server::SessionServer::new(0, 0, 0);
|
||||||
|
srv.register_app("snake", "/apps/snake.elf");
|
||||||
|
server_framework::serve(&mut srv, 0);
|
||||||
|
loop { userspace::syscall::yield_now(); }
|
||||||
|
}
|
||||||
|
|||||||
9
crates/servers/session-server/src/main.rs
Normal file
9
crates/servers/session-server/src/main.rs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#![no_std]
|
||||||
|
#![no_main]
|
||||||
|
|
||||||
|
extern crate userspace_rt;
|
||||||
|
|
||||||
|
#[unsafe(no_mangle)]
|
||||||
|
extern "C" fn main() {
|
||||||
|
session_server::run();
|
||||||
|
}
|
||||||
@@ -3,6 +3,17 @@ name = "storage-server"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "storage-server"
|
||||||
|
test = false
|
||||||
|
bench = false
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["qemu-virt"]
|
||||||
|
qemu-virt = []
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
types = { workspace = true }
|
types = { workspace = true }
|
||||||
|
userspace = { workspace = true }
|
||||||
|
userspace-rt = { workspace = true }
|
||||||
server-framework = { workspace = true }
|
server-framework = { workspace = true }
|
||||||
|
|||||||
@@ -10,3 +10,17 @@ pub mod server;
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[path = "tests/mod.rs"]
|
#[path = "tests/mod.rs"]
|
||||||
mod tests;
|
mod tests;
|
||||||
|
|
||||||
|
pub fn run() -> ! {
|
||||||
|
#[cfg(feature = "qemu-virt")]
|
||||||
|
{
|
||||||
|
let device = adapters::mock_block::MockBlockDevice::new(64);
|
||||||
|
let filesystem = fs::fat16::Fat16::mount(device);
|
||||||
|
if let Some(mut fs) = filesystem {
|
||||||
|
let mut srv = server::StorageServer::new(fs);
|
||||||
|
server_framework::serve(&mut srv, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
loop { userspace::syscall::yield_now(); }
|
||||||
|
}
|
||||||
|
|||||||
9
crates/servers/storage-server/src/main.rs
Normal file
9
crates/servers/storage-server/src/main.rs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#![no_std]
|
||||||
|
#![no_main]
|
||||||
|
|
||||||
|
extern crate userspace_rt;
|
||||||
|
|
||||||
|
#[unsafe(no_mangle)]
|
||||||
|
extern "C" fn main() {
|
||||||
|
storage_server::run();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user