From 724029cacb3d19939ea74064063797eccbd65b6b Mon Sep 17 00:00:00 2001 From: Daniel Hammer Date: Fri, 14 Aug 2026 18:37:27 +0200 Subject: [PATCH] feat: add userspace system logging, rename klog to syslog, rename relevant syscalls and API functions --- docs/ssh.md | 2 +- kernel/src/Api/BuildNo.hpp | 2 +- kernel/src/Api/Syscall.cpp | 17 +++++++- kernel/src/Api/Syscall.hpp | 5 ++- kernel/src/Terminal/Terminal.cpp | 2 +- kernel/src/Terminal/Terminal.hpp | 32 ++++++++++++++- montaukos.org/docs/man/syscalls.html | 4 +- programs/GNUmakefile | 14 +++---- programs/include/Api/Syscall.hpp | 4 +- programs/include/libc/montauk.h | 13 ++++--- programs/include/montauk/syscall.h | 8 +++- programs/man/syscalls.2 | 4 +- .../desktop/apps/app_external_launchers.cpp | 4 +- programs/src/desktop/apps/apps_common.hpp | 2 +- programs/src/desktop/input.cpp | 2 +- programs/src/init/main.cpp | 39 +++++++++++++++---- programs/src/logtest/main.cpp | 8 ++++ programs/src/{klog => syslog}/Makefile | 6 +-- programs/src/{klog => syslog}/font_data.cpp | 0 programs/src/{klog => syslog}/main.cpp | 6 +-- programs/src/{klog => syslog}/manifest.toml | 4 +- .../{klog => syslog}/stb_truetype_impl.cpp | 0 scripts/install_apps.sh | 2 +- template/sysroot/include/Api/Syscall.hpp | 4 +- template/sysroot/include/libc/montauk.h | 3 +- template/sysroot/include/montauk/syscall.h | 4 +- 26 files changed, 139 insertions(+), 52 deletions(-) create mode 100644 programs/src/logtest/main.cpp rename programs/src/{klog => syslog}/Makefile (90%) rename programs/src/{klog => syslog}/font_data.cpp (100%) rename programs/src/{klog => syslog}/main.cpp (97%) rename programs/src/{klog => syslog}/manifest.toml (72%) rename programs/src/{klog => syslog}/stb_truetype_impl.cpp (100%) diff --git a/docs/ssh.md b/docs/ssh.md index 79df1a4..e55cb7c 100644 --- a/docs/ssh.md +++ b/docs/ssh.md @@ -85,7 +85,7 @@ usable diagnostics once the desktop is up**, pending the unified syslog. Worth understanding, because it catches out anything written as a daemon: `montauk::print` is `SYS_PRINT`, which writes the kernel *terminal*, not the kernel *log*. Only in-kernel `KernelLogStream` writes raise `g_kernelLogDepth`, -and only those append to the ring buffer `SYS_KLOG` reads -- so daemon output +and only those append to the ring buffer `SYS_LOG` reads -- so daemon output never shows up in `klog`. On top of that, `Sys_Print` returns early once `g_suppressKernelLog` is set, which the desktop does at startup, so the output is discarded outright from then on. `init` spawns services with `spawn` rather than diff --git a/kernel/src/Api/BuildNo.hpp b/kernel/src/Api/BuildNo.hpp index 164480f..844a1c5 100644 --- a/kernel/src/Api/BuildNo.hpp +++ b/kernel/src/Api/BuildNo.hpp @@ -12,4 +12,4 @@ #pragma once -#define MONTAUK_BUILD_NUMBER 120 +#define MONTAUK_BUILD_NUMBER 141 diff --git a/kernel/src/Api/Syscall.cpp b/kernel/src/Api/Syscall.cpp index f221795..5c5a400 100644 --- a/kernel/src/Api/Syscall.cpp +++ b/kernel/src/Api/Syscall.cpp @@ -53,6 +53,8 @@ namespace montauk::abi { static constexpr uint64_t kMaxWindowTitleBytes = 256; static constexpr uint64_t kMaxHostnameBytes = 256; static constexpr uint64_t kMaxUserNameBytes = 32; + static constexpr uint64_t kMaxUserspaceLogComponentNameBytes = 32; + static constexpr uint64_t kMaxUserspaceLogEntryBytes = 1024; // ---- Dispatch ---- @@ -300,9 +302,9 @@ namespace montauk::abi { case SYS_GETRANDOM: if (!UserMemory::Range(frame->arg1, frame->arg2, true)) return -1; return Sys_GetRandom((uint8_t*)frame->arg1, frame->arg2); - case SYS_KLOG: + case SYS_LOG: if (!UserMemory::Range(frame->arg1, frame->arg2, true)) return -1; - return Kt::ReadKernelLog((char*)frame->arg1, frame->arg2); + return Kt::ReadKernelLogBuffer((char*)frame->arg1, frame->arg2); case SYS_MOUSESTATE: if (!UserMemory::Writable(frame->arg1)) return -1; Sys_MouseState((MouseState*)frame->arg1); @@ -609,6 +611,17 @@ namespace montauk::abi { return Sys_ClipboardClear(); case SYS_INPUT_WAIT: return (int64_t)Sys_InputWait(frame->arg1, frame->arg2); + case SYS_LOG_WRITE: { // "init" <---- component name (arg1) + // "started service ..." <---- log message (arg2) + + if (!UserMemory::String(frame->arg1, kMaxUserspaceLogComponentNameBytes) + || !UserMemory::String(frame->arg2, kMaxUserspaceLogEntryBytes) + ) return -1; + + Kt::UserspaceLogStream((const char*)frame->arg1) << (const char*)frame->arg2; + + return 0; + } default: return -1; } diff --git a/kernel/src/Api/Syscall.hpp b/kernel/src/Api/Syscall.hpp index 8179dd1..ca91130 100644 --- a/kernel/src/Api/Syscall.hpp +++ b/kernel/src/Api/Syscall.hpp @@ -103,7 +103,7 @@ namespace montauk::abi { /* Random.hpp */ static constexpr uint64_t SYS_GETRANDOM = 45; - static constexpr uint64_t SYS_KLOG = 46; + static constexpr uint64_t SYS_LOG = 46; /* Mouse.hpp */ static constexpr uint64_t SYS_MOUSESTATE = 47; @@ -157,6 +157,9 @@ namespace montauk::abi { static constexpr uint64_t SYS_AUDIOWRITE = 82; static constexpr uint64_t SYS_AUDIOCTL = 83; + /* Userspace log */ + static constexpr uint64_t SYS_LOG_WRITE = 176; + // Audio control commands (for SYS_AUDIOCTL). // // Commands 0..3 act on the stream named by the handle argument. diff --git a/kernel/src/Terminal/Terminal.cpp b/kernel/src/Terminal/Terminal.cpp index 76c2e94..f98c57a 100644 --- a/kernel/src/Terminal/Terminal.cpp +++ b/kernel/src/Terminal/Terminal.cpp @@ -250,7 +250,7 @@ namespace Kt { g_suppressKernelLog = false; } - int64_t ReadKernelLog(char* buf, uint64_t size) { + int64_t ReadKernelLogBuffer(char* buf, uint64_t size) { if (buf == nullptr || size == 0) return 0; uint64_t toRead = g_klogCount; diff --git a/kernel/src/Terminal/Terminal.hpp b/kernel/src/Terminal/Terminal.hpp index 4783484..13ee22d 100644 --- a/kernel/src/Terminal/Terminal.hpp +++ b/kernel/src/Terminal/Terminal.hpp @@ -121,7 +121,7 @@ namespace Kt // intentionally lock-free: a panic can occur while another CPU owns the // terminal mutex, and the system is about to halt. void EnablePanicOutput(); - int64_t ReadKernelLog(char* buf, uint64_t size); + int64_t ReadKernelLogBuffer(char* buf, uint64_t size); class KernelLogStream { KernelOutStream localStream{}; @@ -151,7 +151,7 @@ public: g_kernelLogDepth++; componentName = desiredComponentName; - localStream << componentName << ": " << "[" << LogLevelToStringWithColor(level) << "] "; + localStream << "[kernel/" << componentName << "] " << LogLevelToStringWithColor(level) << ": "; } ~KernelLogStream() { @@ -168,6 +168,34 @@ public: } }; + class UserspaceLogStream { + KernelOutStream localStream{}; + const char* componentName = ""; + +public: + + UserspaceLogStream(const char* desiredComponentName) { + g_termLock.Acquire(); + g_kernelLogDepth++; + componentName = desiredComponentName; + + localStream << "[userspace/" << componentName << "]" << ": "; + } + + ~UserspaceLogStream() { + localStream << newline; + g_kernelLogDepth--; + g_termLock.Release(); + } + + template + UserspaceLogStream &operator<<(T item) { + localStream << item; + + return *this; + } + }; + }; extern Kt::KernelOutStream kout; diff --git a/montaukos.org/docs/man/syscalls.html b/montaukos.org/docs/man/syscalls.html index 4712ddc..2957a64 100644 --- a/montaukos.org/docs/man/syscalls.html +++ b/montaukos.org/docs/man/syscalls.html @@ -487,9 +487,9 @@ // out: montauk::abi::PowerInfo* KERNEL LOG -SYS_KLOG (46) +SYS_LOG (46) Read from the kernel ring log buffer. - int64_t montauk::read_klog(char* buf, uint64_t size); + int64_t montauk::read_log(char* buf, uint64_t size); I/O REDIRECTION Used by the terminal app and similar programs to run a child diff --git a/programs/GNUmakefile b/programs/GNUmakefile index 5811e34..f81649f 100644 --- a/programs/GNUmakefile +++ b/programs/GNUmakefile @@ -49,7 +49,7 @@ BINDIR := bin PROGRAMS := $(notdir $(wildcard src/*)) # Programs with custom Makefiles (built separately). -CUSTOM_BUILDS := 2048 fetch wiki wikipedia weather imageviewer fontpreview spreadsheet wordprocessor pdfviewer disks devexplorer installer audio music video bluetooth network display keyboard sshserver terminal klog procmgr powermgr calculator charmap desktop login shell paint tcc lua screenshot texteditor mandelbrot printers timezone printd printctl dialogs libloader crashpad sshd +CUSTOM_BUILDS := 2048 fetch wiki wikipedia weather imageviewer fontpreview spreadsheet wordprocessor pdfviewer disks devexplorer installer audio music video bluetooth network display keyboard sshserver terminal syslog procmgr powermgr calculator charmap desktop login shell paint tcc lua screenshot texteditor mandelbrot printers timezone printd printctl dialogs libloader crashpad sshd SYSTEM_PROGRAMS := $(filter-out $(CUSTOM_BUILDS),$(PROGRAMS)) # Build targets: system programs go to bin/os/, apps go to bin/apps//. @@ -96,9 +96,9 @@ WPDIR := data/wallpapers WPSRC := $(wildcard $(WPDIR)/*.jpg) WPDST := $(patsubst $(WPDIR)/%,$(BINDIR)/os/wallpapers/%,$(WPSRC)) -.PHONY: all clean 2048 fetch wiki wikipedia weather imageviewer fontpreview spreadsheet wordprocessor pdfviewer disks devexplorer installer audio music video bluetooth network display keyboard sshserver sshd terminal klog procmgr powermgr calculator charmap login desktop shell paint tcc lua screenshot texteditor mandelbrot printers timezone printd printctl dialogs icons fonts configs osdata bearssl libc tls libjpeg libjpegwrite install-apps libloader crashpad check-syscalls gen-syscalls +.PHONY: all clean 2048 fetch wiki wikipedia weather imageviewer fontpreview spreadsheet wordprocessor pdfviewer disks devexplorer installer audio music video bluetooth network display keyboard sshserver sshd terminal syslog procmgr powermgr calculator charmap login desktop shell paint tcc lua screenshot texteditor mandelbrot printers timezone printd printctl dialogs icons fonts configs osdata bearssl libc tls libjpeg libjpegwrite install-apps libloader crashpad check-syscalls gen-syscalls -all: bearssl libc libjpeg libjpegwrite tls libloader devkit $(TARGETS) fetch wiki wikipedia weather imageviewer fontpreview spreadsheet wordprocessor pdfviewer disks devexplorer installer audio music video bluetooth network display sshserver terminal klog procmgr powermgr calculator charmap 2048 paint tcc lua screenshot texteditor mandelbrot printers timezone printd printctl dialogs login desktop shell sshd icons fonts install-apps crashpad $(MANDST) $(WWWDST) $(CA_CERTS) $(CONFIGDST) $(OSDATADST) $(FWDST) $(LICDST) $(WPDST) +all: bearssl libc libjpeg libjpegwrite tls libloader devkit $(TARGETS) fetch wiki wikipedia weather imageviewer fontpreview spreadsheet wordprocessor pdfviewer disks devexplorer installer audio music video bluetooth network display sshserver terminal syslog procmgr powermgr calculator charmap 2048 paint tcc lua screenshot texteditor mandelbrot printers timezone printd printctl dialogs login desktop shell sshd icons fonts install-apps crashpad $(MANDST) $(WWWDST) $(CA_CERTS) $(CONFIGDST) $(OSDATADST) $(FWDST) $(LICDST) $(WPDST) # Build BearSSL static library (cross-compiled for freestanding x86_64). BEARSSL_INCLUDES := -isystem $(shell cd .. && pwd)/kernel/freestnd-c-hdrs/x86_64/include -isystem $(abspath include/libc) @@ -236,8 +236,8 @@ terminal: libc $(MAKE) -C src/terminal # Build kernel log standalone GUI tool (depends on libc). -klog: libc - $(MAKE) -C src/klog +syslog: libc + $(MAKE) -C src/syslog # Build process manager standalone GUI tool (depends on libc). procmgr: libc @@ -351,7 +351,7 @@ crashpad: libc $(MAKE) -C src/crashpad # Install app bundles (manifests, icons, data files) into bin/apps//. -install-apps: 2048 paint spreadsheet wordprocessor weather wikipedia imageviewer fontpreview pdfviewer disks devexplorer installer audio music video bluetooth network display keyboard sshserver terminal klog procmgr powermgr calculator charmap screenshot texteditor mandelbrot printers timezone crashpad +install-apps: 2048 paint spreadsheet wordprocessor weather wikipedia imageviewer fontpreview pdfviewer disks devexplorer installer audio music video bluetooth network display keyboard sshserver terminal syslog procmgr powermgr calculator charmap screenshot texteditor mandelbrot printers timezone crashpad ../scripts/install_apps.sh # Copy man pages into bin/man/ so mkramdisk.sh picks them up. @@ -506,7 +506,7 @@ clean: $(MAKE) -C src/network clean $(MAKE) -C src/keyboard clean $(MAKE) -C src/terminal clean - $(MAKE) -C src/klog clean + $(MAKE) -C src/syslog clean $(MAKE) -C src/procmgr clean $(MAKE) -C src/powermgr clean $(MAKE) -C src/calculator clean diff --git a/programs/include/Api/Syscall.hpp b/programs/include/Api/Syscall.hpp index b2ed837..10a9d65 100644 --- a/programs/include/Api/Syscall.hpp +++ b/programs/include/Api/Syscall.hpp @@ -60,7 +60,7 @@ namespace montauk::abi { static constexpr uint64_t SYS_TERMSCALE = 43; static constexpr uint64_t SYS_RESOLVE = 44; static constexpr uint64_t SYS_GETRANDOM = 45; - static constexpr uint64_t SYS_KLOG = 46; + static constexpr uint64_t SYS_LOG = 46; static constexpr uint64_t SYS_MOUSESTATE = 47; static constexpr uint64_t SYS_SETMOUSEBOUNDS = 48; static constexpr uint64_t SYS_SPAWN_REDIR = 49; @@ -239,6 +239,8 @@ namespace montauk::abi { static constexpr uint64_t SYS_SETENVIRON = 172; static constexpr uint64_t SYS_SPAWN_ENV = 173; + static constexpr uint64_t SYS_LOG_WRITE = 176; // (componentName, logMessage) -> 0 + // Tunable parameters (for SYS_SDR_SETPARAM / SYS_SDR_GETPARAM). static constexpr int SDR_PARAM_FREQ = 0; // center frequency, Hz static constexpr int SDR_PARAM_SAMPLE_RATE = 1; // sample rate, Hz diff --git a/programs/include/libc/montauk.h b/programs/include/libc/montauk.h index 98d9aca..496ac6f 100644 --- a/programs/include/libc/montauk.h +++ b/programs/include/libc/montauk.h @@ -69,15 +69,10 @@ extern "C" { #define MTK_SYS_TERMSCALE 43 #define MTK_SYS_RESOLVE 44 #define MTK_SYS_GETRANDOM 45 -#define MTK_SYS_KLOG 46 +#define MTK_SYS_LOG 46 #define MTK_SYS_MOUSESTATE 47 #define MTK_SYS_SETMOUSEBOUNDS 48 #define MTK_SYS_SPAWN_REDIR 49 -#define MTK_SYS_GETENVIRON 171 -#define MTK_SYS_SETENVIRON 172 -#define MTK_SYS_SPAWN_ENV 173 -#define MTK_SYS_SETSESSION 174 -#define MTK_SYS_KILLSESSION 175 #define MTK_SYS_CHILDIO_READ 50 #define MTK_SYS_CHILDIO_WRITE 51 #define MTK_SYS_CHILDIO_WRITEKEY 52 @@ -199,6 +194,12 @@ extern "C" { #define MTK_SYS_MMAP_ANON 168 #define MTK_SYS_MUNMAP 169 #define MTK_SYS_MPROTECT 170 +#define MTK_SYS_GETENVIRON 171 +#define MTK_SYS_SETENVIRON 172 +#define MTK_SYS_SPAWN_ENV 173 +#define MTK_SYS_SETSESSION 174 +#define MTK_SYS_KILLSESSION 175 +#define MTK_SYS_LOG_WRITE 176 /* @SYSCALLS-END */ #define MTK_SOCK_TCP 1 diff --git a/programs/include/montauk/syscall.h b/programs/include/montauk/syscall.h index 7031953..9771295 100644 --- a/programs/include/montauk/syscall.h +++ b/programs/include/montauk/syscall.h @@ -430,8 +430,12 @@ namespace montauk { } // Kernel log - inline int64_t read_klog(char* buf, uint64_t size) { - return syscall2(montauk::abi::SYS_KLOG, (uint64_t)buf, size); + inline int64_t read_log(char* buf, uint64_t size) { + return syscall2(montauk::abi::SYS_LOG, (uint64_t)buf, size); + } + + inline int64_t write_log(const char* userspaceComponent, const char* logMessage) { + return syscall2(montauk::abi::SYS_LOG_WRITE, (uint64_t)userspaceComponent, (uint64_t)logMessage); } // I/O redirection diff --git a/programs/man/syscalls.2 b/programs/man/syscalls.2 index a8de620..e3e993c 100644 --- a/programs/man/syscalls.2 +++ b/programs/man/syscalls.2 @@ -418,9 +418,9 @@ // out: montauk::abi::PowerInfo* .SH KERNEL LOG -.B SYS_KLOG (46) +.B SYS_LOG (46) Read from the kernel ring log buffer. - int64_t montauk::read_klog(char* buf, uint64_t size); + int64_t montauk::read_log(char* buf, uint64_t size); .SH I/O REDIRECTION Used by the terminal app and similar programs to run a child diff --git a/programs/src/desktop/apps/app_external_launchers.cpp b/programs/src/desktop/apps/app_external_launchers.cpp index 8c0689c..a1a376c 100644 --- a/programs/src/desktop/apps/app_external_launchers.cpp +++ b/programs/src/desktop/apps/app_external_launchers.cpp @@ -27,9 +27,9 @@ void open_texteditor(DesktopState* ds) { spawn_app("0:/apps/texteditor/texteditor.elf"); } -void open_klog(DesktopState* ds) { +void open_syslog(DesktopState* ds) { (void)ds; - spawn_app("0:/apps/klog/klog.elf"); + spawn_app("0:/apps/klog/syslog.elf"); } void open_wordprocessor(DesktopState* ds) { diff --git a/programs/src/desktop/apps/apps_common.hpp b/programs/src/desktop/apps/apps_common.hpp index e96c82e..3cf929a 100644 --- a/programs/src/desktop/apps/apps_common.hpp +++ b/programs/src/desktop/apps/apps_common.hpp @@ -249,7 +249,7 @@ void open_system_configuration(DesktopState* ds); void ensure_filemanager_icons_loaded(DesktopState* ds); void open_calculator(DesktopState* ds); void open_texteditor(DesktopState* ds); -void open_klog(DesktopState* ds); +void open_syslog(DesktopState* ds); void open_settings(DesktopState* ds); void open_user_manager(DesktopState* ds); void open_reboot_dialog(DesktopState* ds); diff --git a/programs/src/desktop/input.cpp b/programs/src/desktop/input.cpp index 8e6064a..0dde205 100644 --- a/programs/src/desktop/input.cpp +++ b/programs/src/desktop/input.cpp @@ -897,7 +897,7 @@ void gui::desktop_handle_keyboard(DesktopState* ds, const montauk::abi::KeyEvent return; } if (routed_key.ascii == 'k' || routed_key.ascii == 'K') { - open_klog(ds); + open_syslog(ds); return; } } diff --git a/programs/src/init/main.cpp b/programs/src/init/main.cpp index 3da4849..1518fec 100644 --- a/programs/src/init/main.cpp +++ b/programs/src/init/main.cpp @@ -21,6 +21,15 @@ #define C_CYAN "\033[36m" #define C_WHITE "\033[37m" +// ---- Process scan ---- + +static bool system_already_initialized() { + /* A valid init will always be PID 0 */ + + if (montauk::getpid() != 0) return true; + return false; +} + // ---- Logging ---- static void log_timestamp(char* buf, int size) { @@ -39,16 +48,16 @@ static void log(LogLevel level, const char* msg) { const char* tag; const char* color; switch (level) { - case LOG_OK: tag = " OK "; color = C_GREEN; break; - case LOG_INFO: tag = " INFO "; color = C_CYAN; break; - case LOG_WARN: tag = " WARN "; color = C_YELLOW; break; - case LOG_ERR: tag = " FAIL "; color = C_RED; break; + case LOG_OK: tag = "OK:"; color = C_GREEN; break; + case LOG_INFO: tag = "INFO:"; color = C_CYAN; break; + case LOG_WARN: tag = "WARN:"; color = C_YELLOW; break; + case LOG_ERR: tag = "FAIL:"; color = C_RED; break; } snprintf(line, sizeof(line), - C_DIM "%s" C_RESET " %s%s" C_RESET " " C_BOLD "init" C_RESET " %s\n", + C_DIM "%s" C_RESET " %s%s" C_RESET " %s", ts, color, tag, msg); - montauk::print(line); + montauk::write_log("init", line); } static void log_ok(const char* msg) { log(LOG_OK, msg); } @@ -178,11 +187,27 @@ static bool run_configured_service(const montauk::toml::Doc& doc, return run_configured_service(doc, fallback_service, fallback_depth + 1); } +const char* getReleaseString(char* buffer, int n) { + montauk::abi::SysInfo info; + montauk::get_info(&info); + + snprintf(buffer, n, "The Montauk Operating System, version %s (build %u)", + info.osVersion, info.buildNumber); + + return buffer; +} + // ---- Main ---- extern "C" void _start() { + if (system_already_initialized()) { + montauk::exit(1); + } - log_info("The Montauk Operating System"); + char releaseString[128] = ""; + getReleaseString(releaseString, 128); + + log_info(releaseString); auto config = montauk::config::load("init"); int discovered = 0; diff --git a/programs/src/logtest/main.cpp b/programs/src/logtest/main.cpp new file mode 100644 index 0000000..5d17326 --- /dev/null +++ b/programs/src/logtest/main.cpp @@ -0,0 +1,8 @@ +#include + +extern "C" void _start() { + + montauk::write_log("testapp", "hello, logging world!"); + + montauk::exit(0); +} \ No newline at end of file diff --git a/programs/src/klog/Makefile b/programs/src/syslog/Makefile similarity index 90% rename from programs/src/klog/Makefile rename to programs/src/syslog/Makefile index b0c2478..d279877 100644 --- a/programs/src/klog/Makefile +++ b/programs/src/syslog/Makefile @@ -1,4 +1,4 @@ -# Makefile for klog (standalone Window Server app) on MontaukOS +# Makefile for syslog (standalone Window Server app) on MontaukOS # Copyright (c) 2026 Daniel Hammer MAKEFLAGS += -rR @@ -45,14 +45,14 @@ SRCS := main.cpp stb_truetype_impl.cpp font_data.cpp OBJS := $(addprefix $(OBJDIR)/,$(SRCS:.cpp=.o)) DEPS := $(OBJS:.o=.d) -TARGET := $(BINDIR)/apps/klog/klog.elf +TARGET := $(BINDIR)/apps/syslog/syslog.elf .PHONY: all clean all: $(TARGET) $(TARGET): $(OBJS) $(LINK_LD) Makefile $(LIBDIR)/libc/liblibc.a - mkdir -p $(BINDIR)/apps/klog + mkdir -p $(BINDIR)/apps/syslog $(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJS) $(LIBDIR)/libc/liblibc.a -o $@ $(OBJDIR)/%.o: %.cpp Makefile diff --git a/programs/src/klog/font_data.cpp b/programs/src/syslog/font_data.cpp similarity index 100% rename from programs/src/klog/font_data.cpp rename to programs/src/syslog/font_data.cpp diff --git a/programs/src/klog/main.cpp b/programs/src/syslog/main.cpp similarity index 97% rename from programs/src/klog/main.cpp rename to programs/src/syslog/main.cpp index 1fbbb9b..5ff5ecd 100644 --- a/programs/src/klog/main.cpp +++ b/programs/src/syslog/main.cpp @@ -68,7 +68,7 @@ static bool klog_poll() { if (now - g_klog.last_poll_ms < KLOG_POLL_MS) return false; g_klog.last_poll_ms = now; - int n = (int)montauk::read_klog(g_klog.klog_buf, KLOG_READ_SIZE); + int n = (int)montauk::read_log(g_klog.klog_buf, KLOG_READ_SIZE); if (n <= 0 && g_klog.last_len <= 0) return false; if (n > g_klog.last_len) { @@ -157,7 +157,7 @@ extern "C" void _start() { if (!fonts::init()) montauk::exit(1); - if (!g_win.create("Kernel Log", INIT_W, INIT_H)) + if (!g_win.create("System Log", INIT_W, INIT_H)) montauk::exit(1); int cols = g_win.width / mono_cell_width(); @@ -180,7 +180,7 @@ extern "C" void _start() { g_klog.last_pixels = g_win.pixels; - int n = (int)montauk::read_klog(g_klog.klog_buf, KLOG_READ_SIZE); + int n = (int)montauk::read_log(g_klog.klog_buf, KLOG_READ_SIZE); if (n > 0) { klog_refeed(n); g_klog.last_len = n; diff --git a/programs/src/klog/manifest.toml b/programs/src/syslog/manifest.toml similarity index 72% rename from programs/src/klog/manifest.toml rename to programs/src/syslog/manifest.toml index 14e9678..85d5cd6 100644 --- a/programs/src/klog/manifest.toml +++ b/programs/src/syslog/manifest.toml @@ -1,6 +1,6 @@ [app] -name = "Kernel Log" -binary = "klog.elf" +name = "System Log" +binary = "syslog.elf" icon = "utilities-terminal.svg" [menu] diff --git a/programs/src/klog/stb_truetype_impl.cpp b/programs/src/syslog/stb_truetype_impl.cpp similarity index 100% rename from programs/src/klog/stb_truetype_impl.cpp rename to programs/src/syslog/stb_truetype_impl.cpp diff --git a/scripts/install_apps.sh b/scripts/install_apps.sh index 465d8e4..15afac4 100755 --- a/scripts/install_apps.sh +++ b/scripts/install_apps.sh @@ -35,7 +35,7 @@ APPS=( "keyboard|categories/scalable/preferences-keyboard.svg" "sshserver|apps/scalable/utilities-terminal.svg" "terminal|apps/scalable/utilities-terminal.svg" - "klog|apps/scalable/utilities-terminal.svg" + "syslog|apps/scalable/utilities-terminal.svg" "procmgr|apps/scalable/system-monitor.svg" "powermgr|apps/scalable/gnome-power-statistics.svg" "calculator|apps/scalable/accessories-calculator.svg" diff --git a/template/sysroot/include/Api/Syscall.hpp b/template/sysroot/include/Api/Syscall.hpp index dd20270..a49cc99 100644 --- a/template/sysroot/include/Api/Syscall.hpp +++ b/template/sysroot/include/Api/Syscall.hpp @@ -60,7 +60,7 @@ namespace montauk::abi { static constexpr uint64_t SYS_TERMSCALE = 43; static constexpr uint64_t SYS_RESOLVE = 44; static constexpr uint64_t SYS_GETRANDOM = 45; - static constexpr uint64_t SYS_KLOG = 46; + static constexpr uint64_t SYS_LOG = 46; static constexpr uint64_t SYS_MOUSESTATE = 47; static constexpr uint64_t SYS_SETMOUSEBOUNDS = 48; static constexpr uint64_t SYS_SPAWN_REDIR = 49; @@ -234,6 +234,8 @@ namespace montauk::abi { static constexpr uint64_t SYS_WIFI_CONNECT_ASYNC = 164; // (ssid, password) -> 0 accepted, <0 on error static constexpr uint64_t SYS_NETIFS = 165; // (NetIfInfo*, maxCount) -> count + static constexpr uint64_t SYS_LOG_WRITE = 176; // (componentName, logMessage) -> 0 + // Tunable parameters (for SYS_SDR_SETPARAM / SYS_SDR_GETPARAM). static constexpr int SDR_PARAM_FREQ = 0; // center frequency, Hz static constexpr int SDR_PARAM_SAMPLE_RATE = 1; // sample rate, Hz diff --git a/template/sysroot/include/libc/montauk.h b/template/sysroot/include/libc/montauk.h index 2ac8269..b9654b7 100644 --- a/template/sysroot/include/libc/montauk.h +++ b/template/sysroot/include/libc/montauk.h @@ -69,7 +69,7 @@ extern "C" { #define MTK_SYS_TERMSCALE 43 #define MTK_SYS_RESOLVE 44 #define MTK_SYS_GETRANDOM 45 -#define MTK_SYS_KLOG 46 +#define MTK_SYS_LOG 46 #define MTK_SYS_MOUSESTATE 47 #define MTK_SYS_SETMOUSEBOUNDS 48 #define MTK_SYS_SPAWN_REDIR 49 @@ -194,6 +194,7 @@ extern "C" { #define MTK_SYS_WIFI_RESULTS 163 #define MTK_SYS_WIFI_CONNECT_ASYNC 164 #define MTK_SYS_NETIFS 165 +#define MTK_SYS_LOG_WRITE 176 /* @SYSCALLS-END */ #define MTK_SOCK_TCP 1 diff --git a/template/sysroot/include/montauk/syscall.h b/template/sysroot/include/montauk/syscall.h index 4472e8c..203e050 100644 --- a/template/sysroot/include/montauk/syscall.h +++ b/template/sysroot/include/montauk/syscall.h @@ -428,8 +428,8 @@ namespace montauk { } // Kernel log - inline int64_t read_klog(char* buf, uint64_t size) { - return syscall2(montauk::abi::SYS_KLOG, (uint64_t)buf, size); + inline int64_t read_log(char* buf, uint64_t size) { + return syscall2(montauk::abi::SYS_LOG, (uint64_t)buf, size); } // I/O redirection