Name Last modified Size
Parent Directory 18-Nov-2017 16:31 - CHANGELOG.txt 18-Nov-2017 16:30 838k README.txt 16-Nov-2017 05:43 35k boot/ 09-Mar-2017 11:45 - bootkernel/ 04-Apr-2017 11:26 - doc/ 04-Nov-2017 16:20 - examples/ 16-Nov-2017 13:31 - extensions/ 08-Sep-2017 05:26 - include/ 20-Oct-2017 13:36 - scripts/ 30-May-2017 08:13 - thinservers/ 08-Sep-2017 05:26 - toolchain/ 01-Oct-2017 08:11 -
This framework supports Linux on several single board microcomputers. The goal of the MuntsOS project is to deliver a turnkey, RAM resident Linux operating system for very low cost single board microcomputers. With MuntsOS installed, such microcomputers can treated as components, as Linux microcontrollers, and integrated into other projects just like traditional single chip microcontrollers.
MuntsOS is a stripped down Linux distribution that includes a small compressed root file system within the kernel binary itself. At boot time the file system is unpacked into RAM and thereafter the system runs entirely in RAM. The kernel image file, including the compressed root file system, runs about 9 MB.
Each kernel tarball contains a kernel image file (.img), which may be common to several different microcomputer boards, and a device tree file (.dtb) that is specific to a particular microcomputer board. Some kernel tarballs also contain one or more device tree overlay files (.dtbo) that can make small changes to the device tree at boot time.
Prebuilt MuntsOS kernel tarballs and device tree overlays are available at:
The MuntsOS root file system can be extended at boot time using any of three mechanisms. First, if /boot/tarballs exists, any gzip tarballs in it will be extracted on top of the root file system. Typically you would use this mechanism for customized /etc/passwd, .ssh/authorized_keys, and similiar files.
Second, the system startup script /etc/rc will install any Debian package files found in /boot/packages. Note that packages from the Debian project will probably not work with MuntsOS. Packages should be built specifically for MuntsOS. (The .deb package file format is simply convenient to use, as it is supported by BusyBox.)
Thirdly, the system startup script /etc/rc can be configured via a kernel command line option to search for a directory called autoexec.d in various places, such as SD card, USB flash drive, USB CD-ROM or NFS mount. If autoexec.d is found, each executable program or script in it is executed. Programs, scripts and self-extracting shell archives placed in autoexec.d can reconfigure the system for special purposes and/or extend it by unpacking and installing programs and libraries to the root file system in RAM. The LED example extension demonstrates how to build a fairly elaborate shell archive that unpacks and installs application software.
The idea is to build a MuntsOS kernel image (which takes a long time) once and install it to the target platform. Then the specific application software can be built after the fact and installed as one or more extension scripts in /boot/autoexec.d, Debian package files in /boot/packages, and/or tarball files in /boot/tarballs.
Prebuilt MuntsOS extensions are available at:
The Thin Server is a system design pattern that is little more than a network interface for a single I/O device. Ideally, a Thin Server will be built from a cheap and ubiquitous network microcomputer like the Raspberry Pi. The software must be easy to install from a user's PC or Mac without requiring any special programming tools. It must be able to run headless, administered via the network. It must be able to survive without orderly shutdowns, and must not write much to flash media. It must provide a network based API (Application Programming Interface) using HTTP as a lowest common denominator.
MuntsOS, with its operating system running entirely from RAM, serves well for the Thin Server, and the two concepts have evolved together over the past few years. The simplest way to use MuntsOS is to download one of the prebuilt .zip files and extract it to a freshly formatted FAT32 SD card. You can then modify autoexec.d/00-wlan-init on the SD card to pre-configure it for your wireless network environment, if desired, before inserting it in the target board. After booting MuntsOS, run sysconfig to perform more system configuration.
Prebuilt MuntsOS thin servers are available at:
The BeagleBone was one of the first low cost Linux microcomputers. It originally sold for USD $89 at its launch in October 2011.
The BeagleBone has a Texas Instruments Sitara AM3359 processor running at 720 MHz and 256 MB of RAM. It has two USB port sockets: One type A host port and one type mini-B device port. Unlike any of its successors, the original BeagleBone has its USB device port connected to a USB hub instead of directly to the AM3359. Three distinct USB devices are available on the device port: The AM3359 device port, a USB JTAG device, and a USB serial port device connected to the AM3359 console serial port.
The BeagleBone device tree enables the I2C bus controller /dev/i2c-2 on its expansion headers. MuntsOS includes some device tree overlays that also enable the serial ports /dev/ttyS1, /dev/ttyS2, /dev/ttyS4, and /dev/ttyS5, and the SPI devices /dev/spidev1.0 and /dev/spidev1.1.
The BeagleBone is now obsolete, but still available at some suppliers. Its USB serial port console makes it somewhat easier to use than its successors. MuntsOS will continue to support it as long as the BeagleBone kernel source repository does.
Newly manufactured BeagleBone boards assembled with a 1 GHz AM3358 processor are apparently available from Special Computing.
The BeagleBone Black is a cost reduced version of the BeagleBone. It currently sells for about USD $55. The BeagleBone Black originally sold for USD $45 at its launch in April 2013, which would have been an impressive feat except that the Raspberry Pi had already arrived on the market a few months earlier at USD $35. Although the BeagleBone Black was more capable than the first couple of Raspberry Pi generations, it has been overshadowed by the Raspberry Pi Model 2 and 3, which sport quad-core processors. The great strength of the BeagleBone Black and its kin compared to the Raspberry Pi family is the sheer number of GPIO pins and peripheral ports available on its two 46-pin expansion headers. Even after eMMC, I2C, SPI, and UART pins have been allocated, there are 42 GPIO pins available.
All of the current members of the BeagleBone family have Texas Instruments Sitara AM3358 processors running at 1 GHz. Most have 512 MB of RAM and 4 GB eMMC flash on board. The AM3558 processor also has two PRU (Programmable Realtime Unit) I/O processors on board that are capable of very fast I/O operations.
The BeagleBone Black uses the same kernel as the BeagleBone, with a different device tree. The BeagleBone Black device tree enables the I2C bus controller /dev/i2c-2 on its expansion headers. MuntsOS includes some device tree overlays that also enable the serial ports /dev/ttyS1, /dev/ttyS2, /dev/ttyS4, and /dev/ttyS5, and the SPI devices /dev/spidev1.0 and /dev/spidev1.1.
Unlike the original BeagleBone and the BeagleBone Green (see below), the BeagleBone Black has an HDMI video output (though with a pesky micro HDMI connecteor). The HDMI interface consumes a large number of GPIO pins when it is enabled. This MuntsOS port does not enable the HDMI interface.
The BeagleBone Black Wireless is a variant of the BeagleBone Black that has replaced the wired Ethernet interface with a built-in Wifi radio. It also has replaced the mini-B slave USB receptacle with a more modern micro-B receptacle. It is otherwise highly compatible with the BeagleBone Black. It sells for about USD $70, considerably more than any of the other boards supported by MuntsOS, and also considerably more than a BeagleBone Green plus a USB WiFi adapter.
The BeagleBone Black Wireless uses the same kernel as the BeagleBone, with a different device tree. The BeagleBone Black Wireless device tree enables the I2C bus controller /dev/i2c-2 on its expansion headers. MuntsOS includes some device tree overlays that also enable the serial ports /dev/ttyS1, /dev/ttyS2, /dev/ttyS4, and /dev/ttyS5, and the SPI devices /dev/spidev1.0 and /dev/spidev1.1.
MuntsOS does not currently support the on-board Bluetooth radio.
The BeagleBone Green is a further cost reduced version of the BeagleBone Black, from Chinese manufacturer Seeed Studio, that sells for about USD $44. Changes from the BeagleBone Black design are:
The BeagleBone Green uses the same kernel as the BeagleBone, with a different device tree. The BeagleBone Green device tree enables the I2C bus controller /dev/i2c-2 on its expansion headers. MuntsOS includes some device tree overlays that also enable the serial ports /dev/ttyS1, /dev/ttyS2, /dev/ttyS4, and /dev/ttyS5, and the SPI devices /dev/spidev1.0 and /dev/spidev1.1. Furthermore, /dev/i2c-2 is brought out to the left Grove connector J4 and /dev/ttyS2 is brought out to the right Grove connector J5
The BeagleBone Green is cost competitive with the Raspberry Pi, costing only a little more but including on board eMMC and a USB cable. It has only a single core processor, compared to the quad-core Raspberry Pi 3, but provides many more GPIO pins on its two 46-pin expansion headers. It also has separate dedicated host and slave USB ports as well as the two Grove sockets.
The BeagleBone Green plus a USB WiFi adapter is about USD $20 cheaper than a BeagleBone Black Wireless, while retaining the possibility for wired Ethernet.
The PocketBeagle is a cost and size reduced version of the BeagleBone Black. It currently sells for about USD $25 and is intended for the same market niche as the Rasperry Pi Zero. Although considerably more expensive than either version of the Raspberry Pi Zero, the PocketBeagle has many more I/O devices directly accessible from its expansion headers.
The PocketBeagle uses the same kernel as the BeagleBone, with a different device tree. The PocketBeagle device tree enables the follow devices on its expansion headers:
The expansion headers are cleverly arranged such that the two inner rows match the MikroElektronika mikroBUS specification. If female sockets are installed on the top of the PocketBeagle, two Click Boards can be plugged directly into the expansion headers.
Like the Raspberry Pi Zero, the PocketBeagle comes without on-board eMMC, USB cable, micro-SD card, or expansion headers.
Unlike the Raspberry Pi Zero, the PocketBeagle expansion headers do not match its progenitors, so BeagleBone capes cannot be used on it.
The Raspberry Pi is a low cost Linux microcomputer available from many sources for USD $20 to $35 (depending on the particular model). It has a 700 MHz BCM2835 ARMv6 CPU and comes with with either 256 MB or 512 MB of RAM. The various Raspberry Pi models have 10/100 Ethernet, 1 to 4 USB ports, HDMI, RCA composite video and a stereo headphone jack. They also have several miniature connectors for camera and LCD display modules as well as a single 2.54 mm pitch GPIO expansion connector, to which expansion boards like this can be attached.
This MuntsOS port has been tested on the Raspberry Pi 1 Models A, B, A+, B+, and CM1. All Raspberry Pi 1 boards use the same kernel, with different device trees. Use RaspberryPi1 for the original Model A and B, and RaspberryPi1Plus for the A+ and B+.
There is also a separate Raspberry Pi 1 kernel with USB Network Gadget support enabled. This runs on the Model A and A+ (with different device trees) and allows powering and communicating with a Raspberry Pi A or A+ solely through the USB port. Use RaspberryPi1Gadget for the original Model A in USB slave mode and RaspberryPi1PlusGadget for the Model A+ in USB slave mode.
The Raspberry Pi is not the first low cost Linux microcomputer to hit the market. It is neither the cheapest nor highest performance. But it has certainly redefined the very concept, capturing the imaginations of many (particularly young people) and shipping the most units (over twelve million!)
All Raspberry Pi 1 variants except the Raspberry Pi Zero are now obsolete, but many millions of units are still in service, and MuntsOS will continue supporting them for the forseeable future.
The Rasbperry Pi 2 Model B is a greatly enhanced version of the Raspberry Pi, selling for about USD $35. It has a 900 MHz BCM2836 ARMv7 quad-core CPU and comes with 1 GB of RAM. It is mechanically compatible with the Raspberry Pi 1 Model B+, with 10/100 Ethernet, 4 USB ports, 3.5 mm A/V jack, and a 40-pin GPIO expansion header.
The Raspberry Pi 2 is now obsolete, but many millions of units are still in service, and MuntsOS will continue supporting them for the forseeable future.
The Rasbperry Pi 3 Model B is a greatly enhanced version of the Raspberry Pi, selling for about USD $35. It has a 1200 MHz BCM2837 ARMv8 quad-core CPU and comes with 1 GB of RAM. It is mechanically compatible with the Raspberry Pi 1 Model B+ and Raspberry Pi 2 Model B, with 10/100 Ethernet, 4 USB ports, 3.5 mm A/V jack, and a 40-pin GPIO expansion header. The Raspberry Pi 3 Model B includes on board Bluetooth and WiFi radios.
This MuntsOS port enables the WiFi radio, but disables the internal Bluetooth radio, in favor of the serial port on the expansion header. If the internal WiFi radio seems intermittent, check the power supply voltage. The Raspberry Pi 3 requires a heftier power supply than earlier models, and the internal WiFi radio seems to be sensitive to drooping supply voltage.
Although the BCM2837 has a 64-bit capable processor, this MuntsOS port, like Raspbian, runs in 32-bit mode and is built with the same C/C++ cross-toolchain as the Raspberry Pi 2. Extensions, packages, and cross-toolchains built for the Raspberry Pi 2 work perfectly well on the Raspberry Pi 3.
The Raspberry Pi Zero is a smaller, cost reduced version of the Raspberry Pi 1 that sells for only USD $5. It uses the same BCM2835 CPU (though clocked at 1 GHz) as the Raspberry Pi 1. It has 512 MB of RAM and fewer/smaller/cheaper connectors. It still has the same 40-pin expansion header as the A+/B+/2/3 models.
The Raspberry Pi Zero W[ireless] costs more (selling for USD $10) but includes on board Bluetooth and WiFi radios, using the same wireless chip set as the Raspberry Pi 3. As with the Raspberry Pi 3, this MuntsOS port enables the WiFi radio but disables the Bluetooth radio, in favor of the serial port on the expansion header.
A MuntsOS kernel for USB gadget mode is also available for the Raspberry Pi Zero, whose micro-USB OTG connector is easier to use than the standard USB connector of the Raspberry Pi Model A and A+. Use the micro-USB connector labeled "USB" to power and control the Raspberry Pi Zero from a host computer. The absolute minimum possible usable Raspberry Pi kit consists of a Raspberry Pi Zero, a micro-USB cable, and a micro-SD card with one of the MuntsOS Raspberry Pi Zero Gadget Thin Servers installed.
I build a custom C/C++/Fortran/Ada cross-toolchain (using Crosstool-NG) for each MuntsOS platform family. Switching to a custom cross-toolchain has allowed simplifying the make files somewhat. More importantly, Crosstool-NG provides an Ada cross-compiler for the ARMv6 Raspberry Pi 1 and Zero. Crosstool-NG also provides host gdb and target gdbserver for debugging programs running on the target.
Each C/C++ cross-toolchain requires a number of additional software component libraries, which are packaged and distributed separately but installed into the same directory tree as the parent C/C++ cross-toolchain.
I also build cross-toolchains for Free Pascal. These Pascal cross-toolchains rely on the libraries in the C/C++ cross-toolchain, which must be installed first.
Sometimes cross-toolchains can be shared among different platforms: For example, the BeagleBone, Raspberry Pi 2, and Raspberry Pi 3 can all use the same cross-toolchains (the ARMv7 cross-toolchains nominally built for the Raspberry Pi 2).
Cross-toolchain packages built for Debian 9 (Stretch) (both 32-bit and 64-bit), are available at:
Since they are statically linked, it may be possible to use these cross-toolchain packages on other Linux distributions (possibly with the help off a conversion utility like alien). They are known to work with Ubuntu 14 LTS including Windows Subsystem for Linux.
The source code is available at:
Use the following command to clone it:
git clone http://git.munts.com/arm-linux-mcu.git
Prebuilt binaries for MuntsOS are available at:
Original works herein are copyrighted as follows:
Copyright (C)2010-2017, Philip Munts, President, Munts AM Corp. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Redistributed works herein are copyrighted and/or licensed by their respective authors.
I am available for custom system development (hardware and software) of products based on embedded Linux microcomputers or other processors.