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:
parent
991a12da04
commit
24ae621e17
|
@ -593,6 +593,12 @@ config DEFAULT_ENVIRONMENT_GENERIC_NEW_MENU
|
||||||
depends on CONFIG_CMD_MENU_MANAGEMENT
|
depends on CONFIG_CMD_MENU_MANAGEMENT
|
||||||
default y
|
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
|
config DEFAULT_ENVIRONMENT_GENERIC
|
||||||
bool
|
bool
|
||||||
depends on !HAVE_DEFAULT_ENVIRONMENT_NEW
|
depends on !HAVE_DEFAULT_ENVIRONMENT_NEW
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW) += defaultenv-2-base
|
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_MENU) += defaultenv-2-menu
|
||||||
|
bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW_DFU) += defaultenv-2-dfu
|
||||||
bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-1
|
bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-1
|
||||||
obj-$(CONFIG_DEFAULT_ENVIRONMENT) += defaultenv.o
|
obj-$(CONFIG_DEFAULT_ENVIRONMENT) += defaultenv.o
|
||||||
extra-y += barebox_default_env barebox_default_env.h barebox_default_env$(DEFAULT_COMPRESSION_SUFFIX)
|
extra-y += barebox_default_env barebox_default_env.h barebox_default_env$(DEFAULT_COMPRESSION_SUFFIX)
|
||||||
|
|
|
@ -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
|
|
@ -46,6 +46,8 @@ static void defaultenv_add_base(void)
|
||||||
defaultenv_append_directory(defaultenv_2_base);
|
defaultenv_append_directory(defaultenv_2_base);
|
||||||
if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW_MENU))
|
if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW_MENU))
|
||||||
defaultenv_append_directory(defaultenv_2_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))
|
if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC))
|
||||||
defaultenv_append_directory(defaultenv_1);
|
defaultenv_append_directory(defaultenv_1);
|
||||||
|
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue