Packages
nerves_system_br
1.0.0-rc.0
1.34.0
1.33.9
1.33.8
1.33.7
1.33.6
1.33.5
1.33.4
1.33.3
1.33.2
1.33.1
1.33.0
1.32.5
1.32.4
1.32.3
1.32.2
1.32.1
1.32.0
1.31.7
1.31.6
1.31.5
1.31.4
1.31.3
1.31.2
1.31.1
1.31.0
1.30.1
1.30.0
1.29.3
1.29.2
1.29.1
1.29.0
1.28.3
1.28.2
1.28.1
1.28.0
1.27.3
1.27.2
1.27.1
1.27.0
1.26.1
1.26.0
1.25.3
1.25.2
1.25.1
1.25.0
1.24.1
1.24.0
1.23.3
1.23.2
1.23.1
1.23.0
1.22.8
1.22.7
1.22.6
1.22.5
1.22.4
1.22.3
1.22.2
1.22.1
1.22.0
1.21.6
1.21.5
1.21.4
1.21.3
1.21.2
1.21.1
1.21.0
1.20.6
1.20.5
1.20.4
1.20.3
1.20.2
1.20.1
1.20.0
1.19.1
1.19.0
1.18.6
1.18.5
1.18.4
1.18.3
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.5
1.16.4
1.16.3
1.16.2
1.16.1
1.16.0
1.15.2
1.15.1
1.15.0
1.14.5
1.14.4
1.14.3
1.14.2
1.14.1
1.14.0
1.13.8
1.13.7
1.13.6
1.13.5
1.13.4
1.13.3
1.13.2
1.13.1
1.13.0
1.12.4
1.12.3
1.12.2
1.12.1
1.12.0
1.12.0-rc.0
1.11.4
1.11.3
1.11.2
1.11.1
1.11.0
1.10.3
1.10.2
1.10.1
1.10.0
1.9.5
1.9.4
1.9.3
1.9.2
1.9.1
1.9.0
1.8.6
1.8.5
1.8.4
1.8.3
1.8.2
1.8.1
1.8.0
1.7.3
1.7.2
1.7.1
1.7.0
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.2
1.2.1
1.2.0
1.1.0
1.0.1
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1-2017-11
0.16.0-2017-11
0.15.1
0.15.0
0.14.1
0.14.0
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
retired
0.13.3
0.13.2
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.2
0.4.1
Nerves System BR - Buildroot based build platform for Nerves Systems
Current section
Files
Jump to
Current section
Files
scripts/rel2fw.sh
#!/bin/bash
set -e
BASE_DIR=$(pwd)
PROJECT_DIR=$(basename $BASE_DIR)
SCRIPT_NAME=$0
# Check that we have everything that we need
[[ -z "$NERVES_SYSTEM" ]] && { echo "$SCRIPT_NAME: Source nerves-env.sh and try again."; exit 1; }
usage() {
echo "Usage: $SCRIPT_NAME [options] <Release directory>"
echo
echo "Options:"
echo " -a <path to rootfs additions>"
echo " -c <fwup.conf> Default is $NERVES_SDK_IMAGES/fwup.conf"
echo " -f <firmware output file> Default is $PROJECT_DIR.fw"
echo " -o <image output file> Default is $PROJECT_DIR.img"
echo
echo "Barring errors, the firmware file is always created. The raw image is only"
echo "created if specified."
echo
echo "Example:"
echo "$SCRIPT_NAME -f $PROJECT_DIR.fw -o $PROJECT_DIR.img _rel"
}
while getopts ":a:c:f:o:" opt; do
case $opt in
a)
ROOTFS_ADDITIONS=$OPTARG
;;
c)
FWUP_CONFIG=$OPTARG
;;
f)
FW_FILENAME=$OPTARG
;;
o)
IMG_FILENAME=$OPTARG
;;
\?)
echo "$SCRIPT_NAME: ERROR: Invalid option: -$OPTARG"
usage
exit 1
;;
:)
echo "$SCRIPT_NAME: ERROR: Option -$OPTARG requires an argument."
usage
exit 1
;;
esac
done
shift $(($OPTIND-1))
if [[ $# -lt 1 ]]; then
echo "$SCRIPT_NAME: ERROR: Expecting release directory"
usage
exit 1
fi
RELEASE_DIR=$1
# If the toolchain contains a pre-built version of fwup,
# use it; otherwise look for one in the path.
FWUP=$NERVES_TOOLCHAIN/usr/bin/fwup
[[ -e "$FWUP" ]] || FWUP=$(command -v fwup || echo "/usr/bin/fwup")
if [[ ! -e "$FWUP" ]]; then
echo "$SCRIPT_NAME: ERROR: Please install fwup first"
echo
echo "See https://github.com/fhunleth/fwup"
exit 1
fi
# Check that mksquashfs is in the path. It's needed by
# merge-squashfs.
MKSQUASHFS=$(command -v mksquashfs)
if [[ ! -e "$MKSQUASHFS" ]]; then
echo "$SCRIPT_NAME: ERROR: Please install mksquashfs first"
echo
echo "For example:"
echo " sudo apt-get install squashfs-tools"
echo " brew install squashfs"
exit 1
fi
TMP_DIR=$BASE_DIR/_nerves-tmp
rm -fr $TMP_DIR
# Fill in defaults
[[ -z "$FW_FILENAME" ]] && FW_FILENAME=${PROJECT_DIR}.fw
[[ -z "$FWUP_CONFIG" ]] && FWUP_CONFIG=$NERVES_SDK_IMAGES/fwup.conf
# Check that the release directory exists
if [[ ! -d "$RELEASE_DIR" ]]; then
echo "$SCRIPT_NAME: ERROR: Missing Erlang release directory: ($RELEASE_DIR)"
exit 1
fi
if [[ ! -d "$RELEASE_DIR/lib" || ! -d "$RELEASE_DIR/releases" ]]; then
echo "$SCRIPT_NAME: ERROR: Expecting '$RELEASE_DIR' to contain 'lib' and 'releases' subdirectories"
exit 1
fi
# Make sure that the firmware output directories are there.
mkdir -p $(dirname "$FW_FILENAME")
# Update the file system bundle
echo "Updating base firmware image with Erlang release..."
# Create the directory for all of the files that "overlay" the base squashfs
mkdir -p "$TMP_DIR/rootfs-additions"
# Construct the proper path for the Erlang/OTP release
mkdir -p "$TMP_DIR/rootfs-additions/srv/erlang"
cp -R "$RELEASE_DIR/." "$TMP_DIR/rootfs-additions/srv/erlang"
# Clean up the Erlang release of all the files that we don't need.
$NERVES_SYSTEM/scripts/scrub-otp-release.sh "$TMP_DIR/rootfs-additions/srv/erlang"
# Copy over any rootfs additions from the user
# IMPORTANT: This must be the final step before the merge so that the user can
# override anything.
if [[ -d "$ROOTFS_ADDITIONS" ]]; then
echo "Copying rootfs_overlay: $ROOTFS_ADDITIONS "
cp -Rf "$ROOTFS_ADDITIONS/." "$TMP_DIR/rootfs-additions"
elif [[ -n "$ROOTFS_ADDITIONS" ]]; then
echo "rootfs_overlay: $ROOTFS_ADDITIONS does not exist!"
exit 1
fi
# Merge the Erlang/OTP release onto the base image
$NERVES_SYSTEM/scripts/merge-squashfs "$NERVES_SDK_IMAGES/rootfs.squashfs" "$TMP_DIR/combined.squashfs" "$TMP_DIR/rootfs-additions"
# Build the firmware image
echo "Building $FW_FILENAME..."
ROOTFS="$TMP_DIR/combined.squashfs" $FWUP -c -f "$FWUP_CONFIG" \
-o "$FW_FILENAME"
if [[ ! -z "$IMG_FILENAME" ]]; then
# Create the output directory - just in case
mkdir -p $(dirname "$IMG_FILENAME")
# Erase the image file in case it exists from a previous build.
# We use fwup in "programming" mode to create the raw image so it expects there
# the destination to exist (like an MMC device). This provides the minimum sized image.
rm -f "$IMG_FILENAME"
touch "$IMG_FILENAME"
# Build the raw image for the bulk programmer
echo "Building $IMG_FILENAME..."
$FWUP -a -d "$IMG_FILENAME" -t complete -i "$FW_FILENAME"
fi
# Clean up
rm -fr "$TMP_DIR"