diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/runqemu | 71 |
1 files changed, 42 insertions, 29 deletions
diff --git a/scripts/runqemu b/scripts/runqemu index b696202871..6234e811a7 100755 --- a/scripts/runqemu +++ b/scripts/runqemu | |||
@@ -163,12 +163,18 @@ def check_free_port(host, port): | |||
163 | 163 | ||
164 | class BaseConfig(object): | 164 | class BaseConfig(object): |
165 | def __init__(self): | 165 | def __init__(self): |
166 | # Vars can be merged with .qemuboot.conf, use a dict to manage them. | 166 | # The self.d saved vars from self.set(), part of them are from qemuboot.conf |
167 | self.d = { | 167 | self.d = {'QB_KERNEL_ROOT': '/dev/vda'} |
168 | 'MACHINE': '', | 168 | |
169 | 'DEPLOY_DIR_IMAGE': '', | 169 | # Supported env vars, add it here if a var can be got from env, |
170 | 'QB_KERNEL_ROOT': '/dev/vda', | 170 | # and don't use os.getenv in the code. |
171 | } | 171 | self.env_vars = ('MACHINE', |
172 | 'ROOTFS', | ||
173 | 'KERNEL', | ||
174 | 'DEPLOY_DIR_IMAGE', | ||
175 | 'OE_TMPDIR', | ||
176 | 'OECORE_NATIVE_SYSROOT', | ||
177 | ) | ||
172 | 178 | ||
173 | self.qemu_opt = '' | 179 | self.qemu_opt = '' |
174 | self.qemu_opt_script = '' | 180 | self.qemu_opt_script = '' |
@@ -238,6 +244,8 @@ class BaseConfig(object): | |||
238 | def get(self, key): | 244 | def get(self, key): |
239 | if key in self.d: | 245 | if key in self.d: |
240 | return self.d.get(key) | 246 | return self.d.get(key) |
247 | elif os.getenv(key): | ||
248 | return os.getenv(key) | ||
241 | else: | 249 | else: |
242 | return '' | 250 | return '' |
243 | 251 | ||
@@ -338,10 +346,13 @@ class BaseConfig(object): | |||
338 | 346 | ||
339 | def check_arg_machine(self, arg): | 347 | def check_arg_machine(self, arg): |
340 | """Check whether it is a machine""" | 348 | """Check whether it is a machine""" |
341 | if self.get('MACHINE') and self.get('MACHINE') != arg or re.search('/', arg): | 349 | if self.get('MACHINE') == arg: |
342 | raise Exception("Unknown arg: %s" % arg) | ||
343 | elif self.get('MACHINE') == arg: | ||
344 | return | 350 | return |
351 | elif self.get('MACHINE') and self.get('MACHINE') != arg: | ||
352 | raise Exception("Maybe conflicted MACHINE: %s vs %s" % (self.get('MACHINE'), arg)) | ||
353 | elif re.search('/', arg): | ||
354 | raise Exception("Unknown arg: %s" % arg) | ||
355 | |||
345 | logger.info('Assuming MACHINE = %s' % arg) | 356 | logger.info('Assuming MACHINE = %s' % arg) |
346 | 357 | ||
347 | # if we're running under testimage, or similarly as a child | 358 | # if we're running under testimage, or similarly as a child |
@@ -350,14 +361,14 @@ class BaseConfig(object): | |||
350 | # FIXME: testimage.bbclass exports these two variables into env, | 361 | # FIXME: testimage.bbclass exports these two variables into env, |
351 | # are there other scenarios in which we need to support being | 362 | # are there other scenarios in which we need to support being |
352 | # invoked by bitbake? | 363 | # invoked by bitbake? |
353 | deploy = os.environ.get('DEPLOY_DIR_IMAGE') | 364 | deploy = self.get('DEPLOY_DIR_IMAGE') |
354 | bbchild = deploy and os.environ.get('OE_TMPDIR') | 365 | bbchild = deploy and self.get('OE_TMPDIR') |
355 | if bbchild: | 366 | if bbchild: |
356 | self.set_machine_deploy_dir(arg, deploy) | 367 | self.set_machine_deploy_dir(arg, deploy) |
357 | return | 368 | return |
358 | # also check whether we're running under a sourced toolchain | 369 | # also check whether we're running under a sourced toolchain |
359 | # environment file | 370 | # environment file |
360 | if os.environ.get('OECORE_NATIVE_SYSROOT'): | 371 | if self.get('OECORE_NATIVE_SYSROOT'): |
361 | self.set("MACHINE", arg) | 372 | self.set("MACHINE", arg) |
362 | return | 373 | return |
363 | 374 | ||
@@ -430,20 +441,15 @@ class BaseConfig(object): | |||
430 | if unknown_arg: | 441 | if unknown_arg: |
431 | if self.get('MACHINE') == unknown_arg: | 442 | if self.get('MACHINE') == unknown_arg: |
432 | return | 443 | return |
433 | if not self.get('DEPLOY_DIR_IMAGE'): | 444 | if self.get('DEPLOY_DIR_IMAGE'): |
434 | # Trying to get DEPLOY_DIR_IMAGE from env. | 445 | machine = os.path.basename(self.get('DEPLOY_DIR_IMAGE')) |
435 | p = os.getenv('DEPLOY_DIR_IMAGE') | 446 | if unknown_arg == machine: |
436 | if p and self.is_deploy_dir_image(p): | 447 | self.set("MACHINE", machine) |
437 | machine = os.path.basename(p) | 448 | return |
438 | if unknown_arg == machine: | 449 | |
439 | self.set_machine_deploy_dir(machine, p) | ||
440 | return | ||
441 | else: | ||
442 | logger.info('DEPLOY_DIR_IMAGE: %s' % p) | ||
443 | self.set("DEPLOY_DIR_IMAGE", p) | ||
444 | self.check_arg_machine(unknown_arg) | 450 | self.check_arg_machine(unknown_arg) |
445 | 451 | ||
446 | if not (self.get('MACHINE') or self.get('DEPLOY_DIR_IMAGE')): | 452 | if not self.get('DEPLOY_DIR_IMAGE'): |
447 | self.load_bitbake_env() | 453 | self.load_bitbake_env() |
448 | s = re.search('^DEPLOY_DIR_IMAGE="(.*)"', self.bitbake_e, re.M) | 454 | s = re.search('^DEPLOY_DIR_IMAGE="(.*)"', self.bitbake_e, re.M) |
449 | if s: | 455 | if s: |
@@ -505,7 +511,16 @@ class BaseConfig(object): | |||
505 | def check_rootfs(self): | 511 | def check_rootfs(self): |
506 | """Check and set rootfs""" | 512 | """Check and set rootfs""" |
507 | 513 | ||
508 | if self.fstype == 'nfs' or self.fstype == "none": | 514 | if self.fstype == "none": |
515 | return | ||
516 | |||
517 | if self.get('ROOTFS'): | ||
518 | if not self.rootfs: | ||
519 | self.rootfs = self.get('ROOTFS') | ||
520 | elif self.get('ROOTFS') != self.rootfs: | ||
521 | raise Exception("Maybe conflicted ROOTFS: %s vs %s" % (self.get('ROOTFS'), self.rootfs)) | ||
522 | |||
523 | if self.fstype == 'nfs': | ||
509 | return | 524 | return |
510 | 525 | ||
511 | if self.rootfs and not os.path.exists(self.rootfs): | 526 | if self.rootfs and not os.path.exists(self.rootfs): |
@@ -642,8 +657,6 @@ class BaseConfig(object): | |||
642 | if not self.qemuboot: | 657 | if not self.qemuboot: |
643 | if self.get('DEPLOY_DIR_IMAGE'): | 658 | if self.get('DEPLOY_DIR_IMAGE'): |
644 | deploy_dir_image = self.get('DEPLOY_DIR_IMAGE') | 659 | deploy_dir_image = self.get('DEPLOY_DIR_IMAGE') |
645 | elif os.getenv('DEPLOY_DIR_IMAGE'): | ||
646 | deploy_dir_image = os.getenv('DEPLOY_DIR_IMAGE') | ||
647 | else: | 660 | else: |
648 | logger.info("Can't find qemuboot conf file, DEPLOY_DIR_IMAGE is NULL!") | 661 | logger.info("Can't find qemuboot conf file, DEPLOY_DIR_IMAGE is NULL!") |
649 | return | 662 | return |
@@ -720,8 +733,8 @@ class BaseConfig(object): | |||
720 | # be able to call `bitbake -e`, then try: | 733 | # be able to call `bitbake -e`, then try: |
721 | # - get OE_TMPDIR from environment and guess paths based on it | 734 | # - get OE_TMPDIR from environment and guess paths based on it |
722 | # - get OECORE_NATIVE_SYSROOT from environment (for sdk) | 735 | # - get OECORE_NATIVE_SYSROOT from environment (for sdk) |
723 | tmpdir = os.environ.get('OE_TMPDIR', None) | 736 | tmpdir = self.get('OE_TMPDIR', None) |
724 | oecore_native_sysroot = os.environ.get('OECORE_NATIVE_SYSROOT', None) | 737 | oecore_native_sysroot = self.get('OECORE_NATIVE_SYSROOT', None) |
725 | if tmpdir: | 738 | if tmpdir: |
726 | logger.info('Setting STAGING_DIR_NATIVE and STAGING_BINDIR_NATIVE relative to OE_TMPDIR (%s)' % tmpdir) | 739 | logger.info('Setting STAGING_DIR_NATIVE and STAGING_BINDIR_NATIVE relative to OE_TMPDIR (%s)' % tmpdir) |
727 | hostos, _, _, _, machine = os.uname() | 740 | hostos, _, _, _, machine = os.uname() |