@@ -2,12 +2,33 @@
#
# The format to specify it, in the machine, is:
#
+# UBOOT_MACHINE = "config"
+#
+# or to build u-boot multiple times with different configs/options:
+#
+# UBOOT_MACHINE = ""
# UBOOT_CONFIG ??= <default>
-# UBOOT_CONFIG[foo] = "config,images,binary"
+# UBOOT_CONFIG[foo] = "foo_config"
+# UBOOT_CONFIG[bar] = "bar_config"
#
-# or
+# UBOOT_CONFIG_IMAGE_FSTYPES[bar] = "fstype"
#
-# UBOOT_MACHINE = "config"
+# UBOOT_CONFIG_BINARY[foo] = "binary"
+#
+# UBOOT_CONFIG_MAKE_OPTS[foo] = "FOO=1"
+# UBOOT_CONFIG_MAKE_OPTS[bar] = "BAR=1"
+#
+# For more information about this, please see the official documentation.
+#
+# There is a legacy method that is still supported where some of the above
+# controls can be specified in a comma-separated list. This method was
+# deemed to be limiting in terms of expanding support to more and more knobs
+# that might need to be turned to customize a config build.
+#
+# UBOOT_MACHINE = ""
+# UBOOT_CONFIG ??= <default>
+# UBOOT_CONFIG[foo] = "foo_config,images,binary"
+# UBOOT_CONFIG[bar] = "bar_config,images,binary"
#
# Copyright 2013, 2014 (C) O.S. Systems Software LTDA.
#
@@ -113,9 +134,13 @@ python () {
ubootmachine = d.getVar("UBOOT_MACHINE")
ubootconfigflags = d.getVarFlags('UBOOT_CONFIG')
+ ubootconfigimagefstypes = d.getVar('UBOOT_CONFIG_IMAGE_FSTYPES')
+ ubootconfigimagefstypesflags = d.getVarFlags('UBOOT_CONFIG_IMAGE_FSTYPES')
ubootbinary = d.getVar('UBOOT_BINARY')
- ubootbinaries = d.getVar('UBOOT_BINARIES')
+ ubootconfigbinary = d.getVar('UBOOT_CONFIG_BINARY')
+ ubootconfigbinaryflags = d.getVarFlags('UBOOT_CONFIG_BINARY')
ubootconfigmakeopts = d.getVar('UBOOT_CONFIG_MAKE_OPTS')
+ ubootconfigmakeoptsflags = d.getVarFlags('UBOOT_CONFIG_MAKE_OPTS')
# The "doc" varflag is special, we don't want to see it here
ubootconfigflags.pop('doc', None)
ubootconfig = (d.getVar('UBOOT_CONFIG') or "").split()
@@ -130,42 +155,70 @@ python () {
if ubootmachine and ubootconfig:
raise bb.parse.SkipRecipe("You cannot use UBOOT_MACHINE and UBOOT_CONFIG at the same time.")
- if ubootconfigflags and ubootbinaries:
- raise bb.parse.SkipRecipe("You cannot use UBOOT_BINARIES as it is internal to uboot_config.bbclass.")
+ if ubootconfigimagefstypes:
+ raise bb.parse.SkipRecipe("You cannot use UBOOT_CONFIG_IMAGE_FSTYPES as a variable, you can only set flags.")
+
+ if ubootconfigbinary:
+ raise bb.parse.SkipRecipe("You cannot use UBOOT_CONFIG_BINARY as a variable, you can only set flags.")
- if ubootconfigflags and ubootconfigmakeopts:
- raise bb.parse.SkipRecipe("You cannot use UBOOT_CONFIG_MAKE_OPTS as it is internal to uboot_config.bbclass.")
+ if ubootconfigmakeopts:
+ raise bb.parse.SkipRecipe("You cannot use UBOOT_CONFIG_MAKE_OPTS as a variable, you can only set flags.")
if len(ubootconfig) > 0:
for config in ubootconfig:
found = False
+ binary = ubootbinary
+ imagefstype = ""
for f, v in ubootconfigflags.items():
if config == f:
found = True
items = v.split(',')
- if items[0] and len(items) > 4:
- raise bb.parse.SkipRecipe('Only config,images,binary,make_opts can be specified!')
+ if items[0] and len(items) > 3:
+ raise bb.parse.SkipRecipe('Only config,images,binary can be specified!')
d.appendVar('UBOOT_MACHINE', ' ' + items[0])
# IMAGE_FSTYPES appending
if len(items) > 1 and items[1]:
- bb.debug(1, "Appending '%s' to IMAGE_FSTYPES." % items[1])
- d.appendVar('IMAGE_FSTYPES', ' ' + items[1])
+ bb.debug(1, "Staging '%s' for IMAGE_FSTYPES." % items[1])
+ imagefstype = items[1]
if len(items) > 2 and items[2]:
- bb.debug(1, "Appending '%s' to UBOOT_BINARIES." % items[2])
- d.appendVar('UBOOT_BINARIES', ' ' + items[2])
- else:
- bb.debug(1, "Appending '%s' to UBOOT_BINARIES." % ubootbinary)
- d.appendVar('UBOOT_BINARIES', ' ' + ubootbinary)
- if len(items) > 3 and items[3]:
- bb.debug(1, "Appending '%s' to UBOOT_CONFIG_MAKE_OPTS." % items[3])
- d.appendVar('UBOOT_CONFIG_MAKE_OPTS', items[3] + " ? ")
- else:
- bb.debug(1, "Appending '%s' to UBOOT_CONFIG_MAKE_OPTS." % "")
- d.appendVar('UBOOT_CONFIG_MAKE_OPTS', " ? ")
+ bb.debug(1, "Staging '%s' for UBOOT_CONFIG_BINARY." % items[2])
+ binary = items[2]
break
if not found:
- raise bb.parse.SkipRecipe("The selected UBOOT_CONFIG key %s has no match in %s." % (ubootconfig, ubootconfigflags.keys()))
+ raise bb.parse.SkipRecipe("The selected UBOOT_CONFIG key %s has no match in %s." % (config, ubootconfigflags.keys()))
+
+ # Extract out any settings from UBOOT_IMAGE_FSTYPES[config]
+ if ubootconfigimagefstypesflags:
+ for f, v in ubootconfigimagefstypesflags.items():
+ if config == f:
+ bb.debug(1, "Staging '%s' for IMAGE_FSTYPES." % v)
+ imagefstype = v
+
+ if imagefstype:
+ bb.debug(1, "Appending '%s' to IMAGE_FSTYPES." % imagefstype)
+ d.appendVar('IMAGE_FSTYPES', ' ' + imagefstype)
+
+ # Extract out any settings from UBOOT_CONFIG_BINARY[config]
+ if ubootconfigbinaryflags:
+ for f, v in ubootconfigbinaryflags.items():
+ if config == f:
+ bb.debug(1, "Staging '%s' for UBOOT_CONFIG_BINARY." % v)
+ binary = v
+
+ bb.debug(1, "Appending '%s' to UBOOT_CONFIG_BINARY." % binary)
+ d.appendVar('UBOOT_CONFIG_BINARY', binary + " ? ")
+
+ # Extract out any settings from UBOOT_CONFIG_MAKE_OPTS[config]
+ make_opts = ""
+ if ubootconfigmakeoptsflags:
+ for f, v in ubootconfigmakeoptsflags.items():
+ if config == f:
+ bb.debug(1, "Staging '%s' for UBOOT_CONFIG_MAKE_OPTS." % v)
+ make_opts = v
+
+ bb.debug(1, "Appending '%s' to UBOOT_CONFIG_MAKE_OPTS." % make_opts)
+ d.appendVar('UBOOT_CONFIG_MAKE_OPTS', make_opts + " ? ")
# This recipe might be inherited e.g. by the kernel recipe via kernel-fitimage.bbclass
# Ensure the uboot specific menuconfig settings do not leak into other recipes
@@ -176,3 +229,21 @@ python () {
# Disable menuconfig for multiple configs
d.setVar('KCONFIG_CONFIG_ENABLE_MENUCONFIG', "false")
}
+
+uboot_config_get_indexed_value () {
+ local list=$1
+ local index=$2
+
+ local k=""
+
+ IFS="?"
+ for value in $list; do
+ k=$(expr $k + 1);
+ if [ $k -eq $index ]; then
+ break
+ fi
+ done
+ unset IFS
+
+ echo "$value"
+}
@@ -530,15 +530,10 @@ do_uboot_assemble_fitimage() {
builddir="${config}-${type}"
- for binary in ${UBOOT_BINARIES}; do
- k=$(expr $k + 1);
- if [ $k -eq $i ]; then
- break;
- fi
- done
+ config_binary=$(uboot_config_get_indexed_value "${UBOOT_CONFIG_BINARY}" $i)
cd ${B}/${builddir}
- uboot_assemble_fitimage_helper ${type} ${binary}
+ uboot_assemble_fitimage_helper ${type} ${config_binary}
done
else
cd ${B}
@@ -35,17 +35,7 @@ uboot_configure_config () {
builddir="${config}-${type}"
- unset k
- IFS="?"
- uboot_config_make_opts="${UBOOT_CONFIG_MAKE_OPTS}"
- for config_make_opts in $uboot_config_make_opts; do
- k=$(expr $k + 1);
- if [ $k -eq $i ]; then
- break
- fi
- done
- unset IFS
- unset k
+ config_make_opts=$(uboot_config_get_indexed_value "${UBOOT_CONFIG_MAKE_OPTS}" $i)
oe_runmake -C ${S} O=${B}/${builddir} ${config_make_opts} ${UBOOT_MAKE_OPTS} ${config}
if [ -n "${@' '.join(find_cfgs(d))}" ]; then
@@ -78,28 +78,12 @@ uboot_compile_config () {
builddir="${config}-${type}"
- unset k
- IFS="?"
- uboot_config_make_opts="${UBOOT_CONFIG_MAKE_OPTS}"
- for config_make_opts in $uboot_config_make_opts; do
- k=$(expr $k + 1);
- if [ $k -eq $i ]; then
- break
- fi
- done
- unset IFS
- unset k
+ config_make_opts=$(uboot_config_get_indexed_value "${UBOOT_CONFIG_MAKE_OPTS}" $i)
+ config_binary=$(uboot_config_get_indexed_value "${UBOOT_CONFIG_BINARY}" $i)
oe_runmake -C ${S} O=${B}/${builddir} ${config_make_opts} ${UBOOT_MAKE_OPTS} ${UBOOT_MAKE_TARGET}
- unset k
- for binary in ${UBOOT_BINARIES}; do
- k=$(expr $k + 1);
- if [ $k -eq $i ]; then
- uboot_compile_config_copy_binary $config $type $binary
- fi
- done
- unset k
+ uboot_compile_config_copy_binary $config $type $config_binary
# Generate the uboot-initial-env
if [ -n "${UBOOT_INITIAL_ENV}" ]; then
The existing flow for setting UBOOT_CONFIG options is a little confusing. The comma separated list is difficult to remember which slot is used for which option, and the order of the options cannot be changed just added on to. This commit overhauls the UBOOT_CONFIG flow while maintaining the backwards compatibility with the existing settings. Rather than use a comma separated list, a new set of placeholder variables have been defined where the same config flags can be used to specify all of the needed changes: UBOOT_CONFIG = "foo bar" UBOOT_CONFIG[foo] = "config1,fstype1,binary1" UBOOT_CONFIG[bar] = "config2,fstype2,binary2" becomes: UBOOT_CONFIG = "foo bar" UBOOT_CONFIG[foo] = "config1" UBOOT_CONFIG[bar] = "config2" UBOOT_CONFIG_IMAGE_FSTYPES[foo] = "fstype1" UBOOT_CONFIG_IMAGE_FSTYPES[bar] = "fstype2" UBOOT_CONFIG_BINARY[foo] = "binary1" UBOOT_CONFIG_BINARY[bar] = "binary2" The previous addition of makeopts has been removed and replaced with: UBOOT_CONFIG_MAKE_OPTS[config] = "opts" Signed-off-by: Ryan Eatmon <reatmon@ti.com> --- meta/classes-recipe/uboot-config.bbclass | 119 +++++++++++++++---- meta/classes-recipe/uboot-sign.bbclass | 9 +- meta/recipes-bsp/u-boot/u-boot-configure.inc | 12 +- meta/recipes-bsp/u-boot/u-boot.inc | 22 +--- 4 files changed, 101 insertions(+), 61 deletions(-)