[victoria] Create and start VictoriaFalls process
This commit is contained in:
parent
dc63084d61
commit
f0e8ce14a4
12 changed files with 66 additions and 16 deletions
|
|
@ -8,3 +8,4 @@ TIMEOUT=0
|
|||
KERNEL_PATH=boot:///zion
|
||||
MODULE_PATH=boot:///sys/yellowstone
|
||||
MODULE_PATH=boot:///sys/denali
|
||||
MODULE_PATH=boot:///sys/victoriafalls
|
||||
|
|
|
|||
|
|
@ -8,3 +8,4 @@ extern uint64_t gSelfVmasCap;
|
|||
extern uint64_t gInitEndpointCap;
|
||||
|
||||
extern uint64_t gBootDenaliVmmoCap;
|
||||
extern uint64_t gBootVictoriaFallsVmmoCap;
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
#pragma once
|
||||
|
|
@ -88,3 +88,4 @@ typedef uint64_t z_cap_t;
|
|||
#define Z_INIT_ENDPOINT 0x4100'0000
|
||||
|
||||
#define Z_BOOT_DENALI_VMMO 0x4200'0000
|
||||
#define Z_BOOT_VICTORIA_FALLS_VMMO 0x4200'0001
|
||||
|
|
|
|||
|
|
@ -114,36 +114,42 @@ const limine_file& GetInitProgram(glcr::String path) {
|
|||
}
|
||||
}
|
||||
panic("Program not found: %s", path);
|
||||
UNREACHABLE
|
||||
}
|
||||
|
||||
void WriteInitProgram(glcr::RefPtr<Port> port, glcr::String name, uint64_t id) {
|
||||
const limine_file& prog = GetInitProgram(name);
|
||||
glcr::RefPtr<MemoryObject> prog_vmmo =
|
||||
glcr::MakeRefCounted<MemoryObject>(prog.size);
|
||||
prog_vmmo->CopyBytesToObject(reinterpret_cast<uint64_t>(prog.address),
|
||||
prog.size);
|
||||
port->WriteKernel(id,
|
||||
MakeRefCounted<Capability>(prog_vmmo, ZC_READ | ZC_WRITE));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void LoadInitProgram() {
|
||||
DumpModules();
|
||||
const limine_file& init_prog = GetInitProgram("/sys/yellowstone");
|
||||
|
||||
// Create process.
|
||||
glcr::RefPtr<Process> proc = Process::Create();
|
||||
gProcMan->InsertProcess(proc);
|
||||
|
||||
uint64_t entry = LoadElfProgram(
|
||||
*proc, reinterpret_cast<uint64_t>(init_prog.address), init_prog.size);
|
||||
|
||||
const limine_file& prog2 = GetInitProgram("/sys/denali");
|
||||
glcr::RefPtr<MemoryObject> prog2_vmmo =
|
||||
glcr::MakeRefCounted<MemoryObject>(prog2.size);
|
||||
prog2_vmmo->CopyBytesToObject(reinterpret_cast<uint64_t>(prog2.address),
|
||||
prog2.size);
|
||||
|
||||
// Write init data.
|
||||
auto port = glcr::MakeRefCounted<Port>();
|
||||
uint64_t port_cap = proc->AddNewCapability(port, ZC_READ | ZC_WRITE);
|
||||
|
||||
port->WriteKernel(Z_INIT_SELF_PROC,
|
||||
MakeRefCounted<Capability>(
|
||||
proc, ZC_PROC_SPAWN_PROC | ZC_PROC_SPAWN_THREAD));
|
||||
port->WriteKernel(Z_INIT_SELF_VMAS,
|
||||
MakeRefCounted<Capability>(proc->vmas(), ZC_WRITE));
|
||||
port->WriteKernel(Z_BOOT_DENALI_VMMO,
|
||||
MakeRefCounted<Capability>(prog2_vmmo, ZC_READ | ZC_WRITE));
|
||||
WriteInitProgram(port, "/sys/denali", Z_BOOT_DENALI_VMMO);
|
||||
WriteInitProgram(port, "/sys/victoriafalls", Z_BOOT_VICTORIA_FALLS_VMMO);
|
||||
|
||||
// Start process.
|
||||
const limine_file& init_prog = GetInitProgram("/sys/yellowstone");
|
||||
uint64_t entry = LoadElfProgram(
|
||||
*proc, reinterpret_cast<uint64_t>(init_prog.address), init_prog.size);
|
||||
proc->CreateThread()->Start(entry, port_cap, 0);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue