feat: add userspace system logging, rename klog to syslog, rename relevant syscalls and API functions
This commit is contained in:
@@ -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/<name>/.
|
||||
@@ -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/<name>/.
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
#include <montauk/syscall.h>
|
||||
|
||||
extern "C" void _start() {
|
||||
|
||||
montauk::write_log("testapp", "hello, logging world!");
|
||||
|
||||
montauk::exit(0);
|
||||
}
|
||||
@@ -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
|
||||
@@ -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;
|
||||
@@ -1,6 +1,6 @@
|
||||
[app]
|
||||
name = "Kernel Log"
|
||||
binary = "klog.elf"
|
||||
name = "System Log"
|
||||
binary = "syslog.elf"
|
||||
icon = "utilities-terminal.svg"
|
||||
|
||||
[menu]
|
||||
Reference in New Issue
Block a user