summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruce Ashfield <bruce.ashfield@gmail.com>2020-06-30 01:18:41 -0400
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-07-16 22:28:40 +0100
commit5e83c131e502324a2dba128ad642561261f55206 (patch)
tree3e27d6541ea76f0c573023a16d4ad7f0ab1f9c27
parent2525b5f46e9ae809cf8fe535287f4d5249ffe63f (diff)
downloadpoky-5e83c131e502324a2dba128ad642561261f55206.tar.gz
kernel/yocto: ensure that defconfigs are processed first
It is uncommon that a BSP definition and a defconfig are used in a single configuration. That being said, it is a valid way to organize kernel configuration meta data. When a defconfig is used, either on the src_uri or from in the kernel tree, it is normally expected that it is the baseline, with all options applied on top of it. With this commit, we detect either type of defconfig and ensure that it is used first, followed by the fragments in their previous order. This allows existing configuration stacks to remain the same, while ensuring that a defconfig combined stack works as expected. (From OE-Core rev: 7ecc81baeacaa1149a4947791200e8819c3df677) Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit e6845327b69396d843a2f3c4c3ac9400ae9caedf) Signed-off-by: Steve Sakoman <steve@sakoman.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes/kernel-yocto.bbclass33
1 files changed, 21 insertions, 12 deletions
diff --git a/meta/classes/kernel-yocto.bbclass b/meta/classes/kernel-yocto.bbclass
index 5bc627066e..41d8620e67 100644
--- a/meta/classes/kernel-yocto.bbclass
+++ b/meta/classes/kernel-yocto.bbclass
@@ -131,7 +131,7 @@ do_kernel_metadata() {
131 else 131 else
132 cp -f ${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG} ${WORKDIR}/defconfig 132 cp -f ${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG} ${WORKDIR}/defconfig
133 fi 133 fi
134 sccs="${WORKDIR}/defconfig" 134 in_tree_defconfig="${WORKDIR}/defconfig"
135 else 135 else
136 bbfatal "A KBUILD_DEFCONFIG '${KBUILD_DEFCONFIG}' was specified, but not present in the source tree" 136 bbfatal "A KBUILD_DEFCONFIG '${KBUILD_DEFCONFIG}' was specified, but not present in the source tree"
137 fi 137 fi
@@ -153,14 +153,24 @@ do_kernel_metadata() {
153 patches="${@" ".join(find_patches(d,''))}" 153 patches="${@" ".join(find_patches(d,''))}"
154 feat_dirs="${@" ".join(find_kernel_feature_dirs(d))}" 154 feat_dirs="${@" ".join(find_kernel_feature_dirs(d))}"
155 155
156 # a quick check to make sure we don't have duplicate defconfigs 156 # a quick check to make sure we don't have duplicate defconfigs If
157 # If there's a defconfig in the SRC_URI, did we also have one from 157 # there's a defconfig in the SRC_URI, did we also have one from the
158 # the KBUILD_DEFCONFIG processing above ? 158 # KBUILD_DEFCONFIG processing above ?
159 if [ -n "$sccs" ]; then 159 src_uri_defconfig=$(echo $sccs_from_src_uri | awk '{ if ($0=="defconfig") { print $0 } }' RS=' ')
160 # we did have a defconfig from above. remove any that might be in the src_uri 160 # drop and defconfig's from the src_uri variable, we captured it just above here if it existed
161 sccs_from_src_uri=$(echo $sccs_from_src_uri | awk '{ if ($0!="defconfig") { print $0 } }' RS=' ') 161 sccs_from_src_uri=$(echo $sccs_from_src_uri | awk '{ if ($0!="defconfig") { print $0 } }' RS=' ')
162 if [ -n "$in_tree_defconfig" ]; then
163 sccs_defconfig=$in_tree_defconfig
164 if [ -n "$src_uri_defconfig" ]; then
165 bbwarn "[NOTE]: defconfig was supplied both via KBUILD_DEFCONFIG and SRC_URI. Dropping SRC_URI defconfig"
166 fi
167 else
168 # if we didn't have an in-tree one, make our defconfig the one
169 # from the src_uri. Note: there may not have been one from the
170 # src_uri, so this can be an empty variable.
171 sccs_defconfig=$src_uri_defconfig
162 fi 172 fi
163 sccs="$sccs $sccs_from_src_uri" 173 sccs="$sccs_from_src_uri"
164 174
165 # check for feature directories/repos/branches that were part of the 175 # check for feature directories/repos/branches that were part of the
166 # SRC_URI. If they were supplied, we convert them into include directives 176 # SRC_URI. If they were supplied, we convert them into include directives
@@ -187,11 +197,10 @@ do_kernel_metadata() {
187 # expand kernel features into their full path equivalents 197 # expand kernel features into their full path equivalents
188 bsp_definition=$(spp ${includes} --find -DKMACHINE=${KMACHINE} -DKTYPE=${LINUX_KERNEL_TYPE}) 198 bsp_definition=$(spp ${includes} --find -DKMACHINE=${KMACHINE} -DKTYPE=${LINUX_KERNEL_TYPE})
189 if [ -z "$bsp_definition" ]; then 199 if [ -z "$bsp_definition" ]; then
190 echo "$sccs" | grep -q defconfig 200 if [ -z "$sccs_defconfig" ]; then
191 if [ $? -ne 0 ]; then
192 bbfatal_log "Could not locate BSP definition for ${KMACHINE}/${LINUX_KERNEL_TYPE} and no defconfig was provided" 201 bbfatal_log "Could not locate BSP definition for ${KMACHINE}/${LINUX_KERNEL_TYPE} and no defconfig was provided"
193 fi 202 fi
194 203 else
195 # if the bsp definition has "define KMETA_EXTERNAL_BSP t", 204 # if the bsp definition has "define KMETA_EXTERNAL_BSP t",
196 # then we need to set a flag that will instruct the next 205 # then we need to set a flag that will instruct the next
197 # steps to use the BSP as both configuration and patches. 206 # steps to use the BSP as both configuration and patches.
@@ -206,7 +215,7 @@ do_kernel_metadata() {
206 elements="`echo -n ${bsp_definition} ${sccs} ${patches} ${KERNEL_FEATURES}`" 215 elements="`echo -n ${bsp_definition} ${sccs} ${patches} ${KERNEL_FEATURES}`"
207 if [ -n "${elements}" ]; then 216 if [ -n "${elements}" ]; then
208 echo "${bsp_definition}" > ${S}/${meta_dir}/bsp_definition 217 echo "${bsp_definition}" > ${S}/${meta_dir}/bsp_definition
209 scc --force -o ${S}/${meta_dir}:cfg,merge,meta ${includes} ${bsp_definition} ${sccs} ${patches} ${KERNEL_FEATURES} 218 scc --force -o ${S}/${meta_dir}:cfg,merge,meta ${includes} $sccs_defconfig $bsp_definition $sccs $patches ${KERNEL_FEATURES}
210 if [ $? -ne 0 ]; then 219 if [ $? -ne 0 ]; then
211 bbfatal_log "Could not generate configuration queue for ${KMACHINE}." 220 bbfatal_log "Could not generate configuration queue for ${KMACHINE}."
212 fi 221 fi