9
0
Fork 0

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 <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2014-02-25 15:38:07 +01:00
parent 991a12da04
commit 24ae621e17
5 changed files with 116 additions and 0 deletions

View File

@ -593,6 +593,12 @@ config DEFAULT_ENVIRONMENT_GENERIC_NEW_MENU
depends on CONFIG_CMD_MENU_MANAGEMENT
default y
config DEFAULT_ENVIRONMENT_GENERIC_NEW_DFU
bool
depends on DEFAULT_ENVIRONMENT_GENERIC_NEW
depends on USB_GADGET_DFU
default y
config DEFAULT_ENVIRONMENT_GENERIC
bool
depends on !HAVE_DEFAULT_ENVIRONMENT_NEW

View File

@ -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)

View File

@ -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

View File

@ -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);

68
scripts/dfuboot.sh Executable file
View File

@ -0,0 +1,68 @@
#!/bin/bash
DEVICETREE=
KERNEL=
CMDLINE=
usage() {
echo "usage: $0 [OPTIONS]"
echo "This script uploads a kernel and optionally a devicetree"
echo "and a kernel commandline to barebox via DFU running the"
echo "'boot dfu' command."
echo "OPTIONS:"
echo " -k <kernel> kernelimage to upload"
echo " -d <dtb> devicetree binary blob to upload"
echo " -c \"cmdline\" kernel commandline"
echo " -h This help text"
exit 0
}
while getopts "k:d:c:h" opt
do
case "$opt" in
h)
usage
;;
d)
DEVICETREE="$OPTARG"
;;
k)
KERNEL="$OPTARG"
;;
c)
CMDLINE="$OPTARG"
;;
esac
done
dfu-util -D "${KERNEL}" -a kernel
if [ $? != 0 ]; then
echo "Failed to upload kernel"
exit 1
fi
if [ -n "$DEVICETREE" ]; then
dfu-util -D "${DEVICETREE}" -a dtb
if [ $? != 0 ]; then
echo "Failed to upload devicetree"
exit 1
fi
fi
if [ -n "$CMDLINE" ]; then
cmdlinefile=$(mktemp)
echo -e "$CMDLINE" > "${cmdlinefile}"
dfu-util -D "${cmdlinefile}" -a cmdline -R
result=$?
rm -f "${cmdlinefile}"
if [ $result != 0 ]; then
echo "Failed to upload cmdline"
exit 1
fi
fi