Auxiliary library for kernel development
Go to file
Alex Kotov dc7b1002a4
Split Make file into subdirectories (#48)
2022-06-10 08:23:03 +03:00
.github/workflows Common: move "pkgs/" to "bindings/" (closes #47) 2022-06-09 04:25:32 +03:00
bindings Common: move "pkgs/" to "bindings/" (closes #47) 2022-06-09 04:25:32 +03:00
build Create "dev" configs 2022-01-17 17:05:14 +05:00
common Common: more generated tests for cmdline 2022-06-08 05:56:06 +03:00
config Split Make file into subdirectories (#48) 2022-06-10 08:23:03 +03:00
dest Create "dev" configs 2022-01-17 17:05:14 +05:00
examples Split Make file into subdirectories (#48) 2022-06-10 08:23:03 +03:00
include Main: include/kernaux/file.h: Add type KernAux_File 2022-06-07 21:08:49 +03:00
libc Split Make file into subdirectories (#48) 2022-06-10 08:23:03 +03:00
libm Split Make file into subdirectories (#48) 2022-06-10 08:23:03 +03:00
m4 Split Make file into subdirectories (#48) 2022-06-10 08:23:03 +03:00
src Main: move libc to "libc/" 2022-06-08 06:20:08 +03:00
tests Split Make file into subdirectories (#48) 2022-06-10 08:23:03 +03:00
vendor Common: upgrade "vendor/cross" 2022-06-02 18:22:31 +03:00
.cirrus.yml Split Make file into subdirectories (#48) 2022-06-10 08:23:03 +03:00
.gitignore Split Make file into subdirectories (#48) 2022-06-10 08:23:03 +03:00
.gitmodules Test mruby package 2022-01-30 10:51:55 +05:00
AUTHORS Fix AUTHORS 2022-01-16 12:24:54 +05:00
CONTRIBUTING.md Split Make file into subdirectories (#48) 2022-06-10 08:23:03 +03:00
COPYING Update COPYING 2022-01-23 18:25:02 +05:00
ChangeLog Main: include/kernaux/file.h: Added 2022-06-07 20:48:58 +03:00
Makefile.am Split Make file into subdirectories (#48) 2022-06-10 08:23:03 +03:00
NEWS Fix: Bump version (0.2.0) 2022-01-24 00:04:21 +05:00
NEWS.md Bump version (0.3.0) [fix] 2022-05-30 23:50:37 +03:00
README Initial commit 2020-11-27 14:29:28 +05:00
README.md Split Make file into subdirectories (#48) 2022-06-10 08:23:03 +03:00
autogen.sh Main: autogen.sh: enable warnings 2022-06-09 04:37:25 +03:00
configure.ac Split Make file into subdirectories (#48) 2022-06-10 08:23:03 +03:00
sha256sums.txt Yank packages 2022-05-28 13:35:48 +03:00
shared.am Split Make file into subdirectories (#48) 2022-06-10 08:23:03 +03:00

README.md

libkernaux

Build status Build status (FreeBSD)

Auxiliary library for kernel development.

Topic on OSDev.org forum.

Table of contents

API

We use semantic versioning for stable APIs. Stable APIs can only change when major version number is increased (or minor while major is zero). Work-in-progress APIs can change at any time.

Configuration

Because this library has no external dependencies, we use autoconf features to control behavior of the library, and packages to choose it's components. Configuration options also follow the semantic versioning scheme and are split into stable and work-in-progress ones. Here we cover only stable options.

Non-default options

Features

  • --enable-freestanding - build for freestanding environment
  • --enable-split-all - split off all libraries
  • --enable-split-libc - split off libc
  • --enable-split-libm - split off libm
  • --enable-tests - enable usual tests and examples
  • --enable-tests-all - enable all tests
  • --enable-tests-python - enable tests that require Python 3 with YAML and Jinja2

Packages

  • --with-libc - provides the replacement for some standard C functions. Useful in freestanding environment, where no libc is present.
  • --with-libm - provides the replacement for C functions from <math.h>, Useful in freestanding environment, where no libm is present.

Default options

Features

  • --(enable|disable)-float - floating-point arithmetic
  • --(enable|disable)-werror - fail on warning (CFLAGS+='-Werror')

Packages

All packages are included by default. To exclude all packages except those explicitly included, use --without-all.

  • --with[out]-cmdline - command line parser
  • --with[out]-file - file simulator
  • --with[out]-ntoa - itoa/ftoa
  • --with[out]-printf - printf

Tips

Installation

./autogen.sh # if present
./configure
make
sudo make install

This is just a usual library. You can use most of it's APIs in hosted environment.

Development

./autogen.sh # if present
./configure --enable-tests # or --enable-tests-all, but see prerequisites
make

You can test with make check.

Cross

Create configuration script with ./autogen.sh (if present).

Let's assume that your target triplet is i386-elf. Configure with cross-compiler in $PATH to make without it in $PATH:

./configure \
  --host='i386-elf' \
  --enable-freestanding \
  --with-libc \
  --with-libm \
  AR="$(which i386-elf-ar)" \
  CC="$(which i386-elf-gcc)" \
  RANLIB="$(which i386-elf-ranlib)"

You can see the following messages. It's a bug in autoconf, just ignore it.

checking for _Bool... no
checking stdarg.h usability... no
checking stdarg.h presence... yes
configure: WARNING: stdarg.h: present but cannot be compiled
configure: WARNING: stdarg.h:     check for missing prerequisite headers?
configure: WARNING: stdarg.h: see the Autoconf documentation
configure: WARNING: stdarg.h:     section "Present But Cannot Be Compiled"
configure: WARNING: stdarg.h: proceeding with the compiler's result
configure: WARNING:     ## ---------------------------------------------------------- ##
configure: WARNING:     ## Report this to https://github.com/tailix/libkernaux/issues ##
configure: WARNING:     ## ---------------------------------------------------------- ##
checking for stdarg.h... no
checking stddef.h usability... no
checking stddef.h presence... yes
configure: WARNING: stddef.h: present but cannot be compiled
configure: WARNING: stddef.h:     check for missing prerequisite headers?
configure: WARNING: stddef.h: see the Autoconf documentation
configure: WARNING: stddef.h:     section "Present But Cannot Be Compiled"
configure: WARNING: stddef.h: proceeding with the compiler's result
configure: WARNING:     ## ---------------------------------------------------------- ##
configure: WARNING:     ## Report this to https://github.com/tailix/libkernaux/issues ##
configure: WARNING:     ## ---------------------------------------------------------- ##
checking for stddef.h... no

To install into specific directory use full path: DESTDIR="$(pwd)/dest" make install instead of DESTDIR=dest make install.

Check if compilation targets i386: objdump -d src/asm/i386.o. It should output something like this:

src/asm/i386.o:     file format elf32-i386


Disassembly of section .text:

00000000 <kernaux_asm_i386_read_cr0>:
   0:   0f 20 c0              mov    %cr0,%eax
   3:   c3                    ret

00000004 <kernaux_asm_i386_read_cr4>:
   4:   0f 20 e0              mov    %cr4,%eax
   7:   c3                    ret

00000008 <kernaux_asm_i386_write_cr0>:
   8:   8b 44 24 04           mov    0x4(%esp),%eax
   c:   0f 22 c0              mov    %eax,%cr0
   f:   c3                    ret

00000010 <kernaux_asm_i386_write_cr3>:
  10:   8b 44 24 04           mov    0x4(%esp),%eax
  14:   0f 22 d8              mov    %eax,%cr3
  17:   c3                    ret

00000018 <kernaux_asm_i386_write_cr4>:
  18:   8b 44 24 04           mov    0x4(%esp),%eax
  1c:   0f 22 e0              mov    %eax,%cr4
  1f:   c3                    ret

Architectures

Architectures should be properly identified. We use the following scheme, but it may change in future:

  • x86
    • i386
    • x86_64
  • riscv
    • riscv64
  • arm - we need more info, now similar to Debian
    • armel
    • armhf
    • arm64