bitbake.conf: include machine name in DEPLOY_DIR_IMAGE

This allows a clean seperation between image outputs from different
machines, and makes it possible to have convenience symlinks to make
the output ready to deploy.

This did require some surgery in runqemu; if explicit paths to the image
and kernel are not supplied then DEPLOY_DIR_IMAGE needs to be determined
from bitbake or set in the environment. However the script does try to
avoid requiring it unless it really is needed. Corresponding changes
were made in the automated testing code as well.

Based on an RFC patch by Koen Kooi <koen@dominion.thruhere.net>

(From OE-Core rev: 7e90261aec61f79680b5eaeaf5b18c7b795412a4)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton 2013-09-12 12:04:52 +01:00 committed by Richard Purdie
parent ee7ccda0ec
commit 6670be71f7
4 changed files with 48 additions and 19 deletions

View File

@ -122,6 +122,7 @@ def testimage_main(d):
qemu = QemuRunner(machine, rootfs)
qemu.tmpdir = d.getVar("TMPDIR", True)
qemu.deploy_dir_image = d.getVar("DEPLOY_DIR_IMAGE", True)
qemu.display = d.getVar("BB_ORIGENV", False).getVar("DISPLAY", True)
qemu.logfile = os.path.join(testdir, "qemu_boot_log.%s" % d.getVar('DATETIME', True))
try:

View File

@ -379,7 +379,7 @@ DEPLOY_DIR_TAR = "${DEPLOY_DIR}/tar"
DEPLOY_DIR_IPK = "${DEPLOY_DIR}/ipk"
DEPLOY_DIR_RPM = "${DEPLOY_DIR}/rpm"
DEPLOY_DIR_DEB = "${DEPLOY_DIR}/deb"
DEPLOY_DIR_IMAGE ?= "${DEPLOY_DIR}/images"
DEPLOY_DIR_IMAGE ?= "${DEPLOY_DIR}/images/${MACHINE}"
DEPLOY_DIR_TOOLS = "${DEPLOY_DIR}/tools"
PKGDATA_DIR = "${TMPDIR}/pkgdata/${MULTIMACH_TARGET_SYS}"

View File

@ -16,7 +16,7 @@ import bb
class QemuRunner:
def __init__(self, machine, rootfs, display = None, tmpdir = None, logfile = None, boottime = 400, runqemutime = 60):
def __init__(self, machine, rootfs, display = None, tmpdir = None, deploy_dir_image = None, logfile = None, boottime = 400, runqemutime = 60):
# Popen object
self.runqemu = None
@ -28,6 +28,7 @@ class QemuRunner:
self.display = display
self.tmpdir = tmpdir
self.deploy_dir_image = deploy_dir_image
self.logfile = logfile
self.boottime = boottime
self.runqemutime = runqemutime
@ -71,6 +72,11 @@ class QemuRunner:
return False
else:
os.environ["OE_TMPDIR"] = self.tmpdir
if not os.path.exists(self.deploy_dir_image):
bb.error("Invalid DEPLOY_DIR_IMAGE path %s" % self.deploy_dir_image)
return False
else:
os.environ["DEPLOY_DIR_IMAGE"] = self.deploy_dir_image
self.qemuparams = 'bootparams="console=tty1 console=ttyS0,115200n8" qemuparams="-serial tcp:127.0.0.1:%s"' % self.serverport
if qemuparams:

View File

@ -321,9 +321,17 @@ AKITA_DEFAULT_FSTYPE=jffs2
SPITZ_DEFAULT_KERNEL=zImage-spitz.bin
SPITZ_DEFAULT_FSTYPE=ext3
setup_tmpdir() {
if [ -z "$OE_TMPDIR" ]; then
# Try to get OE_TMPDIR from bitbake
setup_path_vars() {
if [ -z "$OE_TMPDIR" ] ; then
PATHS_REQUIRED=true
elif [ "$1" = "1" -a -z "$DEPLOY_DIR_IMAGE" ] ; then
PATHS_REQUIRED=true
else
PATHS_REQUIRED=false
fi
if [ "$PATHS_REQUIRED" = "true" ]; then
# Try to get the variable values from bitbake
type -P bitbake &>/dev/null || {
echo "In order for this script to dynamically infer paths";
echo "to kernels or filesystem images, you either need";
@ -331,21 +339,35 @@ setup_tmpdir() {
echo "before running this script" >&2;
exit 1; }
# We have bitbake in PATH, get OE_TMPDIR from bitbake
OE_TMPDIR=`MACHINE=$MACHINE bitbake -e | grep ^TMPDIR=\" | cut -d '=' -f2 | cut -d '"' -f2`
# We have bitbake in PATH, get the variable values from bitbake
BITBAKE_ENV_TMPFILE=`mktemp runqemu.XXXXXXXXXX`
if [ "$?" != "0" ] ; then
echo "Error: mktemp failed for bitbake environment output"
exit 1
fi
MACHINE=$MACHINE bitbake -e > $BITBAKE_ENV_TMPFILE
if [ -z "$OE_TMPDIR" ] ; then
OE_TMPDIR=`cat $BITBAKE_ENV_TMPFILE | sed -n 's/^TMPDIR=\"\(.*\)\"/\1/p'`
fi
if [ -z "$DEPLOY_DIR_IMAGE" ] ; then
DEPLOY_DIR_IMAGE=`cat $BITBAKE_ENV_TMPFILE | sed -n 's/^DEPLOY_DIR_IMAGE=\"\(.*\)\"/\1/p'`
fi
if [ -z "$OE_TMPDIR" ]; then
# Check for errors from bitbake that the user needs to know about
BITBAKE_OUTPUT=`bitbake -e | wc -l`
BITBAKE_OUTPUT=`cat $BITBAKE_ENV_TMPFILE | wc -l`
if [ "$BITBAKE_OUTPUT" -eq "0" ]; then
echo "Error: this script needs to be run from your build directory,"
echo "or you need to explicitly set OE_TMPDIR in your environment"
echo "Error: this script needs to be run from your build directory, or you need"
echo "to explicitly set OE_TMPDIR and DEPLOY_DIR_IMAGE in your environment"
else
echo "There was an error running bitbake to determine TMPDIR"
echo "Here is the output from 'bitbake -e':"
bitbake -e
cat $BITBAKE_ENV_TMPFILE
fi
rm $BITBAKE_ENV_TMPFILE
exit 1
fi
rm $BITBAKE_ENV_TMPFILE
fi
}
@ -355,7 +377,7 @@ setup_sysroot() {
# either in an in-tree build scenario or the environment
# script wasn't source'd.
if [ -z "$OECORE_NATIVE_SYSROOT" ]; then
setup_tmpdir
setup_path_vars
BUILD_ARCH=`uname -m`
BUILD_OS=`uname | tr '[A-Z]' '[a-z]'`
BUILD_SYS="$BUILD_ARCH-$BUILD_OS"
@ -405,9 +427,9 @@ if [ -e "$ROOTFS" -a -z "$FSTYPE" ]; then
fi
if [ -z "$KERNEL" -a "x$FSTYPE" != "xvmdk" ]; then
setup_tmpdir
setup_path_vars 1
eval kernel_file=\$${machine2}_DEFAULT_KERNEL
KERNEL=$OE_TMPDIR/deploy/images/$kernel_file
KERNEL=$DEPLOY_DIR_IMAGE/$kernel_file
if [ -z "$KERNEL" ]; then
error "Unable to determine default kernel for MACHINE [$MACHINE]"
@ -428,14 +450,14 @@ fi
# Handle cases where a ROOTFS type is given instead of a filename, e.g.
# core-image-sato
if [ "$LAZY_ROOTFS" = "true" ]; then
setup_tmpdir
echo "Assuming $ROOTFS really means $OE_TMPDIR/deploy/images/$ROOTFS-$MACHINE.$FSTYPE"
ROOTFS=$OE_TMPDIR/deploy/images/$ROOTFS-$MACHINE.$FSTYPE
setup_path_vars 1
echo "Assuming $ROOTFS really means $DEPLOY_DIR_IMAGE/$ROOTFS-$MACHINE.$FSTYPE"
ROOTFS=$DEPLOY_DIR_IMAGE/$ROOTFS-$MACHINE.$FSTYPE
fi
if [ -z "$ROOTFS" -a "x$FSTYPE" != "xvmdk" ]; then
setup_tmpdir
T=$OE_TMPDIR/deploy/images
setup_path_vars 1
T=$DEPLOY_DIR_IMAGE
eval rootfs_list=\$${machine2}_DEFAULT_ROOTFS
findimage $T $MACHINE $FSTYPE