socsvn commit: r269832 - soc2014/pedrosouza/lua_loader/head/sys/boot/lua

pedrosouza at FreeBSD.org pedrosouza at FreeBSD.org
Sat Jun 21 21:31:43 UTC 2014


Author: pedrosouza
Date: Sat Jun 21 21:31:41 2014
New Revision: 269832
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=269832

Log:
  Added simple boot menu lua scripts

Added:
  soc2014/pedrosouza/lua_loader/head/sys/boot/lua/core.lua
  soc2014/pedrosouza/lua_loader/head/sys/boot/lua/loader.lua
  soc2014/pedrosouza/lua_loader/head/sys/boot/lua/menu.lua
  soc2014/pedrosouza/lua_loader/head/sys/boot/lua/screen.lua

Added: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/core.lua
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2014/pedrosouza/lua_loader/head/sys/boot/lua/core.lua	Sat Jun 21 21:31:41 2014	(r269832)
@@ -0,0 +1,75 @@
+core = {};
+
+function core.setVerbose(b)
+    if (b == nil) then
+        b = not core.verbose;
+    end
+
+    if (b == true) then
+        loader.perform("set boot_verbose=YES");
+    else
+        loader.perform("unset boot_verbose");
+    end
+    core.verbose = b;
+end
+
+function core.setSingleUser(b)
+    if (b == nil) then
+        b = not core.su;
+    end
+
+    if (b == true) then
+        loader.perform("set boot_single=YES");
+    else
+        loader.perform("unset boot_single");
+    end
+    core.su = b;
+end
+
+function core.setACPI(b)
+    if (b == nil) then
+        b = not core.acpi;
+    end
+    
+    if (b == true) then
+        loader.perform("set acpi_load=YES");
+        loader.perform("set hint.acpi.0.disabled=0");
+        loader.perform("unset loader.acpi_disabled_by_user");
+    else
+        loader.perform("unset acpi_load");
+        loader.perform("set hint.acpi.0.disabled=1");
+        loader.perform("set loader.acpi_disabled_by_user=1");
+    end
+    core.acpi = b;
+end
+
+function core.setSafeMode(b)
+    if (b == nil) then
+        b = not core.sm;
+    end
+    if (b == true) then
+        loader.perform("set kern.smp.disabled=1");
+        loader.perform("set hw.ata.ata_dma=0");
+        loader.perform("set hw.ata.atapi_dma=0");
+        loader.perform("set hw.ata.wc=0");
+        loader.perform("set hw.eisa_slots=0");
+        loader.perform("set kern.eventtimer.periodic=1");
+        loader.perform("set kern.geom.part.check_integrity=0");
+    else
+        loader.perform("unset kern.smp.disabled");
+        loader.perform("unset hw.ata.ata_dma");
+        loader.perform("unset hw.ata.atapi_dma");
+        loader.perform("unset hw.ata.wc");
+        loader.perform("unset hw.eisa_slots");
+        loader.perform("unset kern.eventtimer.periodic");
+        loader.perform("unset kern.geom.part.check_integrity");
+    end
+    core.sm = b;
+end
+
+function core.setDefaults()
+    core.setACPI(true);
+    core.setSafeMode(false);
+    core.setSingleUser(false);
+    core.setVerbose(false);
+end
\ No newline at end of file

Added: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/loader.lua
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2014/pedrosouza/lua_loader/head/sys/boot/lua/loader.lua	Sat Jun 21 21:31:41 2014	(r269832)
@@ -0,0 +1,14 @@
+LOADED = {};
+
+function include(filename)
+    if LOADED[filename] == nil then
+        loader.include(filename);
+        LOADED[filename] = true;
+    end
+end
+
+print("Calling include...");
+
+include("/boot/menu.lua");
+print("Included menu.lua");
+menu.run();

Added: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/menu.lua
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2014/pedrosouza/lua_loader/head/sys/boot/lua/menu.lua	Sat Jun 21 21:31:41 2014	(r269832)
@@ -0,0 +1,62 @@
+include("/boot/core.lua");
+include("/boot/screen.lua");
+
+menu = {};
+
+function menu.draw(x, y, opts)
+    screen.setcursor(x, y);
+    print("Boot Menu");
+    for k, v in pairs(opts) do
+        screen.setcursor(x + v.index, y);
+        local name = v.name;
+        
+        if (name == nil) then
+            name = v.getName();
+        end
+        print(k .. " - " .. name);
+    end
+end
+
+function menu.run(opts)
+    if (opts == nil) then
+        opts = menu.options;
+    end
+    screen.clear();
+    while true do
+        menu.draw(0, 0, opts);
+        local ch = string.char(io.getchar());
+        if (opts[ch] ~= nil) then
+            local ret = opts[ch].func();
+            if (ret) then
+                print("Exiting menu!\n");
+                return;
+            end
+        end
+    end
+end
+
+menu.options = {
+    ["1"] = {index = 1, name = "Boot Multi user",       func = function () core.setSingleUser(false); loader.perform("boot"); end},
+    ["2"] = {index = 2, name = "Boot Single user",      func = function () core.setSingleUser(true); loader.perform("boot"); end},
+    ["3"] = {index = 3, name = "Escape to lua interpreter", func = function () return true; end},
+    ["4"] = {index = 4, name = "Reboot",                func = function () loader.perform("reboot"); end},
+    ["5"] = {index = 5, name = "Boot Options",          func = function () menu.run(boot_options); return false; end} ,
+    ["6"] = {index = 6, name = "Load zfs",          func = function () loader.perform("load zfs"); return false; end} 
+};
+
+function OnOff(str, b)
+    if (b) then
+        return str .. ": On";
+    else
+        return str .. ": Off";
+    end
+end
+
+boot_options = {
+    ["1"] = {index = 1, name = "Back to menu", func = function () return true; end },
+    ["2"] = {index = 2, name = "Load System defaults", func = function () core.setDefaults(); return false; end },
+    ["3"] = {index = 3, getName = function () return OnOff("ACPI       ", core.acpi); end, func = function () core.setACPI(); return false; end },
+    ["4"] = {index = 4, getName = function () return OnOff("Safe Mode  ", core.sm); end,   func = function () core.setSafeMode(); return false; end },
+    ["5"] = {index = 5, getName = function () return OnOff("Single user", core.su); end,   func = function () core.setSingleUser(); return false; end },
+    ["6"] = {index = 6, getName = function () return OnOff("Verbose    ", core.verbose); end, func = function () core.setVerbose(); return false; end }
+}
\ No newline at end of file

Added: soc2014/pedrosouza/lua_loader/head/sys/boot/lua/screen.lua
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2014/pedrosouza/lua_loader/head/sys/boot/lua/screen.lua	Sat Jun 21 21:31:41 2014	(r269832)
@@ -0,0 +1,17 @@
+screen = {};
+
+function screen.clear()
+    print("\027[H\027[J");
+end
+
+function screen.setcursor(x, y)
+    print("\027["..x..";"..y.."H");
+end
+
+function screen.setforeground(c)
+    print("\027[3"..c.."m");
+end
+
+function screen.setbackground(c)
+    print("\027[4"..c.."m");
+end
\ No newline at end of file


More information about the svn-soc-all mailing list