From 24ae621e17e23f758fdbb2efe3d6bb8eb2c68634 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Tue, 25 Feb 2014 15:38:07 +0100 Subject: defaultenv: Add boot option for DFU DFU is for device firmware upgrade, but for development purposes it's sometmes useful to just start a kernel vie DFU. This adds a boot option for doing this and also the corresponding counterpart on the host. With this it's possible to boot a system with: scripts/dfuboot.sh -k linuximage -d dtb -c "root=ubi0:root ubi.mtd=ubi rootfstype=ubifs ignore_loglevel" Signed-off-by: Sascha Hauer --- defaultenv/Makefile | 1 + defaultenv/defaultenv-2-dfu/boot/dfu | 39 ++++++++++++++++++++++++++++++++++++ defaultenv/defaultenv.c | 2 ++ 3 files changed, 42 insertions(+) create mode 100644 defaultenv/defaultenv-2-dfu/boot/dfu (limited to 'defaultenv') diff --git a/defaultenv/Makefile b/defaultenv/Makefile index d449e0237f..fc679ebc9c 100644 --- a/defaultenv/Makefile +++ b/defaultenv/Makefile @@ -1,5 +1,6 @@ bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW) += defaultenv-2-base bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW_MENU) += defaultenv-2-menu +bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW_DFU) += defaultenv-2-dfu bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-1 obj-$(CONFIG_DEFAULT_ENVIRONMENT) += defaultenv.o extra-y += barebox_default_env barebox_default_env.h barebox_default_env$(DEFAULT_COMPRESSION_SUFFIX) diff --git a/defaultenv/defaultenv-2-dfu/boot/dfu b/defaultenv/defaultenv-2-dfu/boot/dfu new file mode 100644 index 0000000000..c9463b667e --- /dev/null +++ b/defaultenv/defaultenv-2-dfu/boot/dfu @@ -0,0 +1,39 @@ +#!/bin/sh + +if [ "$1" = menu ]; then + boot-menu-add-entry "$0" "Device Firmware upgrade (DFU)" + exit +fi + +if [ -d /dfutmp ]; then + rm -r /dfutmp +fi + +mkdir -p /dfutmp + +kernel="/dfutmp/kernel" +dtb="/dfutmp/dtb" +cmdline="/dfutmp/cmdline" + +global.bootm.image="$kernel" + +dfu $kernel(kernel)c,$dtb(dtb)c,$cmdline(cmdline)c +if [ $? != 0 ]; then + exit 1 +fi + +if [ ! -f "$kernel" ]; then + echo "No kernel uploaded. Aborting" + exit 1 +fi + +if [ -f "$cmdline" ]; then + global linux.bootargs.dyn.dfu + readf $cmdline global.linux.bootargs.dyn.dfu +fi + +if [ -f "$dtb" ]; then + global.bootm.oftree="$dtb" +fi + +true diff --git a/defaultenv/defaultenv.c b/defaultenv/defaultenv.c index 3f517b4633..dc0e484c88 100644 --- a/defaultenv/defaultenv.c +++ b/defaultenv/defaultenv.c @@ -46,6 +46,8 @@ static void defaultenv_add_base(void) defaultenv_append_directory(defaultenv_2_base); if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW_MENU)) defaultenv_append_directory(defaultenv_2_menu); + if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW_DFU)) + defaultenv_append_directory(defaultenv_2_dfu); if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC)) defaultenv_append_directory(defaultenv_1); -- cgit v1.2.1