forked from Hyperion/HyperionOS
update to start working on SysInit
This commit is contained in:
@@ -14,29 +14,34 @@ kernel.group = "root"
|
||||
kernel.groups = {0}
|
||||
kernel.uid = 0
|
||||
kernel.gid = 0
|
||||
kernel.stage = "start"
|
||||
kernel.status = "start"
|
||||
kernel.key = {}
|
||||
kernel.chache = {}
|
||||
kernel.chache.preload = {}
|
||||
kernel.cache = {}
|
||||
kernel.cache.preload = {}
|
||||
kernel._G=_G
|
||||
local windowsExp = false
|
||||
|
||||
function kernel.log(msg, level)
|
||||
LOG_Text = LOG_Text..tostring(computer.time()).." "..kernel.user.." "..kernel.process.."["..tostring(level or "INFO").."]: "..msg.."\n"
|
||||
if kernel.stage == "start" then
|
||||
if kernel.status == "start" then
|
||||
screen:print(tostring(computer.time()).." "..kernel.user.." "..kernel.process.."["..tostring(level or "INFO").."]: "..msg)
|
||||
end
|
||||
end
|
||||
|
||||
function kernel.PANIC(msg)
|
||||
kernel.log("PANIC: "..msg, "PANIC")
|
||||
pcall(kernel["saveLog"])
|
||||
screen:setTextColor(2)
|
||||
screen:setBackgroundColor(0)
|
||||
screen:clear()
|
||||
screen:setCursorPos(1,1)
|
||||
screen:print(LOG_Text)
|
||||
screen:print("KERNEL PANIC!\n"..msg.."\nSystem halted.")
|
||||
screen:print("Press any key to continue...")
|
||||
if kernel.status~="Panic" then
|
||||
kernel.log("PANIC: "..msg, "PANIC")
|
||||
pcall(kernel["saveLog"])
|
||||
kernel.status="Panic"
|
||||
kernel.reason=msg
|
||||
screen:setTextColor(2)
|
||||
screen:setBackgroundColor(0)
|
||||
screen:clear()
|
||||
screen:setCursorPos(1,1)
|
||||
screen:print(LOG_Text)
|
||||
screen:print("KERNEL PANIC!\n"..msg.."\nSystem halted.")
|
||||
screen:print("Press any key to continue...")
|
||||
end
|
||||
while true do
|
||||
local event={computer:getMachineEvent()}
|
||||
if event[1]=="keyPressed" then
|
||||
@@ -65,16 +70,12 @@ if windowsExp then
|
||||
while true do end
|
||||
end
|
||||
|
||||
kernel.log("Kernel loaded.", "INFO")
|
||||
kernel.log("Mounting disks...", "INFO")
|
||||
kernel.log("Kernel loaded.")
|
||||
kernel.log("Mounting init disks...")
|
||||
disks.refresh()
|
||||
ifs.update(disks)
|
||||
ifs.mount("$", "/")
|
||||
|
||||
function kernel.saveLog()
|
||||
ifs.writeAllText("/var/log/syslog.log", LOG_Text)
|
||||
end
|
||||
|
||||
local fstab=ifs.readAllText("/etc/fstab")
|
||||
local split = function(str, delim, maxResultCountOrNil)
|
||||
assert(#delim == 1, "only delim len 1 supported for now")
|
||||
@@ -104,11 +105,15 @@ for i,v in ipairs(split(fstab,"\n")) do
|
||||
end
|
||||
end
|
||||
local path=v:sub(#id+4)
|
||||
kernel.log("Mounted "..id.." to "..path)
|
||||
ifs.mount(id,path)
|
||||
::endline::
|
||||
end
|
||||
end
|
||||
kernel.log("Disks initialized")
|
||||
|
||||
function kernel.saveLog()
|
||||
ifs.writeAllText("/var/log/syslog.log", LOG_Text)
|
||||
end
|
||||
|
||||
ifs.remove("/tmp")
|
||||
ifs.makeDir("/tmp")
|
||||
@@ -116,29 +121,24 @@ ifs.makeDir("/tmp")
|
||||
local drivers={}
|
||||
drivers.raw={}
|
||||
drivers.processes={}
|
||||
drivers.prior={}
|
||||
drivers.type={}
|
||||
for i=0, 99 do
|
||||
drivers.prior[i]={}
|
||||
end
|
||||
|
||||
function drivers.register(prior,object)
|
||||
function drivers.register(object)
|
||||
drivers.raw[#drivers.raw+1]=object
|
||||
if object.main then drivers.processes[#drivers.processes+1]=object.main end
|
||||
if drivers.prior[prior]==nil then drivers.prior[prior]={} end
|
||||
drivers.prior[prior][#drivers.prior[prior]+1]=object
|
||||
if drivers.type[object.type]==nil then drivers.type[object.type]={} end
|
||||
drivers.type[object.type][#drivers.type[object.type]+1]=object
|
||||
end
|
||||
|
||||
local modules={}
|
||||
for i=0, 99 do
|
||||
local modules={[0]={}}
|
||||
for i=0, 100 do
|
||||
modules[i]={}
|
||||
end
|
||||
|
||||
kernel.log("Gathering modules")
|
||||
for i,v in ipairs(ifs.list("/lib/modules/Hyperion/")) do
|
||||
local prior=tonumber(v:sub(1,2))
|
||||
modules[prior][#modules[prior]+1]="/lib/modules/Hyperion/"..v
|
||||
modules[prior+1][#modules[prior+1]+1]="/lib/modules/Hyperion/"..v
|
||||
end
|
||||
|
||||
kernel.drivers=drivers
|
||||
@@ -147,19 +147,17 @@ kernel.apis=apis
|
||||
kernel.computer=computer
|
||||
kernel.initPath=initPath
|
||||
kernel.arch=arch
|
||||
kernel.initdisks=initdisks
|
||||
kernel.initdisks=disks
|
||||
kernel.screen=screen
|
||||
|
||||
kernel.log("Running modules")
|
||||
for _,p in ipairs(modules) do
|
||||
for _,v in ipairs(p) do
|
||||
local code=ifs.readAllText(v)
|
||||
local func,err=load(code,"@"..v)
|
||||
if not func then kernel.log("ModuLoadErr: "..tostring(err)) goto skip end
|
||||
local status, err = xpcall(func,debug.traceback,kernel)
|
||||
if not status then goto skip end
|
||||
if not err then goto skip end
|
||||
if not err.init then goto skip end
|
||||
local ok, err = xpcall(status.main,debug.traceback)
|
||||
if not ok then kernel.log("ModuInitErr: "..tostring(err)) end
|
||||
if not func then kernel.log("ModuLoadErr: "..tostring(err), "WARN") goto skip end
|
||||
local status, err = xpcall(func,debug.traceback, kernel)
|
||||
if not status then kernel.log("ModuRunErr: "..tostring(err), "WARN") end
|
||||
::skip::
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user