53 lines
1.4 KiB
Plaintext
53 lines
1.4 KiB
Plaintext
--:Minify:--
|
|
local kernel = ...
|
|
kernel.log("Loading init system...")
|
|
kernel.log("InitPath: " .. kernel.config.initPath)
|
|
|
|
local initOk, initErr = pcall(kernel.vfs.access, kernel.config.initPath, "rx")
|
|
if not initOk then
|
|
kernel.PANIC("Init binary not executable: " .. kernel.config.initPath .. " (" .. tostring(initErr) .. ")")
|
|
end
|
|
|
|
local handle = kernel.vfs.open(kernel.config.initPath, "r")
|
|
local data = kernel.vfs.read(handle, 1024 * 1024 * 4)
|
|
kernel.vfs.close(handle)
|
|
|
|
local initFunc, err = load(data, "@sysinit", "t", kernel._U)
|
|
if not initFunc then error("Failed to load init system: " .. err) end
|
|
|
|
kernel.tasks["1"] = {
|
|
coro = coroutine.create(function()
|
|
local ok, err = xpcall(initFunc, debug.traceback, kernel)
|
|
if not ok then
|
|
kernel.panic("Init system crashed: " .. tostring(err))
|
|
else
|
|
kernel.panic("Init system exited: " .. tostring(err))
|
|
end
|
|
end),
|
|
|
|
name = "sysinit",
|
|
status = "R",
|
|
pid = 1,
|
|
tgid = 1,
|
|
uid = 0,
|
|
fd = {},
|
|
envars = {},
|
|
args = {},
|
|
exit = "",
|
|
sleep = 0,
|
|
ivs = 0,
|
|
vs = 0,
|
|
parent = kernel.kernelTask,
|
|
siblings = kernel.kernelTask.children,
|
|
children = {},
|
|
syscallReturn = {},
|
|
cwd = "/",
|
|
timeSlice = 0,
|
|
lastTime = 0,
|
|
totalTime = 0,
|
|
numRuns = 0
|
|
}
|
|
|
|
kernel.log("created init task with PID 1")
|
|
kernel.log("Initializing init system...")
|