diff options
| -rw-r--r-- | meta/classes/kernel-yocto.bbclass | 143 | ||||
| -rw-r--r-- | meta/recipes-kernel/kern-tools/kern-tools-native_git.bb | 4 |
2 files changed, 55 insertions, 92 deletions
diff --git a/meta/classes/kernel-yocto.bbclass b/meta/classes/kernel-yocto.bbclass index a9d42053da..8650e55de7 100644 --- a/meta/classes/kernel-yocto.bbclass +++ b/meta/classes/kernel-yocto.bbclass | |||
| @@ -119,77 +119,42 @@ do_kernel_metadata() { | |||
| 119 | patches="${@" ".join(find_patches(d))}" | 119 | patches="${@" ".join(find_patches(d))}" |
| 120 | feat_dirs="${@" ".join(find_kernel_feature_dirs(d))}" | 120 | feat_dirs="${@" ".join(find_kernel_feature_dirs(d))}" |
| 121 | 121 | ||
| 122 | # add any explicitly referenced features onto the end of the feature | ||
| 123 | # list that is passed to the kernel build scripts. | ||
| 124 | if [ -n "${KERNEL_FEATURES}" ]; then | ||
| 125 | for feat in ${KERNEL_FEATURES}; do | ||
| 126 | addon_features="$addon_features --feature $feat" | ||
| 127 | done | ||
| 128 | fi | ||
| 129 | |||
| 130 | # check for feature directories/repos/branches that were part of the | 122 | # check for feature directories/repos/branches that were part of the |
| 131 | # SRC_URI. If they were supplied, we convert them into include directives | 123 | # SRC_URI. If they were supplied, we convert them into include directives |
| 132 | # for the update part of the process | 124 | # for the update part of the process |
| 133 | if [ -n "${feat_dirs}" ]; then | 125 | for f in ${feat_dirs}; do |
| 134 | for f in ${feat_dirs}; do | ||
| 135 | if [ -d "${WORKDIR}/$f/meta" ]; then | 126 | if [ -d "${WORKDIR}/$f/meta" ]; then |
| 136 | includes="$includes -I${WORKDIR}/$f/meta" | 127 | includes="$includes -I${WORKDIR}/$f/meta" |
| 137 | elif [ -d "${WORKDIR}/$f" ]; then | 128 | elif [ -d "${WORKDIR}/$f" ]; then |
| 138 | includes="$includes -I${WORKDIR}/$f" | 129 | includes="$includes -I${WORKDIR}/$f" |
| 139 | fi | 130 | fi |
| 140 | done | 131 | done |
| 141 | fi | 132 | for s in ${sccs}; do |
| 133 | sdir=$(dirname $s) | ||
| 134 | includes="$includes -I${sdir}" | ||
| 135 | done | ||
| 142 | 136 | ||
| 143 | # updates or generates the target description | 137 | # expand kernel features into their full path equivalents |
| 144 | updateme ${updateme_flags} -DKDESC=${KMACHINE}:${LINUX_KERNEL_TYPE} \ | 138 | bsp_definition=$(spp ${includes} --find -DKMACHINE=${KMACHINE} -DKTYPE=${LINUX_KERNEL_TYPE}) |
| 145 | ${includes} ${addon_features} ${ARCH} ${KMACHINE} ${sccs} ${patches} | 139 | meta_dir=$(kgit --meta) |
| 146 | if [ $? -ne 0 ]; then | 140 | |
| 147 | bbfatal_log "Could not update ${machine_branch}" | 141 | # run1: pull all the configuration fragments, no matter where they come from |
| 148 | fi | 142 | scc --force -o ${S}/${meta_dir}:cfg,meta ${includes} ${bsp_definition} ${sccs} ${patches} ${KERNEL_FEATURES} |
| 143 | |||
| 144 | # run2: only generate patches for elements that have been passed on the SRC_URI | ||
| 145 | scc --force -o ${S}/${meta_dir}:patch --cmds patch ${includes} ${sccs} ${patches} ${KERNEL_FEATURES} | ||
| 149 | } | 146 | } |
| 150 | 147 | ||
| 151 | do_patch() { | 148 | do_patch() { |
| 152 | cd ${S} | 149 | cd ${S} |
| 153 | 150 | ||
| 154 | # executes and modifies the source tree as required | 151 | meta_dir=$(kgit --meta) |
| 155 | patchme ${KMACHINE} | 152 | (cd ${meta_dir}; ln -sf patch.queue series) |
| 156 | if [ $? -ne 0 ]; then | 153 | if [ -f "${meta_dir}/series" ]; then |
| 157 | bberror "Could not apply patches for ${KMACHINE}." | 154 | kgit-s2q --gen -v --patches .kernel-meta/ |
| 158 | bbfatal_log "Patch failures can be resolved in the linux source directory ${S})" | 155 | if [ $? -ne 0 ]; then |
| 159 | fi | 156 | bberror "Could not apply patches for ${KMACHINE}." |
| 160 | 157 | bbfatal_log "Patch failures can be resolved in the linux source directory ${S})" | |
| 161 | # check to see if the specified SRCREV is reachable from the final branch. | ||
| 162 | # if it wasn't something wrong has happened, and we should error. | ||
| 163 | machine_srcrev="${SRCREV_machine}" | ||
| 164 | if [ -z "${machine_srcrev}" ]; then | ||
| 165 | # fallback to SRCREV if a non machine_meta tree is being built | ||
| 166 | machine_srcrev="${SRCREV}" | ||
| 167 | # if SRCREV cannot be reached something is wrong. | ||
| 168 | if [ -z "${machine_srcrev}" ]; then | ||
| 169 | bbfatal "Neither SRCREV_machine or SRCREV was specified!" | ||
| 170 | fi | ||
| 171 | fi | ||
| 172 | |||
| 173 | if [ -n "${KMETA_AUDIT}" ]; then | ||
| 174 | current_branch=`git rev-parse --abbrev-ref HEAD` | ||
| 175 | machine_branch="${@ get_machine_branch(d, "${KBRANCH}" )}" | ||
| 176 | if [ "${current_branch}" != "${machine_branch}" ]; then | ||
| 177 | bbwarn "After meta data application, the kernel tree branch is ${current_branch}." | ||
| 178 | bbwarn "The SRC_URI specified branch ${machine_branch}." | ||
| 179 | bbwarn "" | ||
| 180 | bbwarn "The branch will be forced to ${machine_branch}, but this means the board meta data" | ||
| 181 | bbwarn "(.scc files) do not match the SRC_URI specification." | ||
| 182 | bbwarn "" | ||
| 183 | bbwarn "The meta data and branch ${machine_branch} should be inspected to ensure the proper" | ||
| 184 | bbwarn "kernel is being built." | ||
| 185 | git checkout -f ${machine_branch} | ||
| 186 | fi | ||
| 187 | fi | ||
| 188 | |||
| 189 | if [ "${machine_srcrev}" != "AUTOINC" ]; then | ||
| 190 | if ! [ "$(git rev-parse --verify ${machine_srcrev}~0)" = "$(git merge-base ${machine_srcrev} HEAD)" ]; then | ||
| 191 | bberror "SRCREV ${machine_srcrev} was specified, but is not reachable" | ||
| 192 | bbfatal "Check the BSP description for incorrect branch selection, or other errors." | ||
| 193 | fi | 158 | fi |
| 194 | fi | 159 | fi |
| 195 | } | 160 | } |
| @@ -258,26 +223,37 @@ do_kernel_metadata[depends] = "kern-tools-native:do_populate_sysroot" | |||
| 258 | 223 | ||
| 259 | do_kernel_configme[dirs] += "${S} ${B}" | 224 | do_kernel_configme[dirs] += "${S} ${B}" |
| 260 | do_kernel_configme() { | 225 | do_kernel_configme() { |
| 261 | bbnote "kernel configme" | 226 | set +e |
| 262 | export KMETA=${KMETA} | ||
| 263 | 227 | ||
| 264 | if [ -n "${KCONFIG_MODE}" ]; then | 228 | # translate the kconfig_mode into something that merge_config.sh |
| 265 | configmeflags=${KCONFIG_MODE} | 229 | # understands |
| 266 | else | 230 | case ${KCONFIG_MODE} in |
| 267 | # If a defconfig was passed, use =n as the baseline, which is achieved | 231 | allnoconfig) |
| 268 | # via --allnoconfig | 232 | config_flags="-n" |
| 233 | ;; | ||
| 234 | alldefconfig) | ||
| 235 | config_flags="" | ||
| 236 | ;; | ||
| 237 | *) | ||
| 269 | if [ -f ${WORKDIR}/defconfig ]; then | 238 | if [ -f ${WORKDIR}/defconfig ]; then |
| 270 | configmeflags="--allnoconfig" | 239 | config_flags="-n" |
| 271 | fi | 240 | fi |
| 272 | fi | 241 | ;; |
| 242 | esac | ||
| 273 | 243 | ||
| 274 | cd ${S} | 244 | cd ${S} |
| 275 | PATH=${PATH}:${S}/scripts/util | 245 | |
| 276 | configme ${configmeflags} --reconfig --output ${B} ${LINUX_KERNEL_TYPE} ${KMACHINE} | 246 | meta_dir=$(kgit --meta) |
| 247 | configs="$(scc --configs -o ${meta_dir})" | ||
| 248 | if [ -z "${configs}" ]; then | ||
| 249 | bbfatal_log "Could not find configuration queue (${meta_dir}/config.queue)" | ||
| 250 | fi | ||
| 251 | |||
| 252 | ARCH=${ARCH} merge_config.sh -O ${B} ${config_flags} ${configs} > ${meta_dir}/cfg/merge_config_build.log 2>&1 | ||
| 277 | if [ $? -ne 0 ]; then | 253 | if [ $? -ne 0 ]; then |
| 278 | bbfatal_log "Could not configure ${KMACHINE}-${LINUX_KERNEL_TYPE}" | 254 | bbfatal_log "Could not configure ${KMACHINE}-${LINUX_KERNEL_TYPE}" |
| 279 | fi | 255 | fi |
| 280 | 256 | ||
| 281 | echo "# Global settings from linux recipe" >> ${B}/.config | 257 | echo "# Global settings from linux recipe" >> ${B}/.config |
| 282 | echo "CONFIG_LOCALVERSION="\"${LINUX_VERSION_EXTENSION}\" >> ${B}/.config | 258 | echo "CONFIG_LOCALVERSION="\"${LINUX_VERSION_EXTENSION}\" >> ${B}/.config |
| 283 | } | 259 | } |
| @@ -295,36 +271,23 @@ python do_kernel_configcheck() { | |||
| 295 | kmeta = "." + kmeta | 271 | kmeta = "." + kmeta |
| 296 | 272 | ||
| 297 | pathprefix = "export PATH=%s:%s; " % (d.getVar('PATH', True), "${S}/scripts/util/") | 273 | pathprefix = "export PATH=%s:%s; " % (d.getVar('PATH', True), "${S}/scripts/util/") |
| 298 | cmd = d.expand("cd ${S}; kconf_check -config %s/meta-series ${S} ${B}" % kmeta) | 274 | |
| 275 | cmd = d.expand("scc --configs -o ${S}/.kernel-meta") | ||
| 276 | ret, configs = oe.utils.getstatusoutput("%s%s" % (pathprefix, cmd)) | ||
| 277 | |||
| 278 | cmd = d.expand("cd ${S}; kconf_check --report -o ${S}/%s/cfg/ ${B}/.config ${S} %s" % (kmeta,configs)) | ||
| 299 | ret, result = oe.utils.getstatusoutput("%s%s" % (pathprefix, cmd)) | 279 | ret, result = oe.utils.getstatusoutput("%s%s" % (pathprefix, cmd)) |
| 300 | 280 | ||
| 301 | config_check_visibility = int(d.getVar( "KCONF_AUDIT_LEVEL", True ) or 0) | 281 | config_check_visibility = int(d.getVar( "KCONF_AUDIT_LEVEL", True ) or 0) |
| 302 | bsp_check_visibility = int(d.getVar( "KCONF_BSP_AUDIT_LEVEL", True ) or 0) | 282 | bsp_check_visibility = int(d.getVar( "KCONF_BSP_AUDIT_LEVEL", True ) or 0) |
| 303 | 283 | ||
| 304 | # if config check visibility is non-zero, report dropped configuration values | 284 | # if config check visibility is non-zero, report dropped configuration values |
| 305 | mismatch_file = "${S}/" + kmeta + "/" + "mismatch.cfg" | 285 | mismatch_file = d.expand("${S}/%s/cfg/mismatch.txt" % kmeta) |
| 306 | if os.path.exists(mismatch_file): | 286 | if os.path.exists(mismatch_file): |
| 307 | if config_check_visibility: | 287 | if config_check_visibility: |
| 308 | with open (mismatch_file, "r") as myfile: | 288 | with open (mismatch_file, "r") as myfile: |
| 309 | results = myfile.read() | 289 | results = myfile.read() |
| 310 | bb.warn( "[kernel config]: specified values did not make it into the kernel's final configuration:\n\n%s" % results) | 290 | bb.warn( "[kernel config]: specified values did not make it into the kernel's final configuration:\n\n%s" % results) |
| 311 | |||
| 312 | # if config check visibility is level 2 or higher, report non-hardware options | ||
| 313 | nonhw_file = "${S}/" + kmeta + "/" + "nonhw_report.cfg" | ||
| 314 | if os.path.exists(nonhw_file): | ||
| 315 | if config_check_visibility > 1: | ||
| 316 | with open (nonhw_file, "r") as myfile: | ||
| 317 | results = myfile.read() | ||
| 318 | bb.warn( "[kernel config]: BSP specified non-hw configuration:\n\n%s" % results) | ||
| 319 | |||
| 320 | bsp_desc = "${S}/" + kmeta + "/" + "top_tgt" | ||
| 321 | if os.path.exists(bsp_desc) and bsp_check_visibility > 1: | ||
| 322 | with open (bsp_desc, "r") as myfile: | ||
| 323 | bsp_tgt = myfile.read() | ||
| 324 | m = re.match("^(.*)scratch.obj(.*)$", bsp_tgt) | ||
| 325 | if not m is None: | ||
| 326 | bb.warn( "[kernel]: An auto generated BSP description was used, this normally indicates a misconfiguration.\n" + | ||
| 327 | "Check that your machine (%s) has an associated kernel description." % "${MACHINE}" ) | ||
| 328 | } | 291 | } |
| 329 | 292 | ||
| 330 | # Ensure that the branches (BSP and meta) are on the locations specified by | 293 | # Ensure that the branches (BSP and meta) are on the locations specified by |
diff --git a/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb b/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb index c3ded98332..6877a0cf18 100644 --- a/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb +++ b/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb | |||
| @@ -1,10 +1,10 @@ | |||
| 1 | SUMMARY = "Tools for managing Yocto Project style branched kernels" | 1 | SUMMARY = "Tools for managing Yocto Project style branched kernels" |
| 2 | LICENSE = "GPLv2" | 2 | LICENSE = "GPLv2" |
| 3 | LIC_FILES_CHKSUM = "file://git/tools/kgit;beginline=5;endline=9;md5=d8d1d729a70cd5f52972f8884b80743d" | 3 | LIC_FILES_CHKSUM = "file://git/tools/kgit;beginline=5;endline=9;md5=a6c2fa8aef1bda400e2828845ba0d06c" |
| 4 | 4 | ||
| 5 | DEPENDS = "git-native" | 5 | DEPENDS = "git-native" |
| 6 | 6 | ||
| 7 | SRCREV = "a6a6f6e1e738d2ecd26b675e9bec867105703416" | 7 | SRCREV = "4b5de9011b31ff92ba2b6e052ab818b09affd905" |
| 8 | PR = "r12" | 8 | PR = "r12" |
| 9 | PV = "0.2+git${SRCPV}" | 9 | PV = "0.2+git${SRCPV}" |
| 10 | 10 | ||
