mirror of
https://github.com/subhobhai943/SUB-OS.git
synced 2026-10-25 16:52:29 +00:00
feat: Growable heap, GUI-by-default run, live sysmon, SUB/SUB default login
Kernel / memory: - mm/kmalloc.c: fix "Heap: Out of memory" under the GUI. The desktop allocates three full-screen 32-bit buffers (~11MB) which overflowed the fixed 16MB pool. The heap now starts at 32MB and grows on demand from the PMM (16MB regions), with region-safe coalescing (only merges physically adjacent blocks) so growth never corrupts across separate PMM allocations. Adds heap_get_grow_count(). Build / run: - Makefile: merge `run-gui` into `run` so `make run` boots into the graphical desktop; add `run-headless` (serial-only via QEMU_CMD), bump guest RAM to 256M, update .PHONY and help. Configure: - scripts/kconfig/menuconfig.py: gate the curses UI behind isatty() on stdin and stdout so non-interactive `make configure` stops emitting "nocbreak() returned ERR" and falls cleanly through to the non-interactive writer. GUI / userland: - gui/gui_apps.c: rebuild the System Monitor from hardcoded values into live telemetry -- real heap used/total/free with a colour-shifting bar, a scrolling heap-utilisation graph, the grow counter, and real PMM RAM figures. - lazybox `free`: report how many times the heap has grown. Auth: - Default login is now SUB / SUB (Kali-style username==password), seeded first as the primary uid-0 account and set as the logged-in user; root kept for compatibility. Hardcoded "root" defaults (whoami, su, passwd, ssh, sshd session) updated to SUB. Verified: clean build on x86_64/aarch64/armv8i; GUI boots with 0 OOM/0 panic; auth engine initialises cleanly; `make configure` fallback is clean. Co-Authored-By: Claude Opus 4.8 <[email protected]> Claude-Session: https://claude.ai/code/session_01Fh5z6V7nGPbHvqVG5p4CXX
This commit is contained in:
1 parent
65fa4dd049
commit
71ad6aca3d
8 files changed
+227
-88
No files matched your search
@@ -829,17 +829,26 @@ def main():
|
||||
print(f"menuconfig: lxdialog front-end failed ({exc}); "
|
||||
f"falling back to the curses UI.", file=sys.stderr)
|
||||
|
||||
# Fallback to Curses GUI replica
|
||||
try:
|
||||
import curses
|
||||
curses.wrapper(run_curses_gui)
|
||||
print(f"*** Configuration saved to {CONFIG_FILE} and {AUTOCONF_HEADER} ***")
|
||||
return
|
||||
except Exception as exc:
|
||||
print(f"menuconfig: curses UI unavailable ({exc}); "
|
||||
f"writing the current configuration non-interactively.", file=sys.stderr)
|
||||
# Fallback to the curses GUI replica, but only when we genuinely have an
|
||||
# interactive terminal on both ends. Probing curses without a real TTY makes
|
||||
# it fail deep inside the wrapper's teardown (e.g. "nocbreak() returned
|
||||
# ERR"), which looked like a crash; gate on isatty so a piped or CI
|
||||
# invocation drops straight to the non-interactive writer instead.
|
||||
if sys.stdin.isatty() and sys.stdout.isatty():
|
||||
try:
|
||||
import curses
|
||||
curses.wrapper(run_curses_gui)
|
||||
print(f"*** Configuration saved to {CONFIG_FILE} and {AUTOCONF_HEADER} ***")
|
||||
return
|
||||
except Exception as exc:
|
||||
print(f"menuconfig: curses UI unavailable ({exc}); "
|
||||
f"writing the current configuration non-interactively.", file=sys.stderr)
|
||||
else:
|
||||
print("menuconfig: no interactive terminal detected; "
|
||||
"writing the current configuration non-interactively.", file=sys.stderr)
|
||||
|
||||
# Last resort: no usable TTY at all.
|
||||
# Last resort: no usable TTY at all. Preserve an existing .config if present,
|
||||
# otherwise fall back to the architecture default so the build never stalls.
|
||||
cfg = load_config()
|
||||
save_config(cfg)
|
||||
print(f"*** Configuration written to {CONFIG_FILE} and {AUTOCONF_HEADER} ***")
|
||||
|
||||
Reference in new issue
Block a user