docs - refresh man pages

This commit is contained in:
daniel committed 2026-10-14 07:31:20 +02:00
1 parent 7eda8b1a8d
commit a463834e0a
21 files changed
+731 -283

No files matched your search

+7 -2
View File
@@ -111,9 +111,11 @@
<pre><code><strong>NAME</strong>
dhcp - obtain network configuration via DHCP
<strong>SYNOPSIS</strong>
dhcp
<strong>DESCRIPTION</strong>
The DHCP client automatically obtains an IP address, subnet mask,
default gateway, and other network parameters from a DHCP server
@@ -126,6 +128,7 @@
The client is run automatically by the init system at boot, but
may also be invoked manually from the shell.
<strong>PROTOCOL</strong>
The client performs the standard four-message DHCP exchange:
@@ -140,11 +143,13 @@
Each step has a 10-second timeout. If no response is received
the client exits with an error and restores the previous config.
<strong>OUTPUT</strong>
On success the client prints the assigned configuration:
IP Address, Subnet Mask, Gateway, DNS Server, Lease Time
<strong>OPTIONS</strong>
The DHCP client requests the following options from the server:
@@ -153,9 +158,9 @@
6 DNS Server
51 Lease Time
<strong>SEE ALSO</strong>
ifconfig(1), shell(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
ifconfig(1), <a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+10 -2
View File
@@ -111,9 +111,11 @@
<pre><code><strong>NAME</strong>
edit - text editor for MontaukOS
<strong>SYNOPSIS</strong>
edit [filename]
<strong>DESCRIPTION</strong>
edit is an interactive text editor. When invoked with a filename,
it opens the file for editing. If the file does not exist, a new
@@ -122,8 +124,10 @@
When invoked without arguments, edit opens an empty buffer. You
will be prompted for a filename when saving.
<strong>KEYBOARD SHORTCUTS</strong>
<strong>Navigation</strong>
Arrow Keys Move cursor up/down/left/right
Home Move to start of line
@@ -131,18 +135,21 @@
Page Up Scroll up one page
Page Down Scroll down one page
<strong>Editing</strong>
Backspace Delete character before cursor
Delete Delete character at cursor
Enter Insert new line
Tab Insert 4 spaces
<strong>Commands</strong>
Ctrl+S Save file
Ctrl+Q Quit (warns if unsaved changes)
Ctrl+F Search for text
Ctrl+G Find next occurrence
<strong>DISPLAY</strong>
The top line shows the filename, a modified indicator [+],
and the current cursor position (Ln, Col).
@@ -152,13 +159,14 @@
Line numbers are displayed in a gutter on the left side.
Lines past the end of the file are marked with ~.
<strong>EXAMPLES</strong>
edit intro.1 Edit a file
edit Open a new empty buffer
<strong>SEE ALSO</strong>
cat(1), shell(1)</code></pre>
<strong>SEE ALSO</strong>
cat(1), <a href="shell.html">shell(1)</a></code></pre>
<hr>
<div class="center">
+8 -2
View File
@@ -111,10 +111,12 @@
<pre><code><strong>NAME</strong>
fetch - HTTP/HTTPS client for MontaukOS
<strong>SYNOPSIS</strong>
fetch [-v] &lt;url&gt;
fetch [-v] &lt;host&gt; &lt;port&gt; [path]
<strong>DESCRIPTION</strong>
fetch performs an HTTP/1.0 GET request and prints the response
body to the terminal. Supports both plain HTTP and HTTPS (TLS 1.2)
@@ -131,12 +133,14 @@
If no path is given, "/" is used.
<strong>OPTIONS</strong>
<strong>-v</strong>
Verbose mode. Print connection info, trust anchor count, TLS
handshake progress, and the HTTP status/size header before
the body.
<strong>EXAMPLES</strong>
fetch https://icanhazip.com
Print your public IP address over HTTPS.
@@ -156,6 +160,7 @@
fetch 10.0.68.1 80 /
Fetch from a local server by IP (legacy syntax).
<strong>TLS SUPPORT</strong>
HTTPS connections use BearSSL for TLS 1.2. Server certificates
are validated against the system CA bundle at
@@ -164,12 +169,13 @@
Entropy for the TLS handshake is provided by RDTSC-seeded
random data via the SYS_GETRANDOM syscall.
<strong>KEYBOARD</strong>
Ctrl+Q Abort the request
<strong>SEE ALSO</strong>
ping(1), nslookup(1), tcpconnect(1), shell(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="ping.html">ping(1)</a>, <a href="nslookup.html">nslookup(1)</a>, tcpconnect(1), <a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+14 -4
View File
@@ -111,6 +111,7 @@
<pre><code><strong>NAME</strong>
open, read, getsize, close, readdir - file I/O system calls
<strong>SYNOPSIS</strong>
<strong>int montauk::open(const char* path);</strong>
<strong>int montauk::read(int handle, uint8_t* buf, uint64_t offset, uint64_t size);</strong>
@@ -118,19 +119,22 @@
<strong>void montauk::close(int handle);</strong>
<strong>int montauk::readdir(const char* path, const char** names, int max);</strong>
<strong>DESCRIPTION</strong>
MontaukOS provides a Virtual File System (VFS) with read/write
support. Drive 0 is the boot ramdisk; additional drives may be
mounted from GPT partitions backed by FAT32 or ext2 (see
syscalls(2), STORAGE section). Files are accessed via paths in
<a href="syscalls.html">syscalls(2)</a>, STORAGE section). Files are accessed via paths in
the format "&lt;drive&gt;:/&lt;path&gt;".
<strong>open</strong>
Opens a file and returns a non-negative handle on success, or a
negative value on error (file not found, no free handles).
int h = montauk::open("0:/os/hello.elf");
<strong>read</strong>
Reads up to 'size' bytes starting at 'offset' into 'buf'.
Returns the number of bytes actually read, or negative on error.
@@ -140,16 +144,19 @@
uint8_t buf[512];
int n = montauk::read(h, buf, 0, 512);
<strong>getsize</strong>
Returns the total size in bytes of the file.
uint64_t sz = montauk::getsize(h);
<strong>close</strong>
Closes the file handle and frees kernel resources.
montauk::close(h);
<strong>readdir</strong>
Lists entries in a directory. Up to 'max' entry names (VFS cap
256, driver-backed listings such as 0:/os/ cap 128) are written
@@ -165,6 +172,7 @@
call, use montauk::readdir_at(path, names, max, startIndex) and
advance startIndex by the returned count until it returns 0.
<strong>READING PATTERN</strong>
The standard pattern for reading a file:
@@ -183,6 +191,7 @@
}
montauk::close(h);
<strong>WRITING, DELETING, RENAMING</strong>
<strong>int montauk::fcreate(const char* path);</strong>
<strong>int montauk::fwrite(int handle, const uint8_t* buf, uint64_t offset, uint64_t size);</strong>
@@ -201,15 +210,16 @@
montauk::fs_mount), changes are written through to storage; use
montauk::fs_sync() to flush caches before power-off.
<strong>NOTES</strong>
Drive 0 is loaded at boot from a USTAR tar archive into RAM.
Other drives are mounted on demand from GPT partitions on
SATA/NVMe/USB block devices; see syscalls(2), STORAGE and
SATA/NVMe/USB block devices; see <a href="syscalls.html">syscalls(2)</a>, STORAGE and
DEVICES sections.
<strong>SEE ALSO</strong>
syscalls(2), spawn(2), malloc(3)</code></pre>
<strong>SEE ALSO</strong>
<a href="syscalls.html">syscalls(2)</a>, <a href="spawn.html">spawn(2)</a>, <a href="malloc.html">malloc(3)</a></code></pre>
<hr>
<div class="center">
+6 -2
View File
@@ -111,11 +111,13 @@
<pre><code><strong>NAME</strong>
fontscale - get or set terminal font scale
<strong>SYNOPSIS</strong>
fontscale
fontscale &lt;n&gt;
fontscale &lt;x&gt; &lt;y&gt;
<strong>DESCRIPTION</strong>
Controls the terminal font scale factor. The Flanterm terminal
emulator renders text at a configurable scale multiplier.
@@ -135,6 +137,7 @@
Valid scale values are 1 through 8. After rescaling, the screen
is cleared.
<strong>OUTPUT</strong>
fontscale
Scale: 1x1 (160 cols x 50 rows)
@@ -142,15 +145,16 @@
fontscale 2
Scale set to 2x2 (80 cols x 25 rows)
<strong>EXAMPLES</strong>
fontscale Show current scale and dimensions
fontscale 2 Double the font size
fontscale 3 2 3x horizontal, 2x vertical
fontscale 1 Reset to default size
<strong>SEE ALSO</strong>
shell(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+12 -4
View File
@@ -111,14 +111,17 @@
<pre><code><strong>NAME</strong>
fb_info, fb_map - direct framebuffer access
<strong>SYNOPSIS</strong>
<strong>void montauk::fb_info(montauk::abi::FbInfo* info);</strong>
<strong>void* montauk::fb_map();</strong>
<strong>DESCRIPTION</strong>
These syscalls allow userspace programs to access the linear
framebuffer directly for graphical output.
<strong>fb_info</strong>
Fills in an FbInfo structure with the framebuffer geometry:
@@ -129,15 +132,18 @@
The pitch is the number of bytes per scanline (may be larger
than width * 4 due to alignment). bpp is always 32.
<strong>fb_map</strong>
Maps the physical framebuffer into the process address space at
a fixed virtual address (0x50000000) and returns that address.
Maps the physical framebuffer into a dedicated region of the process
address space and returns its address. Programs must use the returned
pointer rather than assuming a particular virtual address.
uint32_t* pixels = (uint32_t*)montauk::fb_map();
Each pixel is a 32-bit value in 0xAARRGGBB format (blue in the
low byte). Writing to this memory directly updates the screen.
<strong>PIXEL FORMAT</strong>
Bits 31-24: Alpha (unused, typically 0xFF)
Bits 23-16: Red
@@ -146,6 +152,7 @@
Example: red = 0x00FF0000, green = 0x0000FF00, blue = 0x000000FF
<strong>EXAMPLE</strong>
Fill the screen with blue:
@@ -160,6 +167,7 @@
}
}
<strong>NOTES</strong>
After mapping, the cursor overlay is not composited. Programs
that use the framebuffer take full control of screen output.
@@ -167,9 +175,9 @@
Only one mapping per process is supported. Calling fb_map()
multiple times returns the same address.
<strong>SEE ALSO</strong>
syscalls(2), malloc(3)</code></pre>
<strong>SEE ALSO</strong>
<a href="syscalls.html">syscalls(2)</a>, <a href="malloc.html">malloc(3)</a></code></pre>
<hr>
<div class="center">
+64 -44
View File
@@ -128,56 +128,51 @@ Manual pages for MontaukOS, viewable in-system with the <a href="man.html">man(1
<ul class="doc-list">
<li>
<a href="intro.html">intro(1)</a>
<p>introduction to MontaukOS userspace</p>
</li>
<li>
<a href="shell.html">shell(1)</a>
<p>MontaukOS interactive command shell</p>
</li>
<li>
<a href="init.html">init(1)</a>
<p>MontaukOS init system</p>
</li>
<li>
<a href="dhcp.html">dhcp(1)</a>
<p>obtain network configuration via DHCP</p>
</li>
<li>
<a href="fetch.html">fetch(1)</a>
<p>HTTP/HTTPS client for MontaukOS</p>
</li>
<li>
<a href="ping.html">ping(1)</a>
<p>send ICMP echo requests</p>
</li>
<li>
<a href="nslookup.html">nslookup(1)</a>
<p>DNS hostname lookup</p>
</li>
<li>
<a href="fontscale.html">fontscale(1)</a>
<p>get or set terminal font scale</p>
</li>
<li>
<a href="edit.html">edit(1)</a>
<p>text editor for MontaukOS</p>
</li>
<li>
<a href="fetch.html">fetch(1)</a>
<p>HTTP/HTTPS client for MontaukOS</p>
</li>
<li>
<a href="fontscale.html">fontscale(1)</a>
<p>get or set terminal font scale</p>
</li>
<li>
<a href="init.html">init(1)</a>
<p>MontaukOS init system</p>
</li>
<li>
<a href="intro.html">intro(1)</a>
<p>introduction to MontaukOS userspace</p>
</li>
<li>
<a href="man.html">man(1)</a>
<p>display manual pages</p>
</li>
<li>
<a href="nslookup.html">nslookup(1)</a>
<p>DNS hostname lookup</p>
</li>
<li>
<a href="ping.html">ping(1)</a>
<p>send ICMP echo requests</p>
</li>
<li>
<a href="printctl.html">printctl(1)</a>
<p>configure printers and submit print jobs</p>
@@ -188,6 +183,26 @@ Manual pages for MontaukOS, viewable in-system with the <a href="man.html">man(1
<p>MontaukOS userspace print spooler daemon</p>
</li>
<li>
<a href="shell.html">shell(1)</a>
<p>MontaukOS interactive command shell</p>
</li>
<li>
<a href="sshd.html">sshd(1)</a>
<p>MontaukOS SSH-2 server</p>
</li>
<li>
<a href="vol.html">vol(1)</a>
<p>list mounted volumes</p>
</li>
<li>
<a href="wifi.html">wifi(1)</a>
<p>scan for wireless networks and inspect the Wi-Fi adapter</p>
</li>
<li>
<a href="wiki.html">wiki(1)</a>
<p>Wikipedia article viewer for MontaukOS</p>
@@ -200,8 +215,13 @@ Manual pages for MontaukOS, viewable in-system with the <a href="man.html">man(1
<ul class="doc-list">
<li>
<a href="syscalls.html">syscalls(2)</a>
<p>overview of MontaukOS system calls</p>
<a href="file.html">file(2)</a>
<p>file I/O system calls</p>
</li>
<li>
<a href="framebuffer.html">framebuffer(2)</a>
<p>direct framebuffer access</p>
</li>
<li>
@@ -210,13 +230,8 @@ Manual pages for MontaukOS, viewable in-system with the <a href="man.html">man(1
</li>
<li>
<a href="file.html">file(2)</a>
<p>file I/O system calls</p>
</li>
<li>
<a href="framebuffer.html">framebuffer(2)</a>
<p>direct framebuffer access</p>
<a href="syscalls.html">syscalls(2)</a>
<p>overview of MontaukOS system calls</p>
</li>
</ul>
@@ -230,6 +245,11 @@ Manual pages for MontaukOS, viewable in-system with the <a href="man.html">man(1
<p>userspace heap allocation</p>
</li>
<li>
<a href="rtlsdr.html">rtlsdr(3)</a>
<p>userspace RTL2832U and R820T2 radio driver</p>
</li>
</ul>
<h2>File Formats / Reference (Section 5)</h2>
+26 -12
View File
@@ -111,30 +111,44 @@
<pre><code><strong>NAME</strong>
init - MontaukOS init system
<strong>SYNOPSIS</strong>
Spawned automatically by the kernel as PID 0.
<strong>DESCRIPTION</strong>
init is the first userspace process started by the MontaukOS
kernel. It chains system services in sequence, then launches
the interactive shell.
kernel. It discovers system services from 0:/config/init.toml
and starts them in the order their tables appear in that file.
Each service is spawned as a child process. init waits for it
to exit before starting the next one. If a service fails to
spawn, init logs an error and continues to the next stage.
Each enabled service is spawned as a child process. Services may
run in the background or block startup until they exit. Disabled
services are logged and skipped.
Log output is timestamped and color-coded:
HH:MM:SS INFO init Starting dhcp
HH:MM:SS OK init dhcp finished (pid 1)
<strong>BOOT SEQUENCE</strong>
The following services are started in order:
1. 0:/os/dhcp.elf Obtain network configuration via DHCP
2. 0:/os/shell.elf Launch the interactive shell
<strong>CONFIGURATION</strong>
Each service is declared as a named TOML table:
[services.dhcp]
path = "0:/os/dhcp.elf"
enabled = true
wait = false
path is required. name controls the name shown in the boot log and
defaults to the table name. enabled and wait both default to true.
optional skips a service whose executable is not installed.
fallback names another configured service to start if spawning the
service fails. A service with fallback_only = true is available as
a fallback but is not started during the normal pass.
After all foreground services exit, init enters an idle loop.
After the shell exits, init enters an idle loop.
<strong>LOG LEVELS</strong>
init uses four log levels, each with a distinct color:
@@ -144,9 +158,9 @@
WARN Yellow Non-fatal warning
FAIL Red Service failed to start
<strong>SEE ALSO</strong>
dhcp(1), shell(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="dhcp.html">dhcp(1)</a>, <a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+47 -55
View File
@@ -111,31 +111,22 @@
<pre><code><strong>NAME</strong>
intro - introduction to MontaukOS userspace
<strong>DESCRIPTION</strong>
MontaukOS is a hobbyist 64-bit operating system written in C++20,
currently at version 0.1.7 (API version 8). Userspace programs
MontaukOS is a 64-bit operating system written in C++20,
currently at version 0.2.0 (API version 11). Userspace programs
run in Ring 3, are loaded as static ELF64 binaries, and
communicate with the kernel through the x86-64 SYSCALL/SYSRET
mechanism (150 syscalls -- see syscalls(2)).
mechanism (roughly 190 syscall numbers, 0-189 - see <a href="syscalls.html">syscalls(2)</a>).
Programs are built with the x86_64-montauk cross toolchain and
linked at virtual address 0x400000. MontaukOS has its own C
library along with the Montauk API (montauk:: wrappers).
Programs are compiled with a freestanding cross-compiler and
linked at virtual address 0x400000. There is no standard C
library for C++ programs -- all system interaction goes through
the montauk:: syscall wrappers. A desktop environment with a
window server, GUI apps, and Bluetooth/audio/networking stacks
runs on top of the same syscall API.
<strong>GETTING STARTED</strong>
To write a new system/CLI program, create a directory under
programs/src/ with a main.cpp file. The entry point is:
extern "C" void _start() { ... }
There is no argc/argv. Use montauk::getargs() to retrieve any
arguments passed by the parent process. Include &lt;montauk/syscall.h&gt;
for the full typed syscall API. GUI apps additionally use
win_create()/win_poll()/win_present() from montauk/Window.hpp
(see framebuffer(2)).
programs/src/ with a main.cpp file.
Build with:
@@ -144,64 +135,65 @@
System/CLI binaries appear in programs/bin/os/; GUI app bundles
(ELF + manifest.toml + icon) appear under programs/bin/apps/&lt;name&gt;/.
<strong>RAMDISK LAYOUT</strong>
The boot ramdisk is mounted as drive 0 with the following
directory structure:
0:/os/ System/CLI binaries (shell, init, man, etc.),
plus os-owned data: certs/, firmware/,
licenses/, wallpapers/
0:/apps/ GUI app bundles, one directory per app
(&lt;app&gt;.elf + manifest.toml + icon)
0:/os/ System/CLI binaries, os data
0:/apps/ App bundles
0:/config/ System-wide config TOMLs
0:/users/&lt;name&gt;/ Per-user home directories (created at
login), with Music/, Videos/, Pictures/,
config/ subdirectories
0:/users/&lt;name&gt;/ User home directories
0:/state/ Mutable system runtime state
0:/tmp/ Scratch space
0:/fonts/ Shared fonts
0:/icons/ Shared icons
0:/man/ Manual pages
0:/www/ Web server content
0:/lib/ Lua and TinyCC toolchain payloads
0:/sdk/ Montauk SDK (native gcc/binutils, TinyCC,
Lua, headers and libraries), when installed
0:/boot/ Kernel, bootloader, ramdisk image
There is no 0:/games/, 0:/common/, 0:/home/, or 0:/etc/ --
these were used by earlier single-user releases and no longer
exist. Games and other GUI programs (including doom) ship as
bundles under 0:/apps/.
<strong>SHELL</strong>
The interactive shell is the primary way to interact with
The interactive shell can be used to interact with
MontaukOS. Commands are resolved against the current directory
first, then 0:/os/. Type 'help' at the shell prompt for a list
first, then 0:/os/.
Type 'help' at the shell prompt for a list
of commands. Use 'man shell' for detailed shell documentation.
<strong>MAN PAGES</strong>
The following man pages are available:
intro(1) This page
shell(1) Shell commands reference
init(1) Init system
dhcp(1) DHCP client
fetch(1) HTTP client
ping(1) ICMP ping
nslookup(1) DNS lookup
fontscale(1) Terminal font scaling
edit(1) Text editor
man(1) The man command itself
printctl(1) Printer control
printd(1) Print spooler daemon
wiki(1) Wikipedia article viewer
legal(7) Copyright and legal information
tls-errors(5) TLS/BearSSL error reference
syscalls(2) Overview of all syscalls
spawn(2) Process spawning
file(2) File I/O syscalls
framebuffer(2) Framebuffer access
malloc(3) Memory allocation
<a href="intro.html">intro(1)</a> This page
<a href="shell.html">shell(1)</a> Shell commands reference
<a href="init.html">init(1)</a> Init system
<a href="dhcp.html">dhcp(1)</a> DHCP client
<a href="fetch.html">fetch(1)</a> HTTP client
<a href="ping.html">ping(1)</a> ICMP ping
<a href="nslookup.html">nslookup(1)</a> DNS lookup
<a href="wifi.html">wifi(1)</a> Wi-Fi configuration
<a href="sshd.html">sshd(1)</a> SSH daemon
<a href="fontscale.html">fontscale(1)</a> Terminal font scaling
<a href="edit.html">edit(1)</a> Text editor
<a href="man.html">man(1)</a> The man command itself
<a href="printctl.html">printctl(1)</a> Printer control
<a href="printd.html">printd(1)</a> Print spooler daemon
<a href="wiki.html">wiki(1)</a> Wikipedia article viewer
<a href="legal.html">legal(7)</a> Copyright and legal information
<a href="tls-errors.html">tls-errors(5)</a> TLS/BearSSL error reference
<a href="syscalls.html">syscalls(2)</a> Overview of all syscalls
<a href="spawn.html">spawn(2)</a> Process spawning
<a href="file.html">file(2)</a> File I/O syscalls
<a href="framebuffer.html">framebuffer(2)</a> Framebuffer access
<a href="malloc.html">malloc(3)</a> Memory allocation
<a href="rtlsdr.html">rtlsdr(3)</a> RTL-SDR software radio API
<strong>SEE ALSO</strong>
shell(1), syscalls(2), malloc(3)</code></pre>
<a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a>, <a href="malloc.html">malloc(3)</a></code></pre>
<hr>
<div class="center">
+2 -1
View File
@@ -111,6 +111,7 @@
<pre><code><strong>NAME</strong>
MontaukOS legal/copyright information
<strong>DESCRIPTION</strong>
Copyright (c) 2025-2026 Daniel Hammer, et al.
(includes contributors to other projects, i.e. The Limine Bootloader. Please refer to any other project's own license.)
@@ -140,6 +141,7 @@
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
<strong>THIRD-PARTY COMPONENTS</strong>
MontaukOS is distributed together with third-party components that remain
under their own licenses, including:
@@ -166,7 +168,6 @@
Unsplash License
Full license texts and notices are on this system in 0:/os/licenses/.</code></pre>
<hr>
<div class="center">
+30 -21
View File
@@ -111,60 +111,69 @@
<pre><code><strong>NAME</strong>
malloc, mfree, realloc - userspace heap allocation
<strong>SYNOPSIS</strong>
<strong>void* montauk::malloc(uint64_t size);</strong>
<strong>void montauk::mfree(void* ptr);</strong>
<strong>void* montauk::realloc(void* ptr, uint64_t size);</strong>
<strong>DESCRIPTION</strong>
The userspace heap provides dynamic memory allocation on top of
the kernel's page-mapping syscall (SYS_ALLOC). Include the
header &lt;montauk/heap.h&gt; to use these functions.
anonymous virtual memory. The Montauk C++ API and libc's
malloc/free API use the same process-wide allocator.
<strong>malloc</strong>
Allocates 'size' bytes from the free list. Returns a 16-byte
aligned pointer, or nullptr on failure. When the free list is
empty, it requests more pages from the kernel via SYS_ALLOC
(minimum 16 KiB growth, initial seed of 64 KiB).
empty, it reserves more pages from the kernel. Physical pages
are committed as they are first touched.
char* buf = (char*)montauk::malloc(1024);
<strong>mfree</strong>
Returns the block to the userspace free list. No syscall is
made -- the memory stays mapped and is immediately reusable.
Returns the block to the userspace allocator. Arena blocks are
immediately reusable; large direct mappings are returned to the
kernel, including their virtual address range.
Passing nullptr is a safe no-op.
montauk::mfree(buf);
<strong>realloc</strong>
Resizes the allocation to 'size' bytes. Allocates a new block,
copies the smaller of old/new sizes, and frees the old block.
Resizes the allocation to 'size' bytes. A block with sufficient
capacity is retained; otherwise a new block is allocated, the
smaller of old/new requested sizes is copied, and the old block
is freed. Integer overflow fails without changing the old block.
If ptr is nullptr, behaves like malloc.
buf = (char*)montauk::realloc(buf, 2048);
<strong>IMPLEMENTATION</strong>
The allocator uses a linked free-list with first-fit search.
Blocks larger than needed are split. The allocation header is
16 bytes (magic + size). All allocations are 16-byte aligned.
The heap grows by requesting pages from the kernel via
SYS_ALLOC. These pages are never returned to the kernel (since
SYS_FREE is currently a no-op), but mfree makes them available
for future malloc calls within the process.
<strong>IMPLEMENTATION</strong>
The allocator uses segregated size-class bins and a coalescing
address-ordered overflow list. Headers retain both requested size
and actual block extent. A process-wide lock serializes C and C++
allocation calls. All returned pointers are 16-byte aligned.
Allocations of 256 KiB or more use direct page mappings so they
can be released promptly. Smaller allocations use growing arenas.
<strong>LOW-LEVEL PAGE API</strong>
For large allocations or when direct page control is needed:
void* montauk::alloc(uint64_t size); // SYS_ALLOC
void montauk::free(void* ptr); // SYS_FREE (no-op)
void montauk::free(void* ptr); // SYS_FREE
alloc() reserves zero-filled, read/write, non-executable pages.
Size is rounded up to 4 KiB. Freed ranges are reusable.
alloc() maps zeroed pages starting at 0x40000000 and growing
upward. Size is rounded up to 4 KiB page boundaries.
<strong>SEE ALSO</strong>
syscalls(2), file(2)</code></pre>
<a href="syscalls.html">syscalls(2)</a>, <a href="file.html">file(2)</a></code></pre>
<hr>
<div class="center">
+8 -2
View File
@@ -111,10 +111,12 @@
<pre><code><strong>NAME</strong>
man - display manual pages
<strong>SYNOPSIS</strong>
<strong>man topic</strong>
<strong>man section topic</strong>
<strong>DESCRIPTION</strong>
The man command displays manual pages from the ramdisk in a
fullscreen pager. Pages are stored as plain text files with
@@ -124,6 +126,7 @@
in order. If a section number is given, only that section is
checked.
<strong>KEY BINDINGS</strong>
<strong>Navigation</strong>
@@ -135,12 +138,14 @@
G, End Go to bottom
q Quit
<strong>SECTIONS</strong>
1 User commands and programs
2 System calls (kernel interface)
3 Library functions (userspace libraries)
7 Miscellaneous (legal, conventions)
<strong>FILES</strong>
Man pages are stored on the ramdisk at:
@@ -148,15 +153,16 @@
For example, man intro reads 0:/man/intro.1
<strong>EXAMPLES</strong>
man intro View the introduction
man 2 syscalls View syscall overview (section 2)
man malloc View malloc documentation
man legal View copyright information
<strong>SEE ALSO</strong>
intro(1), shell(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="intro.html">intro(1)</a>, <a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+7 -2
View File
@@ -111,9 +111,11 @@
<pre><code><strong>NAME</strong>
nslookup - DNS hostname lookup
<strong>SYNOPSIS</strong>
nslookup &lt;hostname&gt;
<strong>DESCRIPTION</strong>
Resolves a hostname to an IPv4 address using the configured
DNS server and prints the result.
@@ -122,6 +124,7 @@
configured DNS server and waits up to 5 seconds for a reply.
Results are cached in an 8-entry kernel cache with TTL support.
<strong>OUTPUT</strong>
Server: 10.0.68.1
Name: example.com
@@ -132,18 +135,20 @@
Could not resolve: badhost.invalid
<strong>DNS CONFIGURATION</strong>
The DNS server address is obtained automatically via DHCP.
It can also be viewed and set with ifconfig. The default
is 10.0.68.1 (QEMU user-mode networking).
<strong>EXAMPLES</strong>
nslookup google.com
nslookup icanhazip.com
<strong>SEE ALSO</strong>
ping(1), fetch(1), dhcp(1), ifconfig(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="ping.html">ping(1)</a>, <a href="fetch.html">fetch(1)</a>, <a href="dhcp.html">dhcp(1)</a>, ifconfig(1), <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+6 -2
View File
@@ -111,9 +111,11 @@
<pre><code><strong>NAME</strong>
ping - send ICMP echo requests
<strong>SYNOPSIS</strong>
ping &lt;host&gt;
<strong>DESCRIPTION</strong>
Sends 4 ICMP echo requests to the specified host and prints
the round-trip time for each reply.
@@ -124,6 +126,7 @@
Each request has a 3-second timeout. Requests are sent at
1-second intervals.
<strong>OUTPUT</strong>
PING example.com (93.184.216.34)
Reply from 93.184.216.34: time=12ms
@@ -135,6 +138,7 @@
Request timed out
<strong>EXAMPLES</strong>
ping 10.0.68.1
Ping the gateway by IP address.
@@ -142,9 +146,9 @@
ping google.com
Ping by hostname (requires DNS).
<strong>SEE ALSO</strong>
nslookup(1), ifconfig(1), shell(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="nslookup.html">nslookup(1)</a>, ifconfig(1), <a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+9 -7
View File
@@ -110,36 +110,38 @@
<pre><code><strong>NAME</strong>
printctl - configure printers and submit print jobs
<strong>SYNOPSIS</strong>
<strong>printctl</strong>
<em>command</em>
[<em>options</em>]
<em>[ options ]</em>
<strong>DESCRIPTION</strong>
<strong>printctl</strong>
manages the MontaukOS userspace print spooler and submits print jobs to IPP printers.
<strong>COMMANDS</strong>
<strong>set-printer <em>URI</em></strong>
<strong>set-printer URI</strong>
Store the default printer URI.
<strong>show-printer</strong>
Print the configured default printer URI.
<strong>print <em>FILE</em> [--printer <em>URI</em>] [--name <em>JOB</em>] [--wait]</strong>
<strong>print FILE [--printer URI] [--name JOB] [--wait]</strong>
Queue a file for printing.
<strong>test-page [--printer <em>URI</em>] [--wait] [--no-wait]</strong>
<strong>test-page [--printer URI] [--wait] [--no-wait]</strong>
Generate and queue a simple test page.
<strong>status [--verbose]</strong>
Show daemon state and queued, active, completed, and failed jobs.
<strong>inspect <em>JOB-ID</em></strong>
<strong>inspect JOB-ID</strong>
Show full metadata and debug details for a queued, active, completed, or failed job.
<strong>probe [<em>URI</em>]</strong>
<strong>probe [URI]</strong>
Probe the configured printer, print host and resolution details, and show IPP capability diagnostics.</code></pre>
<hr>
<div class="center">
+3 -2
View File
@@ -110,16 +110,17 @@
<pre><code><strong>NAME</strong>
printd - MontaukOS userspace print spooler daemon
<strong>SYNOPSIS</strong>
<strong>printd</strong>
<strong>DESCRIPTION</strong>
<strong>printd</strong>
monitors the print spool directories, claims queued jobs, and delivers them to IPP printers.
It is normally launched automatically by
<strong>init</strong>(1)
<strong>init (1)</strong>
and does not require direct user interaction.</code></pre>
<hr>
<div class="center">
+47 -12
View File
@@ -111,6 +111,7 @@
<pre><code><strong>NAME</strong>
shell - MontaukOS interactive command shell
<strong>DESCRIPTION</strong>
The MontaukOS shell is a command interpreter launched by init
after system services have started. It provides command
@@ -121,6 +122,7 @@
a command is not a builtin, the shell searches for a matching
ELF binary and executes it as a child process.
<strong>COMMAND RESOLUTION</strong>
When a non-builtin command is entered, the shell searches for
a matching binary in the following order:
@@ -144,16 +146,20 @@
Arguments after the command name are passed to the spawned
process.
<strong>BUILTINS</strong>
<strong>help</strong>
Display a categorized list of available commands.
<strong>ls [dir]</strong>
List files in the current directory, or in the specified
directory. Directory entries are shown with a trailing slash.
Examples: ls, ls man, ls os
<strong>cd [dir]</strong>
Change the working directory. With no argument, returns to the
logged-in user's home directory (0:/users/&lt;user&gt;); with /,
@@ -161,33 +167,42 @@
The shell prompt reflects the current directory.
Examples: cd os, cd .., cd
<strong>pwd</strong>
Print the current working directory as an absolute path
(e.g. "0:/os").
<strong>echo [-n] ...</strong>
Print the arguments. -n suppresses the trailing newline.
<strong>set [VAR=value]</strong>
With no argument, list all shell variables (built-in and
user-defined). With VAR=value, set a variable. With a bare
name, print that variable's value.
<strong>unset VAR</strong>
Remove a user-defined shell variable.
<strong>true / false</strong>
Return exit status 0 / 1 without doing anything. Useful with
&amp;&amp; and ||.
<strong>N:</strong>
A bare "&lt;number&gt;:" (e.g. "1:") switches the current drive to
drive N and resets the working directory to that drive's root.
<strong>exit</strong>
Terminate the shell process (with the last command's exit code).
<strong>SYNTAX</strong>
<strong>Variables</strong>
NAME=value Set a shell variable (no leading $)
$VAR or ${VAR} Expand a variable's value
@@ -196,11 +211,13 @@
home directory, current directory)
\$ Escape a literal '$'
<strong>Tilde expansion</strong>
A leading ~ expands to the session home directory
(0:/users/&lt;user&gt;) when followed by end-of-string, '/', or a
space.
<strong>Command chaining</strong>
cmd1 ; cmd2 Run cmd2 unconditionally after cmd1
cmd1 &amp;&amp; cmd2 Run cmd2 only if cmd1 succeeded (exit 0)
@@ -209,25 +226,29 @@
Single and double quotes protect ;, &amp;&amp;, and || from being
treated as separators.
<strong>Comments</strong>
A '#' outside of quotes starts a comment; the rest of the line
is ignored.
<strong>EXTERNAL COMMANDS</strong>
All external commands live in 0:/os/ (see COMMAND RESOLUTION).
Where a dedicated man page exists it is noted below; run
'man &lt;command&gt;' for details.
<strong>File commands</strong>
cat &lt;file&gt; Display file contents
edit [file] Text editor -- see edit(1)
edit [file] Text editor -- see <a href="edit.html">edit(1)</a>
copy &lt;src&gt; &lt;dst&gt; Copy a file
move &lt;src&gt; &lt;dst&gt; Move/rename a file
rm &lt;file&gt; Remove a file
touch &lt;file&gt; Create an empty file
<strong>System commands</strong>
man &lt;topic&gt; View manual pages -- see man(1)
man &lt;topic&gt; View manual pages -- see <a href="man.html">man(1)</a>
whoami Print the current username
info / mtkfetch Show system information
date Show current date and time
@@ -235,30 +256,39 @@
proclist List running processes
power CPU power/thermal status (power [watch [secs]])
clear Clear the screen and framebuffer
fontscale [n] Get or set terminal font scale -- see fontscale(1)
fontscale [n] Get or set terminal font scale -- see <a href="fontscale.html">fontscale(1)</a>
lua Lua interpreter
tcc TinyCC (in-system C compiler)
reset Reboot the system
shutdown Shut down the system
reset / reboot Request a supervised system reboot
shutdown / poweroff Request a supervised system shutdown
suspend Enter ACPI sleep
Interactive shutdown and reboot are shell builtins: they post a
capability-checked request and exit the console, allowing login.elf to
flush filesystems and perform the final power operation. They do not grant
CAP_POWER_CONTROL to the shell.
<strong>Network commands</strong>
ping &lt;host&gt; Send ICMP echo requests -- see ping(1)
nslookup &lt;host&gt; DNS lookup -- see nslookup(1)
ping &lt;host&gt; Send ICMP echo requests -- see <a href="ping.html">ping(1)</a>
nslookup &lt;host&gt; DNS lookup -- see <a href="nslookup.html">nslookup(1)</a>
ifconfig Show/set network configuration
tcpconnect &lt;host&gt; &lt;port&gt; Interactive TCP client
irc IRC client
dhcp DHCP client -- see dhcp(1)
fetch &lt;url&gt; HTTP/HTTPS client (TLS 1.2) -- see fetch(1)
wiki &lt;title&gt; Wikipedia article viewer -- see wiki(1)
dhcp DHCP client -- see <a href="dhcp.html">dhcp(1)</a>
fetch &lt;url&gt; HTTP/HTTPS client (TLS 1.2) -- see <a href="fetch.html">fetch(1)</a>
wiki &lt;title&gt; Wikipedia article viewer -- see <a href="wiki.html">wiki(1)</a>
httpd HTTP server
Network commands accept both IP addresses and hostnames.
Hostnames are resolved via the configured DNS server.
<strong>Bluetooth</strong>
btlist List connected Bluetooth devices
btbonds List bonded (paired) Bluetooth devices
<strong>Software-defined radio</strong>
sdr [freqMHz [rateHz]] Receive and report basic signal
statistics from an attached RTL-SDR dongle
@@ -270,22 +300,26 @@
disks, devexplorer, procmgr, powermgr, printers, timezone,
weather, wikipedia. There is no 0:/games/ directory.
<strong>TAB COMPLETION</strong>
Pressing Tab completes the word under the cursor against, in
order: executable names in 0:/os/, shell builtins, and file/
directory entries in the current directory. A single match is
completed inline; multiple matches are listed below the prompt.
<strong>INPUT</strong>
The shell uses non-blocking keyboard input via SYS_GETKEY (with
SYS_INPUT_WAIT to sleep between events) to support arrow key
detection. Lines are limited to 255 characters.
<strong>Editing</strong>
Backspace Delete character before cursor
Tab Tab-complete the current word
Enter Execute the command line
<strong>History</strong>
The shell stores the last 32 unique commands. Duplicate
consecutive entries are suppressed.
@@ -293,6 +327,7 @@
Up Arrow Recall previous command
Down Arrow Recall next command (or clear line)
<strong>PROMPT</strong>
The prompt displays the current drive and working directory:
@@ -300,9 +335,9 @@
0:/os&gt; _ (in os/ directory)
1:/&gt; _ (at root of drive 1)
<strong>SEE ALSO</strong>
man(1), intro(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="man.html">man(1)</a>, <a href="intro.html">intro(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+13 -2
View File
@@ -111,13 +111,16 @@
<pre><code><strong>NAME</strong>
spawn, waitpid - create and wait for processes
<strong>SYNOPSIS</strong>
<strong>int montauk::spawn(const char* path, const char* args = nullptr);</strong>
<strong>void montauk::waitpid(int pid);</strong>
<strong>int montauk::getargs(char* buf, uint64_t maxLen);</strong>
<strong>DESCRIPTION</strong>
<strong>spawn</strong>
Loads the ELF64 binary at the given VFS path and creates a new
process. The path must include the drive prefix, for example:
@@ -136,6 +139,7 @@
Failure occurs when there are no free process slots (max 256),
the file cannot be found, or the ELF is invalid.
<strong>waitpid</strong>
Blocks the calling process until the process with the given PID
has exited. Internally, this yields the CPU in a loop:
@@ -146,6 +150,7 @@
it spawns a child and waits for it to complete before showing
the next prompt.
<strong>EXAMPLES</strong>
Spawn a program and wait for it:
@@ -157,6 +162,7 @@
montauk::print("child exited\n");
}
<strong>getargs</strong>
Copies the argument string into buf (up to maxLen bytes, always
null-terminated). Returns the number of characters copied, or
@@ -168,15 +174,20 @@
The argument string is set by the parent when calling spawn().
If no arguments were provided, the buffer will be empty.
A spawned child inherits a snapshot of its parent's environment. Libc
exposes it through getenv(), setenv(), and environ. posix_spawn() can
instead provide an explicit envp for the child.
<strong>NOTES</strong>
The _start() entry point receives no argc/argv. Use getargs()
to retrieve the argument string passed by the parent process.
Process exit codes are not yet collected by waitpid.
<strong>SEE ALSO</strong>
syscalls(2), file(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="syscalls.html">syscalls(2)</a>, <a href="file.html">file(2)</a></code></pre>
<hr>
<div class="center">
+395 -101
View File
@@ -111,11 +111,11 @@
<pre><code><strong>NAME</strong>
syscalls - overview of MontaukOS system calls
<strong>DESCRIPTION</strong>
MontaukOS provides 150 system calls (numbers 0-149, sparsely
assigned -- not every number in the range is in use) for
userspace programs. Syscalls use the x86-64 SYSCALL instruction
with the following register convention:
MontaukOS provides 178 system calls (numbers 0-186, with numbers
140-148 reserved) for userspace programs. Syscalls use the x86-64
SYSCALL instruction with the following register convention:
RAX Syscall number (in) / return value (out)
RDI Argument 1
@@ -130,6 +130,68 @@
montauk:: namespace. This page groups syscalls the same way the
kernel source does (one subsystem header per group).
<strong>CAPABILITY SECURITY</strong>
Privileged authority is stored in kernel-owned process credentials, not
inferred from a process name, PID, executable path, or merely from the
owner name returned by SYS_GETUSER. The owner identity may namespace
per-user resources such as the clipboard, but no owner name implies
administrative authority. The kernel-created init process is
the root of the delegation tree. Login authenticates a user and delegates
the appropriate session capabilities; there is no special "system" user
shortcut in the kernel.
Each process has three uint64_t masks, exposed in ProcInfo:
permitted capabilities owned by the process
effective permitted capabilities accepted by syscall checks
delegable permitted capabilities that may be given to children
Effective and delegable must be subsets of permitted. SYS_SPAWN and the
other ordinary spawn variants give the child no capabilities. A parent
uses SYS_SPAWN_CAPS to make an explicit delegation. Every requested
permitted or delegable bit must be present in the parent's delegable mask,
so a non-delegable grant cannot be propagated through another generation.
Invalid or unauthorized requests return SYS_ERR_PERMISSION (-13).
Capability bits and protected operations are:
CAP_PROCESS_ADMIN kill unrelated processes or whole sessions
CAP_POWER_REQUEST post a graceful shutdown/reboot request
CAP_POWER_CONTROL consume power requests; reset or power off
CAP_SUSPEND enter ACPI sleep
CAP_STORAGE_ADMIN change partitions, mounts, or filesystems
CAP_RAW_STORAGE raw disk reads and writes
CAP_NETWORK_ADMIN change network/Wi-Fi configuration
CAP_SET_TIME set wall-clock time or timezone
CAP_USER_ADMIN manage users/trusted config; override owner at spawn
CAP_DISPLAY_ADMIN set display mode or brightness
CAP_DEVICE_ADMIN claim USB interfaces or change Bluetooth state
CAP_LOG_READ read the kernel log
CAP_SYSTEM_IMAGE write the program images in 0:/os and 0:/apps
CAP_STANDARD_SESSION contains CAP_POWER_REQUEST and CAP_SUSPEND.
CAP_ADMIN_SESSION adds the administrative capabilities above except
CAP_POWER_CONTROL and CAP_SYSTEM_IMAGE. Final shutdown/reset authority is
deliberately retained by login, the trusted session supervisor.
SYS_POWERINFO remains readable without a capability, so the powermgr GUI
and power command are monitors, not privileged power daemons.
CAP_SYSTEM_IMAGE is likewise excluded from every session and from the
"all" wildcard in 0:/config/capabilities.toml, and must be named
explicitly to be granted. Capability grants are keyed on binary path, so
write access to 0:/os or 0:/apps is equivalent to holding whatever those
images are granted the next time a launcher runs them. Partitioning or
formatting a volume is CAP_STORAGE_ADMIN and does not carry it.
The authentication and trusted-service configuration files users.toml,
setup.toml, init.toml, and ssh.toml are readable by ordinary processes but
require CAP_USER_ADMIN to create, replace, delete, or write. The kernel
also protects the 0:/config directory entry against replacement. This
prevents changing a userspace role string from becoming a route to new
kernel authority at the next login or boot.
<strong>PROCESS MANAGEMENT</strong>
<strong>SYS_EXIT (0)</strong>
Terminate the calling process.
@@ -148,45 +210,84 @@
int montauk::getpid();
<strong>SYS_SPAWN (20)</strong>
Spawn a new process from an ELF binary on the VFS.
Spawn a new process from an ELF binary on the VFS. The child inherits
a snapshot of the caller's environment but no capabilities.
int montauk::spawn(const char* path, const char* args = nullptr);
<strong>SYS_SPAWN_CAPS (185)</strong>
Spawn a child with explicit permitted, effective, and delegable masks.
The child masks must satisfy the subset rules described under CAPABILITY
SECURITY. Passing a non-null user override additionally requires the
caller to have effective CAP_USER_ADMIN; null inherits the parent owner.
int montauk::spawn_with_caps(
const char* path, const char* args, const char* user,
const montauk::abi::SpawnCapabilities&amp; capabilities);
<strong>SYS_WAITPID (23)</strong>
Block until the given process has exited.
void montauk::waitpid(int pid);
Block until the given process has exited. Returns 0-255 for a normal
exit, 256 plus the signal number if it was killed or crashed, or 0 if
the PID is unknown or its exit record is no longer available.
int montauk::waitpid(int pid);
<strong>SYS_GETARGS (25)</strong>
Get the argument string passed to this process at spawn time.
int montauk::getargs(char* buf, uint64_t maxLen);
<strong>SYS_GETEXECPATH (151)</strong>
Copy the absolute path from which this process was spawned into buf.
Returns the copied path length, or -1 on invalid arguments.
int mtk_getexecpath(char* buf, unsigned long maxLen);
<strong>SYS_GETENVIRON (171), SYS_SETENVIRON (172), SYS_SPAWN_ENV (173)</strong>
Libc process-environment transport. Environment data is encoded as
consecutive NAME=VALUE strings with a final empty string. Applications
normally use getenv(3), setenv(3), environ, and posix_spawn(3).
<strong>SYS_PROCLIST (61)</strong>
List running processes (pid, parent, state, name, heap usage,
accumulated CPU time).
accumulated CPU time, and permitted/effective/delegable capability masks).
int montauk::proclist(montauk::abi::ProcInfo* buf, int max);
<strong>SYS_KILL (62)</strong>
Terminate another process by PID.
Terminate a process by PID. Any process may terminate one of its own
descendants. Terminating an unrelated process requires
CAP_PROCESS_ADMIN.
int montauk::kill(int pid);
<strong>SYS_SETSESSION (174)</strong>
Make the calling process the leader of a new process session. Processes
spawned afterward inherit the session identifier.
int montauk::setsession();
<strong>SYS_KILLSESSION (175)</strong>
Terminate all live processes in a process session. Returns the number of
members signalled; repeat until zero to wait for complete teardown.
Requires CAP_PROCESS_ADMIN.
int montauk::killsession(int sessionId);
<strong>SYS_CHDIR (96)</strong>
Change the calling process's current working directory.
int montauk::chdir(const char* path);
<strong>SYS_GETCWD (95)</strong>
Get the calling process's current working directory.
Get the calling process's current working directory. Returns the path
length on success, -2 if maxLen cannot hold the path and terminating NUL,
or -1 for another failure. The buffer is not modified when it is too small.
int montauk::getcwd(char* buf, uint64_t maxLen);
<strong>SYS_SETUSER (92)</strong>
Associate a process with a logged-in user name (used by login/session
management).
management and per-user resource isolation). Requires CAP_USER_ADMIN.
The name never grants capabilities or implies administrator status.
int montauk::setuser(int pid, const char* name);
<strong>SYS_GETUSER (93)</strong>
Get the user name associated with the calling process.
int montauk::getuser(char* buf, uint64_t maxLen);
<strong>THREADING</strong>
Threads share the spawning process's address space and heap
Threads share the calling process's address space and heap
(see montauk/heap.h for the heap lock). Declared in
montauk/thread.h.
@@ -210,6 +311,7 @@
thread).
int montauk::thread_self();
<strong>CONSOLE I/O</strong>
<strong>SYS_PRINT (4)</strong>
Write a null-terminated string to the terminal.
@@ -219,6 +321,7 @@
Write a single character to the terminal.
void montauk::putchar(char c);
<strong>FILE I/O</strong>
<strong>SYS_OPEN (6)</strong>
Open a file. Returns a handle or negative on error.
@@ -237,9 +340,9 @@
void montauk::close(int handle);
<strong>SYS_READDIR (10)</strong>
List directory entries (max 256 per call for VFS directories,
128 for driver-backed listings such as 0:/os/). For larger
directories use SYS_READDIR_AT.
List directory entries (max 256 per call for ramdisk directories,
128 for FAT32 and ext2 directories). For larger directories use
SYS_READDIR_AT.
int montauk::readdir(const char* path, const char** names, int max);
<strong>SYS_READDIR_AT (136)</strong>
@@ -273,6 +376,15 @@
manager move operations).
int montauk::frename(const char* oldPath, const char* newPath);
<strong>SYS_STAT (152)</strong>
Get a path's size, timestamps, mode, and directory status.
int montauk::stat(const char* path, montauk::abi::FileStat* out);
<strong>SYS_UTIME (167)</strong>
Set a path's access and modification timestamps. This is the kernel
transport used by the libc utime(3) interface.
int utime(const char* path, const struct utimbuf* times);
<strong>SYS_DRIVELIST (79)</strong>
List mounted drive numbers.
int montauk::drivelist(int* outDrives, int max);
@@ -286,20 +398,37 @@
1=SATA, 2=SATAPI, 3=NVMe, 4=USB mass storage.
int montauk::drivekind(int drive);
<strong>MEMORY</strong>
<strong>SYS_ALLOC (11)</strong>
Map zeroed pages into the process address space.
void* montauk::alloc(uint64_t size);
<strong>SYS_FREE (12)</strong>
Reserved (currently a no-op).
Release a complete mapping previously returned by SYS_ALLOC.
void montauk::free(void* ptr);
<strong>SYS_MMAP_ANON (168)</strong>
Reserve a zero-filled anonymous mapping with read/write/execute
protection flags. Pages are committed on first access. Writable
executable mappings are rejected.
void* mmap(void*, size_t, int, int, int, long);
<strong>SYS_MUNMAP (169)</strong>
Release a page-aligned range. Partial unmap splits the VM area and
makes the virtual range reusable.
int munmap(void* addr, size_t length);
<strong>SYS_MPROTECT (170)</strong>
Change read/write/execute permissions on an anonymous mapping.
int mprotect(void* addr, size_t length, int prot);
<strong>SYS_MEMSTATS (67)</strong>
Get kernel-wide physical memory usage (total/free/used bytes,
page size).
void montauk::memstats(montauk::abi::MemStats* out);
<strong>TIMEKEEPING</strong>
<strong>SYS_GETTICKS (13)</strong>
Get APIC timer ticks since boot.
@@ -310,25 +439,34 @@
uint64_t montauk::get_milliseconds();
<strong>SYS_GETTIME (28)</strong>
Get the current wall-clock date and time (UTC).
Get the current wall-clock date and time in the configured timezone.
Fills a montauk::abi::DateTime struct with Year, Month, Day,
Hour, Minute, and Second fields.
void montauk::gettime(montauk::abi::DateTime* out);
<strong>SYS_SETUNIXTIME (153)</strong>
Set the system wall clock from a UTC Unix timestamp. Returns 0 on
success or -1 if the timestamp is outside the supported range. Requires
CAP_SET_TIME.
int montauk::set_unix_time(int64_t unixSeconds);
<strong>SYS_SETTZ (90)</strong>
Set the process/system timezone offset, in minutes from UTC.
void montauk::settz(int offset_minutes);
Set the system-wide timezone offset, in minutes from UTC. Requires
CAP_SET_TIME.
int montauk::settz(int offset_minutes);
<strong>SYS_GETTZ (91)</strong>
Get the current timezone offset, in minutes from UTC.
int montauk::gettz();
<strong>SYSTEM</strong>
<strong>SYS_GETINFO (15)</strong>
Get OS name, version string, API version, max process count,
and the monotonic kernel build number.
void montauk::get_info(montauk::abi::SysInfo* info);
<strong>KEYBOARD</strong>
<strong>SYS_ISKEYAVAILABLE (16)</strong>
Check if a key event is pending (non-blocking).
@@ -342,11 +480,19 @@
Block until a printable character is typed.
char montauk::getchar();
<strong>SYS_GETCHAR_NB (166)</strong>
Return the next printable character, or 0 when none is
pending. Never blocks; key events carrying no ascii are
drained rather than left to stall a following getchar.
char montauk::getchar_nb();
<strong>SYS_INPUT_WAIT (123)</strong>
Block until the input serial number differs from
observedSerial or the timeout elapses; used to sleep
efficiently between input-driven redraws.
uint64_t montauk::input_wait(uint64_t observedSerial, uint64_t timeoutMs);
uint64_t montauk::input_wait(uint64_t observedSerial,
uint64_t timeoutMs);
<strong>MOUSE</strong>
<strong>SYS_MOUSESTATE (47)</strong>
@@ -358,6 +504,7 @@
dimensions).
void montauk::set_mouse_bounds(int32_t maxX, int32_t maxY);
<strong>NETWORKING</strong>
<strong>SYS_PING (19)</strong>
Send an ICMP echo request and wait for reply.
@@ -377,7 +524,8 @@
void montauk::get_netcfg(montauk::abi::NetCfg* out);
<strong>SYS_SETNETCFG (38)</strong>
Set the network configuration (IP, mask, gateway, DNS server).
Set the network configuration (IP, mask, gateway, DNS server). Requires
CAP_NETWORK_ADMIN.
int montauk::set_netcfg(const montauk::abi::NetCfg* cfg);
<strong>SYS_NETSTATUS (125)</strong>
@@ -385,6 +533,53 @@
and RX/TX packet counters.
int montauk::net_status(montauk::abi::NetStatus* out);
<strong>SYS_NETIFS (165)</strong>
List registered link-layer network interfaces. The global IP
configuration belongs to the entry whose active field is set.
int montauk::net_interfaces(montauk::abi::NetIfInfo* buf,
int maxCount);
<strong>WI-FI</strong>
<strong>SYS_WIFI_SCAN (158)</strong>
Perform a channel scan and block until it finishes or timeoutMs
elapses. Returns the number of results, or -1 if no adapter is ready.
Requires CAP_NETWORK_ADMIN because it changes radio state.
int montauk::wifi_scan(montauk::abi::WifiNetwork* buf,
int maxCount, uint32_t timeoutMs);
<strong>SYS_WIFI_INFO (159)</strong>
Get adapter, link, scan, join, and last-error status.
int montauk::wifi_info(montauk::abi::WifiInfo* out);
<strong>SYS_WIFI_CONNECT (160)</strong>
Join a network and block until the link is up or the attempt fails.
Requires CAP_NETWORK_ADMIN.
int montauk::wifi_connect(const char* ssid,
const char* password);
<strong>SYS_WIFI_DISCONNECT (161)</strong>
Disconnect from the current Wi-Fi network. Requires CAP_NETWORK_ADMIN.
int montauk::wifi_disconnect();
<strong>SYS_WIFI_SCAN_START (162)</strong>
Start a non-blocking channel scan. Returns 0 if started, 1 if a scan
is already running, or -1 if no adapter is ready. Requires
CAP_NETWORK_ADMIN.
int montauk::wifi_scan_start(uint32_t timeoutMs);
<strong>SYS_WIFI_RESULTS (163)</strong>
Copy results from the most recent scan without accessing the radio.
int montauk::wifi_results(montauk::abi::WifiNetwork* buf,
int maxCount);
<strong>SYS_WIFI_CONNECT_ASYNC (164)</strong>
Start a non-blocking network join. Observe SYS_WIFI_INFO for progress
and the final result. Requires CAP_NETWORK_ADMIN.
int montauk::wifi_connect_async(const char* ssid,
const char* password);
<strong>SOCKETS</strong>
<strong>SYS_SOCKET (29)</strong>
Create a socket. type=SOCK_TCP (1) or SOCK_UDP (2).
@@ -431,6 +626,7 @@
int montauk::recvfrom(int fd, void* buf, uint32_t maxLen,
uint32_t* srcIp, uint16_t* srcPort);
<strong>FRAMEBUFFER</strong>
<strong>SYS_FBINFO (21)</strong>
Get framebuffer dimensions and format.
@@ -440,6 +636,34 @@
Map the framebuffer into process memory.
void* montauk::fb_map();
<strong>SYS_FBFLIP (150)</strong>
Flip between double-buffered hardware scanout buffers. Index -1
queries support; index -2 acquires ownership and returns the current
front-buffer index. Flag bit 0 waits for vertical blank.
int64_t montauk::fb_flip(int64_t index, uint64_t flags);
<strong>DISPLAY CONTROL</strong>
<strong>SYS_DISPLAYINFO (154)</strong>
Get connector, mode, capability, and brightness information.
int montauk::display_info(montauk::abi::DisplayInfo* out);
<strong>SYS_DISPLAYMODES (155)</strong>
Enumerate supported display modes. Returns the number written.
int montauk::display_modes(montauk::abi::DisplayModeInfo* out,
int maxCount);
<strong>SYS_DISPLAYSETMODE (156)</strong>
Switch to a mode returned by SYS_DISPLAYMODES. Requires
CAP_DISPLAY_ADMIN.
int montauk::display_set_mode(int modeIndex);
<strong>SYS_DISPLAYBRIGHTNESS (157)</strong>
Set brightness to 0-100 percent, or pass -1 to query it. Setting requires
CAP_DISPLAY_ADMIN; querying does not.
int montauk::display_brightness(int percent = -1);
<strong>TERMINAL</strong>
<strong>SYS_TERMSIZE (24)</strong>
Get terminal dimensions (columns and rows).
@@ -453,23 +677,28 @@
void montauk::termscale(int scale_x, int scale_y);
void montauk::get_termscale(int* scale_x, int* scale_y);
<strong>RANDOM</strong>
<strong>SYS_GETRANDOM (45)</strong>
Fill a buffer with random bytes using RDTSC-seeded entropy.
Returns the number of bytes written.
int64_t montauk::getrandom(void* buf, uint32_t len);
<strong>POWER MANAGEMENT</strong>
<strong>SYS_RESET (26)</strong>
Reboot the system.
[[noreturn]] void montauk::reset();
Reboot the system. Requires CAP_POWER_CONTROL. A successful call does not
return; an unauthorized call returns SYS_ERR_PERMISSION.
int montauk::reset();
<strong>SYS_SHUTDOWN (27)</strong>
Shut down the system.
[[noreturn]] void montauk::shutdown();
Shut down the system. Requires CAP_POWER_CONTROL. A successful call does
not return; an unauthorized call returns SYS_ERR_PERMISSION.
int montauk::shutdown();
<strong>SYS_SUSPEND (89)</strong>
Enter ACPI S3 sleep. Returns after wake, 0 on success.
Enter ACPI S3 sleep. Returns after wake, 0 on success. Requires
CAP_SUSPEND.
int montauk::suspend();
<strong>SYS_POWER_REQUEST (135)</strong>
@@ -477,30 +706,56 @@
posts a pending action (POWER_REQ_SHUTDOWN / POWER_REQ_REBOOT)
then exits; login.elf reads it with POWER_REQ_QUERY
(read-and-clear), runs the shutdown stages, and finally calls
shutdown()/reset(). See montauk::abi::PowerRequestAction.
shutdown()/reset(). Posting requires CAP_POWER_REQUEST; querying and
consuming the request requires CAP_POWER_CONTROL. See
montauk::abi::PowerRequestAction.
A request may also come from inside a session -- the shell's shutdown
builtin posts one. Since login only reads the request after the session
leader exits, the leader polls POWER_REQ_PEEK, a non-destructive read
requiring only CAP_POWER_REQUEST, and exits when one is pending.
int montauk::power_request(int action);
int montauk::power_request_pending();
<strong>SYS_POWERINFO (149)</strong>
Get the CPU power/thermal snapshot (HWP state, throttling,
package temperature, base/max/effective frequency). Returns 0
on success, -1 if unsupported by the running hardware.
int montauk::syscall1(SYS_POWERINFO, (uint64_t)&amp;out);
// out: montauk::abi::PowerInfo*
montauk::abi::PowerInfo out;
int64_t rc = montauk::syscall1(
montauk::abi::SYS_POWERINFO, (uint64_t)&amp;out);
<strong>KERNEL LOG</strong>
<strong>SYS_LOG (46)</strong>
Read from the kernel ring log buffer.
Read from the kernel ring log buffer. Requires CAP_LOG_READ.
int64_t montauk::read_log(char* buf, uint64_t size);
<strong>SYS_LOG_WRITE (176)</strong>
Append a userspace message to the system log.
int64_t montauk::write_log(const char* message);
<strong>I/O REDIRECTION</strong>
Used by the terminal app and similar programs to run a child
process with its console I/O captured instead of going directly
to the framebuffer console.
<strong>SYS_SPAWN_REDIR (49)</strong>
Spawn a process with its console I/O redirected to the caller.
Spawn a process with its console I/O redirected to the caller. The child
receives no capabilities.
int montauk::spawn_redir(const char* path, const char* args = nullptr);
<strong>SYS_SPAWN_REDIR_CAPS (186)</strong>
Spawn a redirected child with explicit capability masks. It applies the
same subset and parent-delegable checks as SYS_SPAWN_CAPS. An
administrative console explicitly lets its shell delegate selected
capabilities; the shell's executable policy gives each trusted tool a
delegable mask of zero, preventing further propagation.
int montauk::spawn_redir_with_caps(
const char* path, const char* args,
const montauk::abi::SpawnCapabilities&amp; capabilities);
<strong>SYS_CHILDIO_READ (50)</strong>
Read buffered output produced by a redirected child.
int montauk::childio_read(int childPid, char* buf, int maxLen);
@@ -511,12 +766,19 @@
<strong>SYS_CHILDIO_WRITEKEY (52)</strong>
Forward a raw key event to a redirected child.
int montauk::childio_writekey(int childPid, const montauk::abi::KeyEvent* key);
int montauk::childio_writekey(
int childPid, const montauk::abi::KeyEvent* key);
<strong>SYS_CHILDIO_SETTERMSZ (53)</strong>
Tell a redirected child its terminal dimensions changed.
int montauk::childio_settermsz(int childPid, int cols, int rows);
<strong>SYS_TERMINAL_ATTACHED (177)</strong>
Return 1 when the calling process has a redirected userspace
terminal output stream, otherwise return 0.
bool montauk::terminal_attached();
<strong>WINDOW SERVER</strong>
Window server syscalls are used by GUI programs to create and
drive an on-screen window (see montauk/Window.hpp for the
@@ -579,6 +841,7 @@
Set window flags (e.g. WIN_FLAG_FULLSCREEN).
int montauk::win_setflags(int id, uint32_t flags);
<strong>DEVICES</strong>
<strong>SYS_DEVLIST (63)</strong>
Enumerate detected devices (CPU, interrupts, timers, input,
@@ -591,45 +854,51 @@
size, NCQ/TRIM/SMART support, etc.).
int montauk::diskinfo(montauk::abi::DiskInfo* buf, int port);
<strong>STORAGE</strong>
<strong>SYS_PARTLIST (70)</strong>
Enumerate GPT partitions across all block devices.
int montauk::partlist(montauk::abi::PartInfo* buf, int max);
<strong>SYS_DISKREAD (71)</strong>
Raw, driver-agnostic sector read from a block device.
Raw, driver-agnostic sector read from a block device. Requires
CAP_RAW_STORAGE.
int64_t montauk::disk_read(int blockDev, uint64_t lba,
uint32_t sectorCount, void* buf);
<strong>SYS_DISKWRITE (72)</strong>
Raw, driver-agnostic sector write to a block device.
Raw, driver-agnostic sector write to a block device. Requires
CAP_RAW_STORAGE.
int64_t montauk::disk_write(int blockDev, uint64_t lba,
uint32_t sectorCount, const void* buf);
<strong>SYS_GPTINIT (73)</strong>
Initialize a fresh GPT partition table on a block device.
Initialize a fresh GPT partition table on a block device. Requires
CAP_STORAGE_ADMIN.
int montauk::gpt_init(int blockDev);
<strong>SYS_GPTADD (74)</strong>
Add a partition to an existing GPT table.
Add a partition to an existing GPT table. Requires CAP_STORAGE_ADMIN.
int montauk::gpt_add(const montauk::abi::GptAddParams* params);
<strong>SYS_FSMOUNT (75)</strong>
Mount a partition's filesystem onto a drive number.
Mount a partition's filesystem onto a drive number. Requires
CAP_STORAGE_ADMIN.
int montauk::fs_mount(int partIndex, int driveNum);
<strong>SYS_FSFORMAT (76)</strong>
Format a partition with a filesystem (FS_TYPE_FAT32 or
FS_TYPE_EXT2).
FS_TYPE_EXT2). Requires CAP_STORAGE_ADMIN.
int montauk::fs_format(const montauk::abi::FsFormatParams* params);
<strong>SYS_FS_SYNC (134)</strong>
Flush all block-device write caches and cleanly unmount
disk-backed volumes ahead of power-off. Returns the number of
volumes unmounted. Part of the graceful shutdown sequence
(see SYS_POWER_REQUEST).
(see SYS_POWER_REQUEST). Requires CAP_STORAGE_ADMIN.
int montauk::fs_sync();
<strong>AUDIO</strong>
<strong>SYS_AUDIOOPEN (80)</strong>
Open a mixer output stream at the given sample rate, channel
@@ -656,18 +925,21 @@
audio_set_volume, audio_get_volume AUDIO_CTL_{SET,GET}_VOLUME (0/1)
audio_get_pos AUDIO_CTL_GET_POS (2)
audio_pause, audio_resume AUDIO_CTL_PAUSE (3)
audio_get_output AUDIO_CTL_GET_OUTPUT (4): 0=HDA, 1=Bluetooth
audio_set_output AUDIO_CTL_SET_OUTPUT (5): switch all streams
(SET_OUTPUT, 5) switch a stream's output route
audio_bt_status AUDIO_CTL_BT_STATUS (6)
audio_set_master_volume, _get_ AUDIO_CTL_{SET,GET}_MASTER_VOLUME (7/8), 0-100
audio_set_mute, audio_get_mute AUDIO_CTL_{SET,GET}_MUTE (9/10), per-stream
audio_set_master_mute, _get_ AUDIO_CTL_{SET,GET}_MASTER_MUTE (11/12)
audio_get_output GET_OUTPUT (4): 0=HDA, 1=Bluetooth
audio_set_output SET_OUTPUT (5): all streams
audio_ctl(handle, 5, output) SET_OUTPUT (5): one stream
audio_bt_status BT_STATUS (6): unavailable/setup/ready
audio_set_master_volume SET_MASTER_VOLUME (7), 0-100
audio_get_master_volume GET_MASTER_VOLUME (8)
audio_set_mute, audio_get_mute MUTE (9/10), per-stream
audio_set_master_mute SET_MASTER_MUTE (11)
audio_get_master_mute GET_MASTER_MUTE (12)
<strong>SYS_AUDIOLIST (128)</strong>
Enumerate active mixer streams (owner PID, name, format,
volume, mute/pause state).
int montauk::audio_list(montauk::abi::AudioStreamInfo* buf, int maxCount);
int montauk::audio_list(montauk::abi::AudioStreamInfo* buf,
int maxCount);
<strong>SYS_AUDIOWAIT (129)</strong>
Return the current mixer state serial. With timeoutMs &gt; 0,
@@ -675,18 +947,21 @@
elapses; with timeoutMs == 0 it returns immediately.
uint64_t montauk::audio_wait(uint64_t prevSerial, uint64_t timeoutMs);
<strong>BLUETOOTH</strong>
<strong>SYS_BTSCAN (84)</strong>
Scan for discoverable Bluetooth devices for up to timeoutMs.
Scan for discoverable Bluetooth devices for up to timeoutMs. Requires
CAP_DEVICE_ADMIN because it changes radio state.
int montauk::bt_scan(montauk::abi::BtScanResult* buf, int maxCount,
uint32_t timeoutMs);
<strong>SYS_BTCONNECT (85)</strong>
Connect (and pair/bond if needed) to a device by BD_ADDR.
Connect (and pair/bond if needed) to a device by BD_ADDR. Requires
CAP_DEVICE_ADMIN.
int montauk::bt_connect(const uint8_t* bdAddr);
<strong>SYS_BTDISCONNECT (86)</strong>
Disconnect from a device by BD_ADDR.
Disconnect from a device by BD_ADDR. Requires CAP_DEVICE_ADMIN.
int montauk::bt_disconnect(const uint8_t* bdAddr);
<strong>SYS_BTLIST (87)</strong>
@@ -700,7 +975,8 @@
<strong>SYS_BTSETADDR (137)</strong>
Change the adapter's BD_ADDR (6-byte buffer, byte 0 is the
least-significant octet). Volatile -- apply after the last
controller reset and persist separately to bluetooth.toml.
controller reset and persist separately to bluetooth.toml. Requires
CAP_DEVICE_ADMIN.
int montauk::bt_set_addr(const uint8_t* bdAddr);
<strong>SYS_BTBONDS (138)</strong>
@@ -708,61 +984,72 @@
int montauk::bt_bonds(montauk::abi::BtBondInfo* buf, int maxCount);
<strong>SYS_BTFORGET (139)</strong>
Forget a paired device; it must re-pair next time.
Forget a paired device; it must re-pair next time. Requires
CAP_DEVICE_ADMIN.
int montauk::bt_forget(const uint8_t* bdAddr);
<strong>SOFTWARE-DEFINED RADIO</strong>
Receive-only SDR API. Receivers are enumerated by index in
[0, SYS_SDR_COUNT); SYS_SDR_OPEN returns a handle used by the
rest of the calls. Samples are delivered as interleaved 8-bit
unsigned I/Q (CU8, SDR_FORMAT_CU8) from the device's ring
buffer. Backed by an RTL-SDR (RTL2832U + R820T2) driver.
<strong>SYS_SDR_COUNT (140)</strong>
Number of available SDR receivers.
int montauk::sdr_count();
<strong>GENERIC USB INTERFACES</strong>
Process-owned access to USB interfaces that do not have a bound kernel
class driver. Claims are exclusive and are released automatically at
process exit. The current xHCI device model records one interface per
device slot, so claiming that interface temporarily claims the whole slot.
Kernel-owned HID, Bluetooth, mass-storage, and RTL-SDR interfaces are
visible in SYS_USB_LIST but cannot be claimed.
<strong>SYS_SDR_INFO (141)</strong>
Get static/dynamic info for one receiver by index (name, tuner,
frequency/sample-rate ranges, gain steps, present/streaming
flags).
int montauk::sdr_info(int index, montauk::abi::SdrDeviceInfo* out);
<strong>SYS_USB_LIST (178)</strong>
List currently connected USB interfaces. Each UsbInterfaceInfo contains
stable identifiers for the current connection, endpoint addresses, maximum
packet sizes, and kernelDriverBound/claimed flags.
int montauk::usb_list(montauk::abi::UsbInterfaceInfo* buf,
int maxCount);
<strong>SYS_SDR_OPEN (142)</strong>
Open a receiver by index. Returns a handle.
int montauk::sdr_open(int index);
<strong>SYS_USB_CLAIM (179)</strong>
Exclusively claim an unbound interface. Returns a generation-checked handle
owned by the calling process. Requires CAP_DEVICE_ADMIN; subsequent
operations are authorized by ownership of that handle.
int montauk::usb_claim(uint8_t slotId, uint8_t interfaceNumber);
<strong>SYS_SDR_CLOSE (143)</strong>
Close a receiver handle.
int montauk::sdr_close(int handle);
<strong>SYS_USB_CLOSE (180)</strong>
Stop active transfers and release a USB claim.
int montauk::usb_close(int handle);
<strong>SYS_SDR_START (144)</strong>
Begin streaming samples.
int montauk::sdr_start(int handle);
<strong>SYS_USB_CONTROL (181)</strong>
Execute a USB control transfer on endpoint zero. The requestType direction
bit determines whether data is read or written. request.length must equal
dataLen; control payloads are currently limited to 4096 bytes.
int montauk::usb_control(
int handle, const montauk::abi::UsbControlRequest* request,
void* data, uint32_t dataLen);
<strong>SYS_SDR_STOP (145)</strong>
Stop streaming samples.
int montauk::sdr_stop(int handle);
<strong>SYS_USB_BULK_IN_START (182)</strong>
Start a continuous bulk-IN transfer pool. transferBytes is 1..4096 and
bufferCount is 1..16. Completed data is copied into a 256 KiB per-claim
ring buffer.
int montauk::usb_bulk_in_start(int handle, uint32_t transferBytes,
uint32_t bufferCount);
<strong>SYS_SDR_READ (146)</strong>
Non-blocking read of queued I/Q samples. Returns bytes copied.
int montauk::sdr_read(int handle, void* buf, uint32_t len);
<strong>SYS_USB_BULK_IN_STOP (183)</strong>
Stop continuous bulk-IN transfers without releasing the claim.
int montauk::usb_bulk_in_stop(int handle);
<strong>SYS_SDR_SETPARAM (147)</strong>
Set a tunable parameter (see SDR_PARAM_* below).
int montauk::sdr_set_param(int handle, int param, uint64_t value);
<strong>SYS_USB_BULK_IN_READ (184)</strong>
Non-blocking read from the bulk-IN ring. Returns bytes copied, zero when no
data is queued, or USB_ERR_DISCONNECTED after queued data has been drained.
int montauk::usb_bulk_in_read(int handle, void* data, uint32_t dataLen);
<strong>SYS_SDR_GETPARAM (148)</strong>
Get a tunable parameter's current value.
int64_t montauk::sdr_get_param(int handle, int param);
Errors are USB_ERR_INVALID (-1), USB_ERR_BUSY (-2),
USB_ERR_DISCONNECTED (-3), USB_ERR_UNSUPPORTED (-4), USB_ERR_IO (-5),
USB_ERR_NO_RESOURCES (-6), USB_ERR_NOT_FOUND (-7), and
USB_ERR_KERNEL_BOUND (-8).
<strong>RESERVED SYSCALL NUMBERS</strong>
Syscall numbers 140 through 148 are reserved. They were used by an
experimental kernel SDR API and are intentionally not dispatched or exposed
through userspace syscall wrappers. RTL-SDR support is provided by
0:/os/rtlsdr.lib over the generic userspace USB API.
Parameters (montauk::abi::SDR_PARAM_*): FREQ (center frequency,
Hz), SAMPLE_RATE (Hz), GAIN_MODE (0=auto/AGC, 1=manual), GAIN
(tenths of dB), FREQ_CORR (ppm), AGC (demod digital AGC, 0/1),
DIRECT_SAMP (0=off, 1=I, 2=Q). Convenience wrappers exist for
each: sdr_set_freq/sdr_get_freq, sdr_set_sample_rate/
sdr_get_sample_rate, sdr_set_gain_mode, sdr_set_gain,
sdr_set_freq_correction, sdr_set_agc.
<strong>CLIPBOARD</strong>
<strong>SYS_CLIPBOARD_SET_TEXT (119)</strong>
@@ -778,12 +1065,14 @@
<strong>SYS_CLIPBOARD_GET_TEXT (121)</strong>
Read the clipboard's text contents.
int montauk::clipboard_get_text(char* buf, uint32_t bufLen,
uint32_t* outLen, uint64_t* outSerial = nullptr);
uint32_t* outLen,
uint64_t* outSerial = nullptr);
<strong>SYS_CLIPBOARD_CLEAR (122)</strong>
Clear the clipboard.
int montauk::clipboard_clear();
<strong>GENERIC IPC</strong>
Handle-based IPC primitives underlying streams, mailboxes,
waitsets, and shared-memory surfaces (see kernel/src/Ipc/Ipc.hpp).
@@ -823,13 +1112,15 @@
<strong>SYS_MAILBOX_SEND (104)</strong>
Send a typed message, optionally attaching a handle to
transfer to the receiver.
int montauk::mailbox_send(int handle, uint32_t msgType, const void* data,
uint16_t len, int attachHandle = -1);
int montauk::mailbox_send(int handle, uint32_t msgType,
const void* data, uint16_t len,
int attachHandle = -1);
<strong>SYS_MAILBOX_RECV (105)</strong>
Receive a message.
int montauk::mailbox_recv(int handle, uint32_t* outMsgType, void* data,
uint16_t* inOutLen, int* outAttachHandle = nullptr);
uint16_t* inOutLen,
int* outAttachHandle = nullptr);
<strong>SYS_WAITSET_CREATE (106)</strong>
Create a waitset for multiplexing waits across many handles.
@@ -847,7 +1138,8 @@
<strong>SYS_WAITSET_WAIT (109)</strong>
Block until any member handle's watched signals fire, or
timeoutMs elapses.
int montauk::waitset_wait(int waitsetHandle, montauk::abi::IpcWaitResult* outReady,
int montauk::waitset_wait(
int waitsetHandle, montauk::abi::IpcWaitResult* outReady,
uint64_t timeoutMs = ~0ULL);
<strong>SYS_PROC_OPEN (110)</strong>
@@ -867,6 +1159,7 @@
Resize a surface.
int montauk::surface_resize(int handle, uint64_t newSize);
<strong>SHARED LIBRARIES</strong>
<strong>SYS_LOAD_LIB (114)</strong>
Load a shared library ELF (.lib) into the caller's address
@@ -886,6 +1179,7 @@
Get the base virtual address a loaded library was mapped at.
uint64_t montauk::get_libbase(int handle);
<strong>CRASH REPORTING</strong>
<strong>SYS_CRASH_REPORT (118)</strong>
Retrieve the kernel-filled crash report for the last faulting
@@ -893,9 +1187,9 @@
state, page-fault error bits). Used by the crashpad app.
int montauk::crash_report(montauk::abi::CrashReportInfo* out);
<strong>SEE ALSO</strong>
spawn(2), file(2), framebuffer(2), malloc(3), intro(1)</code></pre>
<strong>SEE ALSO</strong>
<a href="spawn.html">spawn(2)</a>, <a href="file.html">file(2)</a>, <a href="framebuffer.html">framebuffer(2)</a>, <a href="malloc.html">malloc(3)</a>, <a href="intro.html">intro(1)</a></code></pre>
<hr>
<div class="center">
+6 -2
View File
@@ -111,11 +111,13 @@
<pre><code><strong>NAME</strong>
tls-errors - BearSSL TLS and X.509 error codes
<strong>DESCRIPTION</strong>
MontaukOS uses BearSSL for TLS 1.2 connections. When a TLS
operation fails, an integer error code is reported. This page
lists all possible error codes.
<strong>SSL/TLS ENGINE ERRORS</strong>
<strong>0 BR_ERR_OK</strong>
@@ -221,6 +223,7 @@
<strong>31 BR_ERR_IO</strong>
I/O error or premature close on the underlying transport.
<strong>X.509 CERTIFICATE ERRORS</strong>
<strong>32 BR_ERR_X509_OK</strong>
@@ -314,6 +317,7 @@
<strong>62 BR_ERR_X509_NOT_TRUSTED</strong>
Chain could not be linked to a trust anchor.
<strong>FATAL ALERTS</strong>
When a fatal alert is received from the peer, the error code
is 256 + the TLS alert value. When a fatal alert is sent to
@@ -342,9 +346,9 @@
For example, error 296 means a handshake_failure alert was
received (256 + 40 = 296).
<strong>SEE ALSO</strong>
fetch(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="fetch.html">fetch(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+11 -2
View File
@@ -111,11 +111,13 @@
<pre><code><strong>NAME</strong>
wiki - Wikipedia article viewer for MontaukOS
<strong>SYNOPSIS</strong>
wiki &lt;title&gt;
wiki -f &lt;title&gt;
wiki -s &lt;query&gt;
<strong>DESCRIPTION</strong>
wiki fetches and displays Wikipedia articles in the terminal.
It connects to en.wikipedia.org over HTTPS (TLS 1.2) and
@@ -126,6 +128,7 @@
color-coded headings and word-wrapped text. Multi-word titles
are accepted as separate arguments and joined automatically.
<strong>OPTIONS</strong>
<strong>-f</strong>
Full article mode. Display the complete article text instead
@@ -136,6 +139,7 @@
query and display a numbered list of up to 10 results.
Press a number key to view that article's summary.
<strong>EXAMPLES</strong>
wiki Linux
Show a summary of the Linux article.
@@ -146,13 +150,16 @@
wiki -s operating system
Search for articles related to "operating system".
<strong>TLS SUPPORT</strong>
Connections use BearSSL for TLS 1.2. Server certificates
are validated against the system CA bundle at
0:/os/certs/ca-certificates.crt.
<strong>KEYBOARD</strong>
<strong>Article pager</strong>
j / Down Scroll down one line
k / Up Scroll up one line
@@ -162,16 +169,18 @@
G / End Jump to bottom
q Quit pager
<strong>Search results</strong>
1-9, 0 View article (0 = result 10)
q Quit search
<strong>General</strong>
Ctrl+Q Abort during network request
<strong>SEE ALSO</strong>
fetch(1), ping(1), nslookup(1), shell(1)</code></pre>
<strong>SEE ALSO</strong>
<a href="fetch.html">fetch(1)</a>, <a href="ping.html">ping(1)</a>, <a href="nslookup.html">nslookup(1)</a>, <a href="shell.html">shell(1)</a></code></pre>
<hr>
<div class="center">