]> code.ossystems Code Review - openembedded-core.git/commitdiff
linux-yocto: streamline BSP bootstrapping
authorBruce Ashfield <bruce.ashfield@windriver.com>
Wed, 9 Feb 2011 02:46:45 +0000 (21:46 -0500)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 9 Feb 2011 11:11:07 +0000 (11:11 +0000)
In order to build BSPs that were not already integrated into
the upstream linux yocto kernel AND keep the git fetcher happy,
some fairly complex anonymous python sections were required.

These sections cause problems with variable expansion and SRCREV
processing.

With the updated git fetcher code, we can streamline the BSP
boostrapping process and drop 99% of the anonymous python code.

This commit has the following changes to support BSP boot strapping
and simplication for existing BSPs.

   - KMETA is set per-recipe rather than in python code
   - undefined machines are no longer used, but instead common
     branch names are set per-recipe
   - fallback machine SRCREVs are present in the default revisions
     file
   - A new variable YOCTO_KERNEL_EXTERNAL_BRANCH should be set in
     the local.conf for new BSPs instead of being programatically
     determined in the anonymous python.
   - No more explicity KMACHINE variable expansion and manipulation,
     since the tools and build phases no longer require it due
     to the per-recipe fallbacks.

Integrated/merged BSPs are unaffected by the changes and have been
regression tested.

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
foo

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
meta/classes/kernel-yocto.bbclass
meta/conf/distro/include/poky-default-revisions.inc
meta/recipes-kernel/linux/linux-yocto-stable_git.bb
meta/recipes-kernel/linux/linux-yocto.inc
meta/recipes-kernel/linux/linux-yocto_git.bb

index 4c52bca43a185e36abec19e8fbafb1072e9b7b69..15802fabdfc604163dd66c5320b5121ff97e5bae 100644 (file)
@@ -1,61 +1,5 @@
 S = "${WORKDIR}/linux"
 
-# Determine which branch to fetch and build. Not all branches are in the
-# upstream repo (but will be locally created after the fetchers run) so 
-# a fallback branch needs to be chosen. 
-#
-# The default machine 'UNDEFINED'. If the machine is not set to a specific
-# branch in this recipe or in a recipe extension, then we fallback to a 
-# branch that is always present 'standard'. This sets the KBRANCH variable
-# and is used in the SRC_URI. The machine is then set back to ${MACHINE},
-# since futher processing will use that to create local branches
-
-SRCPV_prepend = "${@yoctokernel_variables_fixup(d)}"
-
-def yoctokernel_variables_fixup(d):
-    if d.getVar("PVFIXUPDONE", False) is "done":
-        return ""
-
-    import bb, re, string
-
-    version = bb.data.getVar("LINUX_VERSION", d, 1)
-    # 2.6.34 signifies the old-style tree, so we need some temporary
-    # conditional processing based on the kernel version.
-    if version == "2.6.34":
-        bb.data.setVar("KBRANCH", "${KMACHINE}-${LINUX_KERNEL_TYPE}", d)
-        bb.data.setVar("KMETA", "wrs_meta", d)
-        mach = bb.data.getVar("KMACHINE", d, 1)
-        if mach == "UNDEFINED":
-            bb.data.setVar("KBRANCH", "standard", d)
-            bb.data.setVar("KMACHINE", "${MACHINE}", d)
-            # track the global configuration on a bootstrapped BSP
-            bb.data.setVar("SRCREV_machine", "${SRCREV_meta}", d)
-            bb.data.setVar("BOOTSTRAP", bb.data.expand("${MACHINE}",d) + "-standard", d)
-    else:
-        # The branch for a build is:
-        #    yocto/<kernel type>/${KMACHINE} or
-        #    yocto/<kernel type>/${KMACHINE}/base
-        mach = bb.data.getVar("KMACHINE_" + bb.data.expand("${MACHINE}",d), d, 1)
-        if mach == None:
-             mach = bb.data.getVar("KMACHINE", d, 1)
-
-        bb.data.setVar("KBRANCH", mach, d)
-        bb.data.setVar("KMETA", "meta", d)
-
-        # drop the "/base" if it was on the KMACHINE
-        kmachine = mach.replace('/base','')
-        # drop everything but the last segment
-        kmachine = os.path.basename( kmachine )
-        # and then write KMACHINE back
-        bb.data.setVar('KMACHINE_' + bb.data.expand("${MACHINE}",d), kmachine, d)
-
-        if mach == "UNDEFINED":
-            bb.data.setVar('KMACHINE_' + bb.data.expand("${MACHINE}",d), bb.data.expand("${MACHINE}",d), d)
-            bb.data.setVar("KBRANCH", "yocto/standard/base", d)
-            bb.data.setVar("BOOTSTRAP", "yocto/standard/" + bb.data.expand("${MACHINE}",d), d)
-    d.setVar("PVFIXUPDONE", "done")
-    return ""
-
 do_patch() {
        cd ${S}
        if [ -f ${WORKDIR}/defconfig ]; then
@@ -63,12 +7,11 @@ do_patch() {
        fi
 
        kbranch=${KBRANCH}
-       if [ -n "${BOOTSTRAP}" ]; then
+       if [ -n "${YOCTO_KERNEL_EXTERNAL_BRANCH}" ]; then
            # switch from a generic to a specific branch
-           kbranch=${BOOTSTRAP}
+           kbranch=${YOCTO_KERNEL_EXTERNAL_BRANCH}
        fi
 
-
        # simply ensures that a branch of the right name has been created
        createme ${ARCH} ${kbranch} ${defconfig}
        if [ $? -ne 0 ]; then
@@ -131,8 +74,14 @@ addtask kernel_checkout before do_patch after do_unpack
 do_kernel_configme() {
        echo "[INFO] doing kernel configme"
 
+       kbranch=${KBRANCH}
+       if [ -n "${YOCTO_KERNEL_EXTERNAL_BRANCH}" ]; then
+           # switch from a generic to a specific branch
+           kbranch=${YOCTO_KERNEL_EXTERNAL_BRANCH}
+       fi
+
        cd ${S}
-       configme --reconfig --output ${B} ${KBRANCH} ${MACHINE}
+       configme --reconfig --output ${B} ${kbranch} ${MACHINE}
        if [ $? -ne 0 ]; then
                echo "ERROR. Could not configure ${KMACHINE}-${LINUX_KERNEL_TYPE}"
                exit 1
@@ -165,7 +114,7 @@ do_validate_branches() {
        target_meta_head="${SRCREV_meta}"
 
        # nothing to do if bootstrapping
-       if [ -n "${BOOTSTRAP}" ]; then
+       if [ -n "${YOCTO_KERNEL_EXTERNAL_BRANCH}" ]; then
                return
        fi
 
index 9abc4a55b4b080bd76be965da6bc14b24da34e77..951b3aa6d1d27004377a8d992706496dc3fa060d 100644 (file)
@@ -59,7 +59,7 @@ SRCREV_pn-gypsy ??= "147"
 SRCREV_pn-inputproto ??= "7203036522ba9d4b224d282d6afc2d0b947711ee"
 SRCREV_pn-inputproto-native ??= "7203036522ba9d4b224d282d6afc2d0b947711ee"
 SRCREV_pn-inputproto-nativesdk ??= "7203036522ba9d4b224d282d6afc2d0b947711ee"
-SRCREV_pn-kern-tools-native ??= "fde7ef8fa8043607752563b9b7908f487eb2f7dd"
+SRCREV_pn-kern-tools-native ??= "4f13a46499261ea181fdc13db5459067df08aca7"
 SRCREV_pn-libdrm ??= "3f3c5be6f908272199ccf53f108b1124bfe0a00e"
 SRCREV_pn-libfakekey ??= "e8c2e412ea4a417afc1f30e32cb7bdc508b1dccc"
 SRCREV_pn-libgdbus ??= "aeab6e3c0185b271ca343b439470491b99cc587f"
index d4bee77c21ca1f62a1e9afb6242e4c7bf7b36e1a..3c1e66973363f2a24ebcdc830ee3dd1287809110 100644 (file)
@@ -1,6 +1,7 @@
 inherit kernel
 require linux-yocto.inc
 
+KMACHINE = "common_pc"
 KMACHINE_qemux86  = "common_pc"
 KMACHINE_qemux86-64  = "common_pc_64"
 KMACHINE_qemuppc  = "qemu_ppc32"
@@ -14,20 +15,19 @@ KMACHINE_beagleboard = "beagleboard"
 LINUX_VERSION ?= "2.6.34"
 LINUX_VERSION_EXTENSION ?= "-yocto-${LINUX_KERNEL_TYPE_EXTENSION}"
 
+KMETA = wrs_meta
+KBRANCH = ${KMACHINE}-${LINUX_KERNEL_TYPE_EXTENSION}
+
 PR = "r1"
 PV = "${LINUX_VERSION}+git${SRCPV}"
 SRCREV_FORMAT = "meta_machine"
 
 COMPATIBLE_MACHINE = "(qemuarm|qemux86|qemuppc|qemumips|qemux86-64|atom-pc|routerstationpro|mpc8315e-rdb|beagleboard)"
 
-# this performs a fixup on the SRCREV for new/undefined BSPs
+# this performs a fixup on historical kernel types with embedded _'s
 python __anonymous () {
     import bb, re, string
 
-    rev = bb.data.getVar("SRCREV_machine", d, 1)
-    if rev == "standard":
-        bb.data.setVar("SRCREV_machine", "${SRCREV_meta}", d)
-
     kerntype = string.replace(bb.data.expand("${LINUX_KERNEL_TYPE}", d), "_", "-")
     bb.data.setVar("LINUX_KERNEL_TYPE_EXTENSION", kerntype, d)
 }
index 3ad849e46e0c627d727e3e510e9d65fb3ee5238f..03935fa702ca42683fde985b3e4b6bd3f11fef32 100644 (file)
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
 # A KMACHINE is the mapping of a yocto $MACHINE to what is built
 # by the kernel. This is typically the branch that should be built,
 # and it can be specific to the machine or shared
-KMACHINE = "UNDEFINED"
+KMACHINE = "UNDEFINED"
 
 # Set this to 'preempt_rt' in the local.conf if you want a real time kernel
 LINUX_KERNEL_TYPE ?= standard
@@ -19,4 +19,4 @@ addtask kernel_configme before do_configure after do_patch
 # Pick up shared functions
 inherit kernel-yocto
 
-B = "${WORKDIR}/linux-${KMACHINE}-${LINUX_KERNEL_TYPE}-build"
+B = "${WORKDIR}/linux-${MACHINE}-${LINUX_KERNEL_TYPE}-build"
index cc52397006efc00496586bfcb751d9e172e2c747..75c6fb16539e227366502f31beb47523a5f634c2 100644 (file)
@@ -1,6 +1,7 @@
 inherit kernel
 require linux-yocto.inc
 
+KMACHINE = "yocto/standard/base"
 KMACHINE_qemux86  = "yocto/standard/common-pc/base"
 KMACHINE_qemux86-64  = "yocto/standard/common-pc-64/base"
 KMACHINE_qemuppc  = "yocto/standard/qemu-ppc32"
@@ -11,6 +12,9 @@ KMACHINE_routerstationpro = "yocto/standard/routerstationpro"
 KMACHINE_mpc8315e-rdb = "yocto/standard/fsl-mpc8315e-rdb"
 KMACHINE_beagleboard = "yocto/standard/beagleboard"
 
+KBRANCH = ${KMACHINE}
+KMETA = meta
+
 LINUX_VERSION ?= "2.6.37"
 LINUX_VERSION_EXTENSION ?= "-yocto-${LINUX_KERNEL_TYPE}"
 PR = "r15"