summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Klug <john.klug@multitech.com>2020-11-11 14:22:06 -0600
committerJohn Klug <john.klug@multitech.com>2020-11-11 14:22:06 -0600
commitd75cc859d0009649aa5c97731933b50ba48231ba (patch)
treefbd1fac00b1f4a4b5688352f402335918f7c4807
downloadmeta-mlinux-atmel-5.3.0a.tar.gz
meta-mlinux-atmel-5.3.0a.tar.bz2
meta-mlinux-atmel-5.3.0a.zip
MultiTech mLinux Atmel distribution OpenEmbedded layer5.3.0a
-rw-r--r--COPYING.MIT17
-rw-r--r--LICENSE9
-rw-r--r--README39
-rw-r--r--classes/mlinux-image.bbclass109
-rw-r--r--classes/mlinux-mirrors.bbclass14
-rw-r--r--classes/mlinux_metadata_scm.bbclass14
-rw-r--r--conf/layer.conf10
-rwxr-xr-xprod-scripts/MTCDT-0.1/cdteep.sh110
-rw-r--r--recipes-core/base-files/fstab-at91/fstab10
-rw-r--r--recipes-core/base-files/fstab-at91_1.0.bb17
-rw-r--r--recipes-core/images/core-image-rorootfs-overlay-initramfs.bb23
-rw-r--r--recipes-core/images/mlinux-base-image.bb75
-rw-r--r--recipes-core/images/mlinux-basetest-image.bb9
-rw-r--r--recipes-core/images/mlinux-commissioning-image.bb7
-rw-r--r--recipes-core/images/mlinux-factory-image.bb94
-rw-r--r--recipes-core/images/mlinux-factory-test-image.bb8
-rw-r--r--recipes-core/images/mlinux-minimal-image.bb83
-rw-r--r--recipes-core/images/mlinux-mono-image.bb3
-rw-r--r--recipes-core/images/mlinux-mtcap-commissioning-image.bb17
-rw-r--r--recipes-core/images/mlinux-mtcap-image.bb75
-rw-r--r--recipes-core/images/mlinux-mtcap-test-image.bb89
-rw-r--r--recipes-core/images/mlinux-mths-image.bb8
-rw-r--r--recipes-core/images/mlinux-mtr-image.bb76
-rw-r--r--recipes-core/images/mlinux-mtrv1-image.bb79
-rw-r--r--recipes-core/images/mlinux-rs9113-base-image.bb5
-rw-r--r--recipes-core/images/mlinux-rs9113-factory-image.bb5
-rw-r--r--recipes-core/images/mlinux-rs9113-mtrv1-image.bb75
-rw-r--r--recipes-core/images/mlinux-sdk.bb5
-rw-r--r--recipes-core/images/mtcap-modules.inc286
-rw-r--r--recipes-core/images/mtr-modules.inc293
-rwxr-xr-xrecipes-core/mlinux-scripts/mlinux-scripts/mlinux-firmware-upgrade69
-rw-r--r--recipes-core/mlinux-scripts/mlinux-scripts_%.bbappend13
-rw-r--r--recipes-core/udev/eudev/mtcap/mtcap.rules8
-rw-r--r--recipes-core/udev/eudev/mtcdt/accessory_ethernet.rules21
-rw-r--r--recipes-core/udev/eudev/mtcdt/mtcdt.rules14
-rw-r--r--recipes-core/udev/eudev/mtr/mtr.rules13
-rw-r--r--recipes-core/udev/eudev/mtrv1/mtrv1.rules13
-rw-r--r--recipes-core/udev/eudev_%.bbappend11
-rwxr-xr-xscripts/build-feed-extras.sh11
39 files changed, 1837 insertions, 0 deletions
diff --git a/COPYING.MIT b/COPYING.MIT
new file mode 100644
index 0000000..fb950dc
--- /dev/null
+++ b/COPYING.MIT
@@ -0,0 +1,17 @@
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..5caf3b6
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,9 @@
+All MultiTech-copyrighted software contained in mLinux is covered by
+GPL (GNU General Public License) version 2, unless provided under a different license.
+
+All bitbake metadata is MIT licensed unless otherwise stated. Source code
+included in tree for individual recipes is under the LICENSE stated in
+the associated recipe (.bb file) unless otherwise stated.
+
+License information for any other files is either explicitly stated
+or defaults to GPL version 2.
diff --git a/README b/README
new file mode 100644
index 0000000..0bd2cf2
--- /dev/null
+++ b/README
@@ -0,0 +1,39 @@
+MultiTech mLinux distribution OpenEmbedded layer for Atmel
+
+This layer depends on:
+
+URI: git://git.openembedded.org/openembedded-core
+branch: thud
+revision: HEAD
+
+Numerous layers in:
+URI: git://git.openembedded.org/meta-openembedded
+branch: thud
+revision: HEAD
+
+MultiTech hardware layer:
+URI: git://git.multitech.net/meta-multitech
+branch: thud
+revision: HEAD
+
+URI: git://github.com/woglinde/meta-java.git
+branch: thud
+revision: HEAD
+
+URI: git://git.yoctoproject.org/meta-mono
+branch: thud
+revision: HEAD
+
+URI: git://github.com/imyller/meta-nodejs.git
+branch: thud
+revision: HEAD
+
+------------
+ BUILDING
+------------
+
+mLinux should be built using the mlinux integration repo at git://git.multitech.net/mlinux
+or using the downloadable tarball. See http://www.multitech.net for instructions and
+downloads.
+
+This is mLinux 5.x.y, based on Yocto-Morty and Atmel Linux 4.9.
diff --git a/classes/mlinux-image.bbclass b/classes/mlinux-image.bbclass
new file mode 100644
index 0000000..dab5e5b
--- /dev/null
+++ b/classes/mlinux-image.bbclass
@@ -0,0 +1,109 @@
+# redefine mkfs.jffs2 command and remove --faketime option so we get non-zero file times
+# having file mod times of zero confuses cron
+IMAGE_CMD_jffs2 = "mkfs.jffs2 --root=${IMAGE_ROOTFS} --output=${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.jffs2 ${EXTRA_IMAGECMD}"
+
+# set specified mtadm password in image using MTADM_PASSWORD_HASH
+mlinux_set_root_password () {
+ if [ -e ${IMAGE_ROOTFS}/etc/shadow ]; then
+ sed -i 's%^mtadm:[^:]*:%mtadm:${MTADM_PASSWORD_HASH}:%' ${IMAGE_ROOTFS}/etc/shadow
+ elif [ -e ${IMAGE_ROOTFS}/etc/passwd ]; then
+ sed -i 's%^mtadm:[^:]*:%mtadm:${MTADM_PASSWORD_HASH}:%' ${IMAGE_ROOTFS}/etc/passwd
+ fi
+}
+ROOTFS_POSTPROCESS_COMMAND += "mlinux_set_root_password;"
+
+# set custom product sw version to /etc/issue file
+mlinux_set_product_version () {
+ PREV_DIR=$(pwd)
+ cd "$TOPDIR"
+ PRODUCT_VER=$(git describe)
+ cd "$PREV_DIR"
+ PRODUCT_DATE=$(date +%Y-%m-%dT%H:%M:%S)
+
+ if [ -n "${PRODUCT_VER}" ]; then
+ # set issue
+ if cat ${IMAGE_ROOTFS}/etc/issue | grep "Version: " > /dev/null 2>&1 ; then
+ # replace
+ sed -i "s/^Version: .*$/Version: $PRODUCT_VER/g" ${IMAGE_ROOTFS}/etc/issue
+ sed -i "s/^Date: .*$/Date: $PRODUCT_DATE/g" ${IMAGE_ROOTFS}/etc/issue
+ else
+ # add
+ echo "" >> ${IMAGE_ROOTFS}/etc/issue
+ echo "Version: ${PRODUCT_VER}" >> ${IMAGE_ROOTFS}/etc/issue
+ echo "Date: $(date +%Y-%m-%dT%H:%M:%S)" >> ${IMAGE_ROOTFS}/etc/issue
+ fi
+ fi
+}
+ROOTFS_POSTPROCESS_COMMAND += "mlinux_set_product_version;"
+
+# generate upgrade.bin files -- provides single file for upgrades
+do_firmware() {
+ cd ${DEPLOY_DIR_IMAGE}
+
+ case "${MTBSP}" in
+ mtbsp-at91)
+ rm -f bstrap.bin* uboot.bin* uImage.bin* rootfs.jffs2* model
+
+ cp at91bootstrap_pmecc_padded.bin bstrap.bin
+ cp u-boot-${MACHINE}.bin uboot.bin
+ cp uImage-${MACHINE}.bin uImage.bin
+ cp ${IMAGE_BASENAME}-${MACHINE}.jffs2 rootfs.jffs2
+
+ cat bstrap.bin | md5sum > bstrap.bin.md5
+ cat uboot.bin | md5sum > uboot.bin.md5
+ cat uImage.bin | md5sum > uImage.bin.md5
+ cat rootfs.jffs2 | md5sum > rootfs.jffs2.md5
+
+ case "${MACHINE}" in
+ mtcdt)
+ echo "mtcdt|mtcdtip|mtcdtiphp" >model
+ ;;
+ mtrv1)
+ echo "mtrv1|mths" >model
+ ;;
+ *)
+ echo "${MACHINE}" > model
+ ;;
+ esac
+
+ tar cvf ${IMAGE_BASENAME}-${MACHINE}-upgrade.bin uImage.bin* rootfs.jffs2* model
+ tar cvf ${IMAGE_BASENAME}-${MACHINE}-upgrade-withboot.bin bstrap.bin* uboot.bin* uImage.bin* rootfs.jffs2* model
+ rm -f bstrap.bin* uboot.bin* uImage.bin* rootfs.jffs2* model
+ ;;
+ *)
+ ;;
+ esac
+}
+addtask firmware after do_image_complete before do_build
+
+# make links to images in TFTPBOOT_DIR for ease of development
+do_tftpboot_links() {
+ if [ -n "${TFTPBOOT_DIR}" ]; then
+ case "${MTBSP}" in
+ mtbsp-at91)
+ TFTPBOOT_CLEAN="oe_bootstrap.bin oe_bootstrap_pmecc_padded.bin \
+ oe_u-boot.bin oe_uImage.bin oe_rootfs.jffs2 oe_images oe_upgrade.bin oe_upgrade-withboot.bin"
+
+ install -d ${DEPLOY_DIR_IMAGE}
+
+ for f in ${TFTPBOOT_CLEAN}; do
+ rm -f ${TFTPBOOT_DIR}/$f
+ done
+
+ ln -nfs ${DEPLOY_DIR_IMAGE}/at91bootstrap.bin ${TFTPBOOT_DIR}/oe_bootstrap.bin
+ if [ -f ${DEPLOY_DIR_IMAGE}/at91bootstrap_pmecc_padded.bin ]; then
+ ln -nfs ${DEPLOY_DIR_IMAGE}/at91bootstrap_pmecc_padded.bin ${TFTPBOOT_DIR}/oe_bootstrap_pmecc_padded.bin
+ fi
+ ln -nfs ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.bin ${TFTPBOOT_DIR}/oe_u-boot.bin
+ ln -nfs ${DEPLOY_DIR_IMAGE}/uImage-${MACHINE}.bin ${TFTPBOOT_DIR}/oe_uImage.bin
+ ln -nfs ${DEPLOY_DIR_IMAGE}/${IMAGE_BASENAME}-${MACHINE}.jffs2 ${TFTPBOOT_DIR}/oe_rootfs.jffs2
+ ln -nfs ${DEPLOY_DIR_IMAGE}/${IMAGE_BASENAME}-${MACHINE}-upgrade.bin ${TFTPBOOT_DIR}/oe_upgrade.bin
+ ln -nfs ${DEPLOY_DIR_IMAGE}/${IMAGE_BASENAME}-${MACHINE}-upgrade-withboot.bin ${TFTPBOOT_DIR}/oe_upgrade-withboot.bin
+ ln -nfs ${DEPLOY_DIR_IMAGE} ${TFTPBOOT_DIR}/oe_images
+ ;;
+ *)
+ ;;
+ esac
+ fi
+}
+addtask tftpboot_links after do_firmware before do_build
diff --git a/classes/mlinux-mirrors.bbclass b/classes/mlinux-mirrors.bbclass
new file mode 100644
index 0000000..5a88695
--- /dev/null
+++ b/classes/mlinux-mirrors.bbclass
@@ -0,0 +1,14 @@
+MIRRORS_append () {
+cvs://.*/.* http://multitech.net/mlinux/sources/
+svn://.*/.* http://multitech.net/mlinux/sources/
+git://.*/.* http://multitech.net/mlinux/sources/
+hg://.*/.* http://multitech.net/mlinux/sources/
+bzr://.*/.* http://multitech.net/mlinux/sources/
+osc://.*/.* http://multitech.net/mlinux/sources/
+p4://.*/.* http://multitech.net/mlinux/sources/
+ftp://.*/.* http://multitech.net/mlinux/sources/
+https?$://.*/.* http://multitech.net/mlinux/sources/
+http?$://.*/.* http://multitech.net/mlinux/sources/
+}
+
+SAVANNAH_GNU_MIRROR = "http://download-mirror.savannah.gnu.org/releases"
diff --git a/classes/mlinux_metadata_scm.bbclass b/classes/mlinux_metadata_scm.bbclass
new file mode 100644
index 0000000..b220344
--- /dev/null
+++ b/classes/mlinux_metadata_scm.bbclass
@@ -0,0 +1,14 @@
+MLINUX_METADATA_REVISION = "${@base_get_metadata_git_revision("${OEROOT}",None)}"
+MLINUX_METADATA_BRANCH = "${@base_get_metadata_git_branch("${OEROOT}",None).strip()}"
+MLINUX_LAYERS = "${@mlinux_layers(bb,d)}"
+
+def mlinux_layers(bb, d):
+ layers = (d.getVar("BBLAYERS", d, 1) or "").split()
+ layer_revs = ""
+
+ for layer in layers:
+ branch = base_get_metadata_git_branch(layer, d).strip()
+ rev = base_get_metadata_git_revision(layer, d)
+ layer_revs += "%-20s = %s:%s\n" % (os.path.basename(layer), branch, rev)
+
+ return layer_revs
diff --git a/conf/layer.conf b/conf/layer.conf
new file mode 100644
index 0000000..0d3356d
--- /dev/null
+++ b/conf/layer.conf
@@ -0,0 +1,10 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have recipes-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+ ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "meta-mlinux-atmel"
+BBFILE_PATTERN_meta-mlinux-atmel = "^${LAYERDIR}/"
+BBFILE_PRIORITY_meta-mlinux-atmel = "55"
diff --git a/prod-scripts/MTCDT-0.1/cdteep.sh b/prod-scripts/MTCDT-0.1/cdteep.sh
new file mode 100755
index 0000000..c0e1e14
--- /dev/null
+++ b/prod-scripts/MTCDT-0.1/cdteep.sh
@@ -0,0 +1,110 @@
+#!/bin/sh
+# This scripts follows old school option rules, and all
+# options must come before parameters. Four parameters
+# are required. Options requiring parameters must be
+# followed by their parameter, with or without a space.
+# Options not requiring parameters can be ganged, and may
+# precede a single option requiring a parameter.
+#
+MYNAME=cdteep.sh
+out="/sys/bus/i2c/devices/0-0056/eeprom"
+vendor_id="Multi-Tech Systems"
+hw_version="MTCDT-0.1"
+
+
+# Set the MTCDT EEPROM
+function usage {
+ echo "${MYNAME}"' -d -g -b "bt_mac_addr" -w "wifi_mac_addr" -i "imei number" -l "product-id" "device-id" "uuid" "eth_mac_addr"' >&2
+ cat <<!EOF >&2
+ assumptions:
+ All options are optional and must come first.
+ -b and -w require a following mac address
+ -d displays the PROM, do not write. Ignores other parameters.
+ -g GPS capability.
+ -l lora capability.
+ -i requires a following imei number
+
+ Example
+ cdteep.sh -lb 01:12:AB:C3:23:FE MTCDT-210L 3489235379 125-6356-2283-9792 12:34:AB:CD:8F:34
+ To add wifimac and remove lora:
+ ${MYNAME} -b 01:12:AB:C3:23:FE -w 04:16:3C:C3:45:75 MTCDT-210L 3489235379 125-6356-2283-9792 12:34:AB:CD:8F:34
+
+ product-id, device-id, uuid and eth_mac_addr are required.
+
+ -d display EEPROM
+ -g capa-GPS
+ -l capa-Lora
+ The following fields are fixed:
+ out-file ${out}
+ vendor-id ${vendor_id}
+ hw-version ${hw_version}
+!EOF
+ exit 1
+}
+
+((display=0))
+
+while getopts b:dgw:i:l opt ; do
+echo looking at opt $opt
+ case $opt in
+ b)
+ bt_mac_addr="$OPTARG"
+ barg="--mac-bluetooth ${OPTARG} --capa-bluetooth"
+ ;;
+ w)
+ wifi_mac_addr="$OPTARG"
+ warg="--mac-wifi ${OPTARG} --capa-wifi"
+ ;;
+ i)
+ imei="$OPTARG"
+ if ((${#imei} == 0)) ; then
+ echo "i option requires an imei number." >&2
+ usage
+ fi
+ iarg="--imei ${OPTARG}"
+ ;;
+ l)
+ larg="--capa-lora"
+ ;;
+ d)
+ echo -e "\n\nEEPROM contents"
+ echo "-----------------"
+ mts-id-eeprom --in-file $out
+ exit
+ ;;
+ g)
+ gps="--capa-gps"
+ ;;
+ \?)
+ usage
+ ;;
+ :)
+ echo "Option -$OPTARG requires an argument." >&2
+ usage
+ ;;
+ esac
+done
+
+
+shift $((OPTIND-1))
+
+if (($# != 4)) ; then
+ echo Need 4 parameters beyond the options. >&2
+ echo "You specified $#." >&2
+ usage
+ exit 1
+fi
+product_id=$1
+device_id=$2
+uuid=$3
+mac=$4
+
+mts-id-eeprom --out-file $out --out-format bin --vendor-id "$vendor_id" \
+ --product-id "$product_id" --device-id "$device_id" \
+ --hw-version "$hw_version" --mac-addr $mac \
+ ${warg} ${barg} \
+ ${iarg} ${larg} ${gps} --uuid "$uuid"
+
+echo -e "\n\nNew contents"
+echo "-----------------"
+mts-id-eeprom --in-file $out
diff --git a/recipes-core/base-files/fstab-at91/fstab b/recipes-core/base-files/fstab-at91/fstab
new file mode 100644
index 0000000..8922faf
--- /dev/null
+++ b/recipes-core/base-files/fstab-at91/fstab
@@ -0,0 +1,10 @@
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbdevfs /proc/bus/usb usbdevfs noauto 0 0
+tmpfs /run tmpfs mode=0755,nodev,nosuid,strictatime 0 0
+tmpfs /var/volatile tmpfs defaults 0 0
+configfs /sys/kernel/config configfs defaults 0 0
+
+/dev/mtdblock6 /var/config jffs2 defaults 0 0
+/dev/mtdblock7 /var/oem jffs2 defaults,ro 0 0
diff --git a/recipes-core/base-files/fstab-at91_1.0.bb b/recipes-core/base-files/fstab-at91_1.0.bb
new file mode 100644
index 0000000..cd2102a
--- /dev/null
+++ b/recipes-core/base-files/fstab-at91_1.0.bb
@@ -0,0 +1,17 @@
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+inherit allarch
+PR = "r1"
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+PROVIDES = "fstab"
+DEPENDS = "base-files"
+RDEPENDS_${PN} = "base-files"
+
+SRC_URI = "file://fstab"
+
+FILES_${PN} = "${sysconfdir}/fstab"
+
+do_install() {
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/fstab ${D}${sysconfdir}
+}
diff --git a/recipes-core/images/core-image-rorootfs-overlay-initramfs.bb b/recipes-core/images/core-image-rorootfs-overlay-initramfs.bb
new file mode 100644
index 0000000..47946c5
--- /dev/null
+++ b/recipes-core/images/core-image-rorootfs-overlay-initramfs.bb
@@ -0,0 +1,23 @@
+# Simple initramfs image. Mostly used for live images.
+# Derived from https://github.com/cmhe/meta-readonly-rootfs-overlay
+DESCRIPTION = "Small image capable of booting a device. The kernel includes \
+the Minimal RAM-based Initial Root Filesystem (initramfs), mounts the root fs \
+read only and uses a file system overlay for written data."
+
+PACKAGE_INSTALL = "initramfs-readonly-rootfs-overlay ${VIRTUAL-RUNTIME_base-utils} udev base-passwd gptfdisk ${ROOTFS_BOOTSTRAP_INSTALL}"
+
+# Do not pollute the initrd image with rootfs features
+IMAGE_FEATURES = ""
+
+export IMAGE_BASENAME = "${PN}"
+IMAGE_LINGUAS = ""
+
+LICENSE = "MIT"
+
+IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
+inherit core-image
+
+IMAGE_ROOTFS_SIZE = "8192"
+IMAGE_ROOTFS_EXTRA_SPACE = "0"
+
+BAD_RECOMMENDATIONS += "busybox-syslog"
diff --git a/recipes-core/images/mlinux-base-image.bb b/recipes-core/images/mlinux-base-image.bb
new file mode 100644
index 0000000..e61a7f7
--- /dev/null
+++ b/recipes-core/images/mlinux-base-image.bb
@@ -0,0 +1,75 @@
+# Conduit 0.0 or 0.1 without RS9113
+DESCRIPTION = "mLinux base image"
+LICENSE = "MIT"
+
+require mlinux-minimal-image.bb
+
+FILESYSTEM_FEATURES = "dosfstools \
+ cifs-utils \
+ lsof \
+ "
+
+NETWORKING_FEATURES_append = " \
+ bridge-utils \
+ inetutils-ftp \
+ openssl \
+ rsync \
+ iperf3 \
+ lldpd \
+ mii-diag \
+ tcpdump \
+ netcat \
+ wget \
+ strongswan \
+ busybox-ifplugd \
+ "
+
+WIFI_FEATURES = " \
+ libnl \
+ wpa-supplicant \
+ iw \
+ hostapd \
+ hostapd-cfg \
+ "
+
+BLUETOOTH_FEATURES = "bluez5"
+BLUETOOTH_INIT ??= "bluez5-mlinit"
+
+# Add all timezones available
+# ntpdate will sync time every 30 min by default via cron
+TIME_FEATURES = "tzdata tzdata-africa tzdata-americas tzdata-antarctica tzdata-arctic \
+ tzdata-asia tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific \
+ tzdata-misc \
+ cronie \
+ ntpdate \
+ "
+
+# u-boot-linux-utils: U-Boot environment access from Linux
+# mlinux-scripts: sample scripts for setting up Conduit for various tasks
+# reset-handler: default reset button handler
+# radio-cmd: supports cellular radio activation and other configuration commands
+# radio-query: queries cellular radio for common info (IMEI, RSSI, etc)
+# jsparser: command line tool to parse JSON files
+MULTITECH_FEATURES_append = " \
+ u-boot-linux-utils \
+ mlinux-scripts \
+ reset-handler \
+ radio-cmd radio-query \
+ jsparser \
+ "
+
+MISC_FEATURES = "minicom lrzsz nano"
+
+DEBUG_FEATURES = ""
+
+# Extra stuff to install
+IMAGE_INSTALL_append = " \
+ kernel-modules \
+ ${WIFI_FEATURES} \
+ ${BLUETOOTH_FEATURES} \
+ ${BLUETOOTH_INIT} \
+ ${FILESYSTEM_FEATURES} \
+ ${TIME_FEATURES} \
+ ${MISC_FEATURES} \
+ ${DEBUG_FEATURES} \
+ "
diff --git a/recipes-core/images/mlinux-basetest-image.bb b/recipes-core/images/mlinux-basetest-image.bb
new file mode 100644
index 0000000..807b16e
--- /dev/null
+++ b/recipes-core/images/mlinux-basetest-image.bb
@@ -0,0 +1,9 @@
+# Conduit 0.0 or 0.1 without RS9113
+DESCRIPTION = "mLinux base test image"
+LICENSE = "MIT"
+
+require mlinux-base-image.bb
+
+# Open console for test image
+CONSOLE = "sysvinit-inittab-start-open"
+
diff --git a/recipes-core/images/mlinux-commissioning-image.bb b/recipes-core/images/mlinux-commissioning-image.bb
new file mode 100644
index 0000000..5ba16a6
--- /dev/null
+++ b/recipes-core/images/mlinux-commissioning-image.bb
@@ -0,0 +1,7 @@
+require mlinux-rs9113-factory-image.bb
+DESCRIPTION = "mLinux factory image with commissioning support"
+
+# Extra stuff to install
+IMAGE_INSTALL_append = " dnsmasq bluez5-noinst-tools python-dbus commissioning commissioning-php-fpm rs9113-rm"
+IMAGE_INSTALL_remove = "useradd"
+ROOTFS_POSTPROCESS_COMMAND_remove = "mlinux_set_root_password;"
diff --git a/recipes-core/images/mlinux-factory-image.bb b/recipes-core/images/mlinux-factory-image.bb
new file mode 100644
index 0000000..49cab1f
--- /dev/null
+++ b/recipes-core/images/mlinux-factory-image.bb
@@ -0,0 +1,94 @@
+# Conduit 0.0 or 0.1 without RS9113
+#
+# The correct syntax for a machine append is:
+# VARIABLE_append_mtcdt
+# append must be before the machine name.
+#
+require mlinux-base-image.bb
+DESCRIPTION = "mLinux factory image"
+
+# For now we don't put this in MTR or AEP
+# Password restrictions library from Redhat
+IMAGE_INSTALL_append = " libpwquality"
+
+LIGHTTPD = "lighttpd \
+ lighttpd-module-cgi lighttpd-module-indexfile \
+ lighttpd-module-redirect lighttpd-module-auth \
+ lighttpd-module-access lighttpd-module-accesslog \
+ lighttpd-module-rewrite lighttpd-module-proxy lighttpd-module-fastcgi \
+ lighttpd-module-scgi lighttpd-module-alias \
+ lighttpd-module-dirlisting lighttpd-module-staticfile \
+ "
+
+# Lighttpd web server
+IMAGE_INSTALL_append = " ${LIGHTTPD}"
+
+IMAGE_INSTALL_append = " sqlite3"
+
+IMAGE_INSTALL_append= " autossh"
+
+# Monit system/process monitor
+IMAGE_INSTALL_append = " monit"
+
+# LoRa support (MTAC-LORA accessory card)
+IMAGE_INSTALL_append = " lora-gateway-utils lora-query lora-network-server lora-packet-forwarder-usb"
+IMAGE_INSTALL_append_mtcdt = " lora-gateway-geolocation-utils lora-packet-forwarder-geolocation"
+IMAGE_INSTALL_append_mtcdt = " mtac-xdot-util"
+
+# MQTT server
+IMAGE_INSTALL_append = " mosquitto mosquitto-clients"
+
+
+# Perl support
+IMAGE_INSTALL_append = " perl"
+IMAGE_INSTALL_append = " perl-module-io perl-module-fcntl"
+# not in meta-oe or oe-core...
+#IMAGE_INSTALL_append = " libdevice-serialport-perl"
+#IMAGE_INSTALL_append = " libexpect-perl"
+
+# Python support
+IMAGE_INSTALL_append = " python"
+# Python modules
+IMAGE_INSTALL_append = " python-argparse \
+python-compression \
+python-dateutil \
+python-html \
+python-psutil \
+python-pyopenssl \
+python-pyserial \
+python-pyudev \
+python-pyusb \
+python-simplejson \
+python-sqlite3 \
+python-syslog \
+python-textutils \
+python-unixadmin \
+python-xml \
+"
+
+# OpenJDK Java runtime
+# IMAGE_INSTALL_append = " openjdk-8"
+# OpenJDK with JamVM VM (Multi-Tech default)
+# IMAGE_INSTALL_append = " jamvm"
+# OpenJDK with CACAO VM (run with 'java -cacao')
+# IMAGE_INSTALL_append = " openjdk-7-vm-cacao"
+# OpenJDK Zero VM (run with 'java -zero')
+# IMAGE_INSTALL_append = " openjdk-7-vm-zero"
+
+# PHP support
+IMAGE_INSTALL_append = " php php-cli php-fpm"
+
+# Node.js support not available for Atmel any more.
+# IMAGE_INSTALL_append = " nodejs nodejs-npm"
+
+# Multi-Tech SMS Utility (see http://git.multitech.net)
+IMAGE_INSTALL_append = " sms-utils"
+# Multi-Tech GPS Utility
+IMAGE_INSTALL_append = " venus-gps"
+IMAGE_INSTALL_append = " pps-tools"
+IMAGE_INSTALL_append = " dnsmasq bluez5-pand bluez5-rfcomm"
+
+# When ntp is to use the GPS, gps-utils is required
+IMAGE_INSTALL_append = " gpsd libgps ntp ntp-utils gpspipe gps-utils"
+
+IMAGE_INSTALL_append = " uxfp uvccapture"
diff --git a/recipes-core/images/mlinux-factory-test-image.bb b/recipes-core/images/mlinux-factory-test-image.bb
new file mode 100644
index 0000000..e517734
--- /dev/null
+++ b/recipes-core/images/mlinux-factory-test-image.bb
@@ -0,0 +1,8 @@
+DESCRIPTION = "mLinux factory test image"
+LICENSE = "MIT"
+
+require mlinux-rs9113-factory-image.bb
+
+IMAGE_INSTALL_append = " strace i2c-tools spitools devmem2"
+#Open console for testing
+CONSOLE = "sysvinit-inittab-start-open"
diff --git a/recipes-core/images/mlinux-minimal-image.bb b/recipes-core/images/mlinux-minimal-image.bb
new file mode 100644
index 0000000..d10210f
--- /dev/null
+++ b/recipes-core/images/mlinux-minimal-image.bb
@@ -0,0 +1,83 @@
+# The correct syntax for a machine append is:
+# VARIABLE_append_mtcdt
+# append must be before the machine name.
+DESCRIPTION = "mLinux minimal image"
+LICENSE = "MIT"
+
+inherit core-image
+inherit mlinux-image
+
+IMAGE_LINGUAS = ""
+IMAGE_FEATURES_append = " ssh-server-openssh package-management"
+
+# Don't wipe out CORE_FEATURES from minimal image
+CORE_FEATURES_append = " \
+ packagegroup-core-boot packagegroup-distro-base \
+ packagegroup-base-ext2 \
+ packagegroup-base-usbhost packagegroup-base-usbgadget \
+ udev-extraconf usb-gadget-mode \
+ sysfsutils module-init-tools \
+ bash procps \
+ openssh-sftp-server \
+ util-linux-mount util-linux-umount \
+ start-stop-daemon \
+ sudo \
+ ${CORE_IMAGE_EXTRA_INSTALL} \
+ mlinux-feed-configs \
+ useradd \
+ mts-io-sysfs \
+ "
+
+CORE_FEATURES_append = " mtd-utils mtd-utils-jffs2 fstab-at91"
+
+CORE_FEATURES_append_mtcap = " mt-dt-overlay "
+
+NETWORKING_FEATURES = "ppp curl iproute2 \
+ iptables iputils \
+ "
+
+# mts-io: IO Controller for Multi-Tech hardware.
+# (LEDs, temp sensor, serial lines, and more)
+#
+# config: Handles default config files stored in /var/config.
+# /var/config is mounted on a separate flash partition so that config
+# files survive flashing of rootfs. See recipe for details.
+#
+# set-rs485: enables RS485 half-duplex mode for a given tty device
+#
+# mtcap does not need mts-io-util, but it is required for LoRa 2.1 images
+
+MULTITECH_FEATURES = "kernel-module-mts-io \
+ mts-io-noarch \
+ mts-io-util \
+ config \
+ mts-id-eeprom \
+ set-rs485 \
+ radio-reset \
+ upgrade-reboot"
+
+MULTITECH_MTAC = ""
+MULTITECH_MTAC_append_mtcdt = " \
+ kernel-module-mtac \
+ kernel-module-mtac-eth \
+ kernel-module-mtac-gpiob \
+ kernel-module-mtac-lora \
+ kernel-module-mtac-mfser \
+ kernel-module-mtac-pulse \
+ kernel-module-mtac-xdot"
+
+MULTITECH_BB = ""
+
+UPGRADE_FEATURES = "mtd-utils-static"
+
+CONSOLE = "sysvinit-inittab-start"
+
+IMAGE_INSTALL = "${CORE_FEATURES} \
+ ${NETWORKING_FEATURES} \
+ ${UPGRADE_FEATURES} \
+ ${MULTITECH_FEATURES} \
+ ${MULTITECH_MTAC} \
+ ${MULTITECH_BB} \
+ ${CONSOLE} \
+ "
+
diff --git a/recipes-core/images/mlinux-mono-image.bb b/recipes-core/images/mlinux-mono-image.bb
new file mode 100644
index 0000000..d066ae9
--- /dev/null
+++ b/recipes-core/images/mlinux-mono-image.bb
@@ -0,0 +1,3 @@
+require mlinux-base-image.bb
+
+IMAGE_INSTALL_append = " mono mono-helloworld"
diff --git a/recipes-core/images/mlinux-mtcap-commissioning-image.bb b/recipes-core/images/mlinux-mtcap-commissioning-image.bb
new file