= Introduction = [http://www.mutekh.org/ MutekH] is a free and portable operating system for embedded platforms, ranging from micro-controller to multiprocessor systems. It's heavily used on multiprocessor platforms in various projects and was originally designed to natively support processors heterogeneity. MutekH is very modular as it is [http://en.wikipedia.org/wiki/Exokernel exokernel] based; it is composed of the Hexo hardware abstraction layer and the Mutek base kernel. The exokernel comes with several operating system interface libraries and services libraries. It was designed to be easily extended with new libraries and platform support, and allows development of kernel land and user land applications. It is fully configurable to match every application needs and platform constraints, moreover it has an easy to use build system and testsuite. MutekH is currently used in several research projects, laboratories and universities and is actively developed. It was originally started at the [http://www-soc.lip6.fr/ SoC] department of the [http://www.lip6.fr/ LIP6] Laboratory ([http://www.upmc.fr/ UPMC] in Paris). Some [PapersAndPublications publications] used MutekH as a supporting OS. It comes with [#Documentation tutorials and documentation]. = Features = == Architecture == MutekH is composed of the following major components: The Hexo hardware abstraction layer which deals with processor and platform abstraction, the Mutek kernel which offer usual hardware independent kernel base services, some operating system interface libraries supporting kernelland or userland applications, some services libraries and drivers. See [#Modulesoverview modules list] below for details. Processor specific and platform specific codes of the HAL are located in separate sub-modules. [[Image(global_view.png,nolink)]] == Processor support == MutekH HAL has support for the following processors: * [wiki:Processor/Arm Arm] family of processors. * [wiki:Processor/Mips Mips] family of processors. * [wiki:Processor/PowerPc PowerPc] family of processors. * [wiki:Processor/Sparc Sparc] family of processors. * Intel [wiki:Processor/x86 x86] family of processors. * Altera [wiki:Processor/Nios2 Nios2] soft core processors. * Lattice [wiki:Processor/LM32 LatticeMico32] soft core processors. * Experimental support code for the Xilinx Microblaze soft core is available in the microblaze branch. == Platform support == MutekH HAL has built-in support for the following platforms: * [wiki:Arch/Soclib Soclib] multiprocessor platforms with embedded software debugging features. * [wiki:Arch/IbmPc Pc platform] with x86 multiprocessor support, runs on real hardware or on emulators like qemu. * [wiki:Arch/Simple Simple platforms] with single processor (i.e. micro-controller platforms) * [wiki:Arch/Emu Unix processes] emulation which enables kernel and application to run embedded in Linux or OsX process(es). * [http://www.gaisler.com/ Aeroflex Gaisler] platforms based on sparc leon processor. == Modules overview == Several modules are available: * Base modules * Hexo HAL (hexo) * Mutek base kernel (mutek) * C library (libc) * Container library (gpct) * [wiki:Drivers Device drivers] for various peripherals * Parallel programming and Operating system interface libraries * Native Posix threads support (libpthread) * GNU OpenMP runtime library (libgomp) * A native implementation of [https://alchemy.futurs.inria.fr/capsule/ Capsule] parallel programming library. (libcapsule) * [https://www.soclib.fr/trac/dev/wiki/Tools/Muteks MutekS], a static OS for [https://www-asim.lip6.fr/trac/dsx DSX] SoC design tool (libsrl) * Unix library (development just started) (libunix) * Major services libraries: * TPC/IP stack networking library (libnetwork) * File system support library (libvfs) along with file system drivers (FAT 16/32, ISO9660, RamFS, NFS) * ELF binary file format handling library (libelf) * Flattened device tree library (libfdt) * Other useful libraries: * [http://www.lua.org/ Lua] scripting library (liblua) * [http://www.netlib.org/fdlibm/ Fdlibm] standard math library (libm) * [http://savannah.nongnu.org/projects/libtermui/ LibTermUI] Ansi terminal driver and getline library (libtermui) * A simple cryptographic library (libcrypto) * [http://bellard.org/TinyGL/ TinyGL], a very small implementation of a subset of OpenGL (libtinygl) == Some ported applications == MutekH is used in various projects and as been used with many applications, some successfully ported and well known applications include: * H264 video decoder (multiprocessor) * MJPEG and Theora video decoder (multiprocessor) * [http://www.capsl.udel.edu/splash/ Splash] benchmarks. * [http://en.wikipedia.org/wiki/Doom_%28video_game%29 Doom] video game with network support * Various applications using the [http://www.lua.org Lua] script engine * [wiki:UsingMutekH/TinyGLGears Applications] using TinyGL library. = Documentation = == Getting started == Several documents are available to help you start using MutekH. You may also want to [https://www.mutekh.org/wws/subscribe/mutekh-users subscribe] to the mutekh-users list. * The [wiki:Install] page explains how to get the source code and install development tools. * The [wiki:BuildingExamples] page briefly explains how to build example applications. * The [wiki:QuickStartUnix MutekH as Unix process quick start guide] is a step by step guide to run MutekH embedded in a GNU/Linux or !MacOs user process. * The [wiki:QuickStartSoclib MutekH quick start guide for SoCLib] is a step by step guide to run MutekH over a [wiki:Arch/Soclib Soclib] hardware simulator, intended for software developers. * The [wiki:Arch/Soclib/Tutorial MutekH/SoCLib tutorial] is a step by step guide to write a simple MutekH application for a customizable [wiki:Arch/Soclib Soclib] multi-processor hardware simulator, intended for mixed software/hardware development. * [https://www.soclib.fr/ SoCLib] provides a virtual machine image containing some sample platforms and applications based on MutekH. * [PortingYourApp Porting your application] is a step by step guide which show how to port the Berkley calculator ({{{bc}}}) Unix application on MutekH. * [wiki:UsingMutekH/LuaMicroShell Using the lua_microshell example] == General documentation == * [http://www.mutekh.org/www/mutekh_api/ MutekH API reference manual] * Using the BuildSystem to build applications. * Using [FlattenedDeviceTree Flattened device trees] to describe hardware. * [wiki:UsingMutekH/Sam7 Using MutekH on a AT91SAM7] Arm micro-controller based platform. == Kernel development == * Using the [wiki:Testsuite]. * Using the BuildSystemDev to add modules and features. * How the KernelStartUp process takes place. * Writing [wiki:HeaderDoc header documentation] for the API reference manual. * [NewDriver Adding a driver], or [NewDriverClass adding a new driver class] * Usage of IntegerTypes in MutekH = Getting the source = Latest source code can be fetched from the [http://mercurial.selenic.com/wiki/ Mercurial] repository: See [[Install]] page for detailed instructions. = Contact = * A mailing list is available for questions, announcements... You may freely [https://www.mutekh.org/wws/subscribe/mutekh-users subscribe here]. * A list of major contributors is available [wiki:Contributors here].