summaryrefslogtreecommitdiffstats
path: root/usr/klibc/README.klibc
diff options
context:
space:
mode:
Diffstat (limited to 'usr/klibc/README.klibc')
-rw-r--r--usr/klibc/README.klibc147
1 files changed, 147 insertions, 0 deletions
diff --git a/usr/klibc/README.klibc b/usr/klibc/README.klibc
new file mode 100644
index 0000000..1a9e09f
--- /dev/null
+++ b/usr/klibc/README.klibc
@@ -0,0 +1,147 @@
+Introduction
+============
+
+This is klibc, what is intended to be a minimalistic libc subset for
+use with initramfs. It is deliberately written for small size,
+minimal entanglement, and portability, not speed. It is definitely a
+work in progress, and a lot of things are still missing.
+
+Building
+========
+
+The build procedure is not very polished yet, but for a native build
+with the default configuration it should be simple:
+
+1. In a recent Linux kernel source directory, run:
+ make headers_install INSTALL_HDR_PATH=<klibc-source-dir>/linux
+2. In the klibc source directory, run:
+ make
+
+Cross-compiling
+---------------
+
+If you're cross-compiling, you need to set KLIBCARCH to the
+appropriate architecture, and set CROSS_COMPILE to your toolchain
+prefix, on the "make" command line. You also need to set ARCH to the
+appropriate kernel architecture name on the "make headers_install"
+command line.
+
+IMPORTANT: if you're on a 64-bit machine with a 32-bit userland, and
+you want to build the 32-bit version: you need to set KLIBCARCH to the
+32-bit architecture. Building the 32-bit architecture usually (but
+not always) produces smaller binaries.
+
+If you are on ARM, and want to build a thumb version of the library
+(this is supported), change OPTFLAGS in arch/arm/MCONFIG to build
+thumb code.
+
+Out-of-tree builds
+------------------
+
+It is possible to use a separate build directory so that build
+products are not created in source directories. To do this,
+create the build directory and in that directory run:
+ make -f <source-dir>/Makefile KBUILD_SRC=<source-dir>
+
+Build configuration
+-------------------
+
+The build configuration is defined in a ".config" file in the
+build directory. If this file does not already exist, it is
+created as a copy of the "defconfig" source file.
+
+The configuration variables are:
+
+* CONFIG_KLIBC_ERRLIST (bool): Include standard error strings for
+ strerror(). If disabled, strerror() returns the error number as a
+ string.
+* CONFIG_KLIBC_ZLIB (bool): Include zlib decompression functions. If
+ disabled, kinit can only load uncompressed ramdisk images.
+* CONFIG_KLIBC_ZIP (bool): Include compression support in the gzip
+ command.
+* CONFIG_DEBUG_INFO (bool): Install all executables and the shared
+ library with debug information and build IDs included. If
+ disabled, the executables and shared library are stripped when
+ installed.
+
+For arm only:
+
+* CONFIG_KLIBC_THUMB (bool): Compile all code to Thumb instructions,
+ which should reduce code size slightly. If disabled, regular ARM
+ instructions are used.
+* CONFIG_AEABI (bool): Compile ARM code to use the ARM EABI and the
+ "new" system call ABI.
+
+If both CONFIG_KLIBC_THUMB and CONFIG_AEABI are disabled, the GNU APCS
+and the old system call ABI are used.
+
+For i386 only:
+
+* CONFIG_REGPARM (bool): Optimise function calls by passing the first
+ 3 function parameters in registers.
+
+For mips64 only:
+
+* CONFIG_KLIBC_MIPS_USE_CB (bool): Use compact branch instructions.
+ This should be enabled when targetting MIPS R6 and must be disabled
+ for older MIPS ISAs.
+
+Building without kernel source
+------------------------------
+
+If you already have a copy of the current kernel UAPI headers, you
+don't need the kernel source as well. You can either:
+
+1. Copy or link to the UAPI headers so that they appear under the
+ "linux/include" subdirectory.
+2. Set the KLIBCKERNELSRC variable on the "make" command line to
+ point to the *parent* of the UAPI headers directory.
+
+Architecture support
+====================
+
+The following is the last known status of various architectures:
+
+ alpha: Working
+ arm-thumb: Working
+ arm: Working
+ arm64: Working
+ h8300: Not yet ported
+ i386: Working
+ ia64: Working
+ m68k: Working
+ mips: Working
+ mips64: Working
+ parisc: Working
+ parisc64: Not yet ported
+ ppc: Working
+ ppc64: Working
+ riscv64: Working
+ s390: Working
+ s390x: Working
+ sh: Working
+ sparc: Working
+ sparc64: Working
+ x86-64: Working
+ xtensa: Not yet ported
+
+Shared library support requires recent binutils on many architectures.
+
+Note that even the "working" ones likely have bugs. Please report
+them if you run into them.
+
+Testing
+=======
+
+Try the test programs in the tests/ directory. They should run...
+
+Contact
+=======
+
+Contact the klibc mailing list:
+
+ https://www.zytor.com/mailman/listinfo/klibc
+
+... for more info.
+
+ -hpa