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