Terminal infrastructure improvements, lock dependency validator and procstat device implementation

Published: Mon 15 March 2021

Port of libterminfo from NetBSD (JPiec)

terminfo is a user-mode low-level library that exhibits terminal capabilities to libraries like curses. With those you may change terminal modes, move cursor, write to terminal in color and even define textual windows. Inclusion of terminfo will greatly improve Mimiker’s user interface. We ‘ll present here relevant demos, when available.

Introduction generic uart interface to interact with tty (PJ)

tty is a software device that provides terminal interface to user programs and asynchronously communicates with underlying UARTs like ns16550 (Malta) or PL011 (RPi3). In order to separate tty from these physical devices, a thin software layer consisting of uart and uart_tty was introduced. uart_tty defines a kernel thread that transfers data between tty input/output queues and the underlying UART. Most time the thread sleeps and is only waked up by an ISR that reacts to incoming traffic. The nice fact is that the ISR, defined by uart module, is generic rather than hardware specific, and communicates with underlying device using an abstract interface.#1019

Lock dependency validator (JU)

This is two-tier tool consisting of a kernel module and a GDB facility that maintains and presents an abstraction of resource allocation graph for locks in Mimiker’s kernel. A cycle in such a graph may indicate a possibility of deadlock, therefore providing valuable debugging info. Lock dependency validator significantly extends Mimiker’s programmer toolbox. Great! #996

/dev/procstat is finaly there! (FZ)

procstat is a simple software device that provides a system-wide summary of running processes. When /dev/procstat is opened, the summary is created. Subsequent reads from the device return per process info, like process identifiers (PID, PPID, PGRP, EUID), state, path etc #974. With procstat fully operational, we’ll be able to provide more admin tools, like the command line ps utility.

Further integration of KASAN with Mimiker kernel (PJ)

The Kernel Address Sanitizer (KASAN) keeps track on allocated/freed memory by using shadow map
which should grow as the kernel mapped memory grows. This is the purpose of #1040.

New toolchain building method JU

Mimiker’s build scripts needed review and improvements so to make them more flexible, in particular when multiple platform (MIPS, AArch64 and soon amd64) compilation goes into play.#1020

Further work on Statclock and gprof structures initialization WP

Kernel profiling FreeBSD tool port improvements#979.

Timers fixes (WP).

  • Remove modulo operation from PIT#987.
  • Remove modulo operation (MIPS timer) & prefer MIPS timer over PIT#1008.
  • Fix for counter overflow - arm timer #1032.

Debugging AArch64 platform code (JPiec)

  • Fix build & test run with -O2 optimization flag #1039
  • Preserve value of x18 register across kernel interrupts #1038

Housekeeping

Conversion of some macros into inline functions #1035, ensuring proper argument evaluation for others #1034 (PJ), fixing kstrndup #1044 (JPiec)