Packages
nerves_system_bbb
0.8.0
2.30.0
2.29.5
2.29.4
2.29.3
2.29.2
2.29.1
2.29.0
2.28.0
2.27.3
2.27.2
2.27.1
2.27.0
2.26.1
2.26.0
2.25.1
2.25.0
2.24.0
2.23.0
2.22.1
2.22.0
2.21.0
2.20.2
2.20.1
2.20.0
2.19.1
2.19.0
2.18.2
2.18.1
2.18.0
2.17.2
2.17.1
2.17.0
2.16.2
2.16.1
2.16.0
2.15.3
2.15.2
2.15.1
2.15.0
retired
2.14.0
2.13.4
2.13.3
2.13.2
2.13.1
2.13.0
2.12.3
2.12.2
2.12.1
2.12.0
2.11.2
2.11.1
2.11.0
2.10.1
2.10.0
2.9.0
2.8.3
2.8.2
2.8.1
2.8.0
2.7.2
2.7.1
2.7.0
2.6.2
2.6.1
2.6.0
2.5.2
2.5.1
2.5.0
2.4.2
2.4.1
2.4.0
2.3.2
2.3.1
2.3.0
2.2.2
2.2.1
2.2.0
2.1.3
2.1.2
2.1.1
2.1.0
2.0.0
2.0.0-rc.0
1.4.0
1.3.0
1.2.1
1.2.0
1.1.1
1.1.0
1.0.0
1.0.0-rc.1
1.0.0-rc.0
0.20.0
0.18.0
0.17.1
0.17.0
0.16.1
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.0
Nerves System - BeagleBone Black, BeagleBone Green, PocketBeagle and more
Current section
Files
Jump to
Current section
Files
nerves_system_bbb
fwup.conf
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 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 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}, "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 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}, "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")
}
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}, "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}, "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 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}, "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")
}
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}, "boot.scr.new")
}
}