Current section

Files

Jump to
Raw

fwup.conf

# Firmware configuration file for the Beaglebone Black
# Default paths if not specified via the commandline
define(ROOTFS, "${NERVES_SYSTEM}/images/rootfs.squashfs")
# This configuration file will create an image that
# has an MBR and the following 3 partitions:
#
# +----------------------------+
# | MBR |
# +----------------------------+
# | Boot partition (FAT32) |
# | u-boot.img |
# | uenv.txt |
# | zImage |
# +----------------------------+
# | p1*: Rootfs A (squashfs) |
# +----------------------------+
# | p1*: Rootfs B (squashfs) |
# +----------------------------+
# | p2: Application (FAT32) |
# +----------------------------+
#
# The p1 partition points to whichever of Rootfs A or B that
# is active.
# The boot partition contains MLO, u-boot.img, zImage, and has
# room for a debug uEnv.txt if desired
define(BOOT_PART_OFFSET, 63)
define(BOOT_PART_COUNT, 32705)
# Let the rootfs have room to grow up to 128 MiB and align
# it to the nearest 1 MB boundary
define(ROOTFS_A_PART_OFFSET, 32768)
define(ROOTFS_A_PART_COUNT, 289044)
define(ROOTFS_B_PART_OFFSET, 321812)
define(ROOTFS_B_PART_COUNT, 289044)
# Application partition
# NOTE: Keep the total amount used under 1.78 GiB so that
# everything fits in the "2 GB" eMMC.
define(APP_PART_OFFSET, 610856)
define(APP_PART_COUNT, 1048576)
# Firmware metadata
meta-product = "Nerves Firmware"
meta-description = ""
meta-version = ${NERVES_SDK_VERSION}
meta-platform = "bbb"
meta-architecture = "arm"
meta-author = "Frank Hunleth"
# File resources are listed in the order that they are included in the .fw file
# This is important, since this is the order that they're written on a firmware
# update due to the event driven nature of the update system.
file-resource MLO {
host-path = "${NERVES_SYSTEM}/images/MLO"
}
file-resource u-boot.img {
host-path = "${NERVES_SYSTEM}/images/u-boot.img"
}
file-resource boot.scr {
host-path = "${NERVES_SYSTEM}/images/boot.scr"
}
file-resource zImage {
host-path = "${NERVES_SYSTEM}/images/zImage"
}
file-resource am335x-boneblack.dtb {
host-path = "${NERVES_SYSTEM}/images/am335x-boneblack.dtb"
}
file-resource am335x-bonegreen.dtb {
host-path = "${NERVES_SYSTEM}/images/am335x-bonegreen.dtb"
}
file-resource am335x-bonegreen-wireless.dtb {
host-path = "${NERVES_SYSTEM}/images/am335x-bonegreen-wireless.dtb"
}
file-resource rootfs.img {
host-path = ${ROOTFS}
}
mbr mbr-a {
partition 0 {
block-offset = ${BOOT_PART_OFFSET}
block-count = ${BOOT_PART_COUNT}
type = 0xc # FAT32
boot = true
}
partition 1 {
block-offset = ${ROOTFS_A_PART_OFFSET}
block-count = ${ROOTFS_A_PART_COUNT}
type = 0x83 # Linux
}
partition 2 {
block-offset = ${APP_PART_OFFSET}
block-count = ${APP_PART_COUNT}
type = 0xc # FAT32
}
# partition 3 is unused
}
mbr mbr-b {
partition 0 {
block-offset = ${BOOT_PART_OFFSET}
block-count = ${BOOT_PART_COUNT}
type = 0xc # FAT32
boot = true
}
partition 1 {
block-offset = ${ROOTFS_B_PART_OFFSET}
block-count = ${ROOTFS_B_PART_COUNT}
type = 0x83 # Linux
}
partition 2 {
block-offset = ${APP_PART_OFFSET}
block-count = ${APP_PART_COUNT}
type = 0xc # FAT32
}
# partition 3 is unused
}
# This firmware task writes everything to the destination media
task complete {
# Only match if not mounted
require-unmounted-destination = true
# Everything that gets written can be verified on the fly.
# This speeds things up, since we don't care about detecting
# errors before data gets written.
verify-on-the-fly = true
on-init {
mbr_write(mbr-a)
fat_mkfs(${BOOT_PART_OFFSET}, ${BOOT_PART_COUNT})
fat_setlabel(${BOOT_PART_OFFSET}, "BOOT")
}
on-resource MLO { fat_write(${BOOT_PART_OFFSET}, "MLO") }
on-resource u-boot.img { fat_write(${BOOT_PART_OFFSET}, "u-boot.img") }
on-resource boot.scr { fat_write(${BOOT_PART_OFFSET}, "boot.scr") }
on-resource zImage { fat_write(${BOOT_PART_OFFSET}, "zImage") }
on-resource am335x-boneblack.dtb { fat_write(${BOOT_PART_OFFSET}, "am335x-boneblack.dtb") }
on-resource am335x-bonegreen.dtb { fat_write(${BOOT_PART_OFFSET}, "am335x-bonegreen.dtb") }
on-resource am335x-bonegreen-wireless.dtb { fat_write(${BOOT_PART_OFFSET}, "am335x-bonegreen-wireless.dtb") }
on-resource rootfs.img {
# write to the first rootfs partition
raw_write(${ROOTFS_A_PART_OFFSET})
}
on-finish {
# Initialize the app partition last so that the boot
# partition can be written in one go.
fat_mkfs(${APP_PART_OFFSET}, ${APP_PART_COUNT})
fat_setlabel(${APP_PART_OFFSET}, "APPDATA")
}
}
task upgrade.a {
# This task upgrades the A partition
require-partition1-offset = ${ROOTFS_B_PART_OFFSET}
# Since the upgrade won't run until it has been finalized, it's ok
# to write data as it is read.
verify-on-the-fly = true
on-init {
# Erase any old saved files from previous upgrades
fat_rm(${BOOT_PART_OFFSET}, "zImage.pre")
fat_rm(${BOOT_PART_OFFSET}, "am335x-boneblack.dtb.pre")
fat_rm(${BOOT_PART_OFFSET}, "am335x-bonegreen.dtb.pre")
fat_rm(${BOOT_PART_OFFSET}, "am335x-bonegreen-wireless.dtb.pre")
fat_rm(${BOOT_PART_OFFSET}, "boot.scr.pre")
}
# Write the new firmware and Linux images, but don't
# commit them. That way if the user aborts midway, we
# still are using the original firmware.
on-resource zImage { fat_write(${BOOT_PART_OFFSET}, "zImage.new") }
on-resource boot.scr { fat_write(${BOOT_PART_OFFSET}, "boot.scr.new") }
on-resource am335x-boneblack.dtb { fat_write(${BOOT_PART_OFFSET}, "am335x-boneblack.dtb.new") }
on-resource am335x-bonegreen.dtb { fat_write(${BOOT_PART_OFFSET}, "am335x-bonegreen.dtb.new") }
on-resource am335x-bonegreen-wireless.dtb { fat_write(${BOOT_PART_OFFSET}, "am335x-bonegreen-wireless.dtb.new") }
on-resource rootfs.img {
# write to the first rootfs partition
raw_write(${ROOTFS_A_PART_OFFSET})
}
on-finish {
# Switch over to boot the new firmware
mbr_write(mbr-a)
fat_mv(${BOOT_PART_OFFSET}, "zImage", "zImage.pre")
fat_mv(${BOOT_PART_OFFSET}, "boot.scr", "boot.scr.pre")
fat_mv(${BOOT_PART_OFFSET}, "am335x-boneblack.dtb", "am335x-boneblack.dtb.pre")
fat_mv(${BOOT_PART_OFFSET}, "am335x-bonegreen.dtb", "am335x-bonegreen.dtb.pre")
fat_mv(${BOOT_PART_OFFSET}, "am335x-bonegreen-wireless.dtb", "am335x-bonegreen-wireless.dtb.pre")
fat_mv(${BOOT_PART_OFFSET}, "zImage.new", "zImage")
fat_mv(${BOOT_PART_OFFSET}, "boot.scr.new", "boot.scr")
fat_mv(${BOOT_PART_OFFSET}, "am335x-boneblack.dtb.new", "am335x-boneblack.dtb")
fat_mv(${BOOT_PART_OFFSET}, "am335x-bonegreen.dtb.new", "am335x-bonegreen.dtb")
fat_mv(${BOOT_PART_OFFSET}, "am335x-bonegreen-wireless.dtb.new", "am335x-bonegreen-wireless.dtb")
}
on-error {
# Clean up in case something goes wrong
fat_rm(${BOOT_PART_OFFSET}, "zImage.new")
fat_rm(${BOOT_PART_OFFSET}, "am335x-boneblack.dtb.new")
fat_rm(${BOOT_PART_OFFSET}, "am335x-bonegreen.dtb.new")
fat_rm(${BOOT_PART_OFFSET}, "am335x-bonegreen-wireless.dtb.new")
fat_rm(${BOOT_PART_OFFSET}, "boot.scr.new")
}
}
task upgrade.b {
# This task upgrades the B partition
require-partition1-offset = ${ROOTFS_A_PART_OFFSET}
# Since the upgrade won't run until it has been finalized, it's ok
# to write data as it is read.
verify-on-the-fly = true
on-init {
fat_rm(${BOOT_PART_OFFSET}, "zImage.pre")
fat_rm(${BOOT_PART_OFFSET}, "am335x-boneblack.dtb.pre")
fat_rm(${BOOT_PART_OFFSET}, "am335x-bonegreen.dtb.pre")
fat_rm(${BOOT_PART_OFFSET}, "am335x-bonegreen-wireless.dtb.pre")
fat_rm(${BOOT_PART_OFFSET}, "boot.scr.pre")
}
on-resource zImage { fat_write(${BOOT_PART_OFFSET}, "zImage.new") }
on-resource boot.scr { fat_write(${BOOT_PART_OFFSET}, "boot.scr.new") }
on-resource am335x-boneblack.dtb { fat_write(${BOOT_PART_OFFSET}, "am335x-boneblack.dtb.new") }
on-resource am335x-bonegreen.dtb { fat_write(${BOOT_PART_OFFSET}, "am335x-bonegreen.dtb.new") }
on-resource am335x-bonegreen-wireless.dtb { fat_write(${BOOT_PART_OFFSET}, "am335x-bonegreen-wireless.dtb.new") }
on-resource rootfs.img {
# write to the first rootfs partition
raw_write(${ROOTFS_B_PART_OFFSET})
}
on-finish {
# Switch over to boot the new firmware
mbr_write(mbr-b)
fat_mv(${BOOT_PART_OFFSET}, "zImage", "zImage.pre")
fat_mv(${BOOT_PART_OFFSET}, "boot.scr", "boot.scr.pre")
fat_mv(${BOOT_PART_OFFSET}, "am335x-boneblack.dtb", "am335x-boneblack.dtb.pre")
fat_mv(${BOOT_PART_OFFSET}, "am335x-bonegreen.dtb", "am335x-bonegreen.dtb.pre")
fat_mv(${BOOT_PART_OFFSET}, "am335x-bonegreen-wireless.dtb", "am335x-bonegreen-wireless.dtb.pre")
fat_mv(${BOOT_PART_OFFSET}, "zImage.new", "zImage")
fat_mv(${BOOT_PART_OFFSET}, "boot.scr.new", "boot.scr")
fat_mv(${BOOT_PART_OFFSET}, "am335x-boneblack.dtb.new", "am335x-boneblack.dtb")
fat_mv(${BOOT_PART_OFFSET}, "am335x-bonegreen.dtb.new", "am335x-bonegreen.dtb")
fat_mv(${BOOT_PART_OFFSET}, "am335x-bonegreen-wireless.dtb.new", "am335x-bonegreen-wireless.dtb")
}
on-error {
# Clean up in case something goes wrong
fat_rm(${BOOT_PART_OFFSET}, "zImage.new")
fat_rm(${BOOT_PART_OFFSET}, "am335x-boneblack.dtb.new")
fat_rm(${BOOT_PART_OFFSET}, "am335x-bonegreen.dtb.new")
fat_rm(${BOOT_PART_OFFSET}, "am335x-bonegreen-wireless.dtb.new")
fat_rm(${BOOT_PART_OFFSET}, "boot.scr.new")
}
}