summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configs/common/Benchmarks.py19
-rw-r--r--configs/common/FSConfig.py39
-rw-r--r--configs/common/Options.py5
-rw-r--r--configs/example/fs.py6
4 files changed, 57 insertions, 12 deletions
diff --git a/configs/common/Benchmarks.py b/configs/common/Benchmarks.py
index 37343dfad..bf0a2ad88 100644
--- a/configs/common/Benchmarks.py
+++ b/configs/common/Benchmarks.py
@@ -31,11 +31,13 @@ from os import environ as env
from m5.defines import buildEnv
class SysConfig:
- def __init__(self, script=None, mem=None, disk=None, rootdev=None):
+ def __init__(self, script=None, mem=None, disk=None, rootdev=None,
+ os_type='linux'):
self.scriptname = script
self.diskname = disk
self.memsize = mem
self.root = rootdev
+ self.ostype = os_type
def script(self):
if self.scriptname:
@@ -69,6 +71,9 @@ class SysConfig:
else:
return '/dev/sda1'
+ def os_type(self):
+ return self.ostype
+
# Benchmarks are defined as a key in a dict which is a list of SysConfigs
# The first defined machine is the test system, the others are driving systems
@@ -119,13 +124,17 @@ Benchmarks = {
'MutexTest': [SysConfig('mutex-test.rcS', '128MB')],
'ArmAndroid-GB': [SysConfig('null.rcS', '256MB',
- 'ARMv7a-Gingerbread-Android.SMP.mouse.nolock.clean.img')],
+ 'ARMv7a-Gingerbread-Android.SMP.mouse.nolock.clean.img',
+ None, 'android-gingerbread')],
'bbench-gb': [SysConfig('bbench-gb.rcS', '256MB',
- 'ARMv7a-Gingerbread-Android.SMP.mouse.nolock.img')],
+ 'ARMv7a-Gingerbread-Android.SMP.mouse.nolock.img',
+ None, 'android-gingerbread')],
'ArmAndroid-ICS': [SysConfig('null.rcS', '256MB',
- 'ARMv7a-ICS-Android.SMP.nolock.clean.img')],
+ 'ARMv7a-ICS-Android.SMP.nolock.clean.img',
+ None, 'android-ics')],
'bbench-ics': [SysConfig('bbench-ics.rcS', '256MB',
- 'ARMv7a-ICS-Android.SMP.nolock.img')]
+ 'ARMv7a-ICS-Android.SMP.nolock.img',
+ None, 'android-ics')]
}
benchs = Benchmarks.keys()
diff --git a/configs/common/FSConfig.py b/configs/common/FSConfig.py
index 462b8f6f7..cfc156649 100644
--- a/configs/common/FSConfig.py
+++ b/configs/common/FSConfig.py
@@ -43,6 +43,18 @@ from m5.objects import *
from Benchmarks import *
from m5.util import *
+# Populate to reflect supported os types per target ISA
+os_types = { 'alpha' : [ 'linux' ],
+ 'mips' : [ 'linux' ],
+ 'sparc' : [ 'linux' ],
+ 'x86' : [ 'linux' ],
+ 'arm' : [ 'linux',
+ 'android-gingerbread',
+ 'android-ics',
+ 'android-jellybean',
+ 'android-kitkat' ],
+ }
+
class CowIdeDisk(IdeDisk):
image = CowDiskImage(child=RawDiskImage(read_only=True),
read_only=False)
@@ -54,7 +66,6 @@ class MemBus(SystemXBar):
badaddr_responder = BadAddr()
default = Self.badaddr_responder.pio
-
def fillInCmdline(mdesc, template, **kwargs):
kwargs.setdefault('disk', mdesc.disk())
kwargs.setdefault('rootdev', mdesc.rootdev())
@@ -286,11 +297,31 @@ def makeArmSystem(mem_mode, machine_type, num_cpus=1, mdesc=None,
self.gic_cpu_addr = self.realview.gic.cpu_addr
self.flags_addr = self.realview.realview_io.pio_addr + 0x30
- # Android disk images must have 'android' keyword in the disk name
- # Look for 'android' in disk name and append /init to boot_osflags
+ # This check is for users who have previously put 'android' in
+ # the disk image filename to tell the config scripts to
+ # prepare the kernel with android-specific boot options. That
+ # behavior has been replaced with a more explicit option per
+ # the error message below. The disk can have any name now and
+ # doesn't need to include 'android' substring.
if (os.path.split(mdesc.disk())[-1]).lower().count('android'):
- cmdline += " init=/init "
+ if 'android' not in mdesc.os_type():
+ fatal("It looks like you are trying to boot an Android " \
+ "platform. To boot Android, you must specify " \
+ "--os-type with an appropriate Android release on " \
+ "the command line.")
+
+ # android-specific tweaks
+ if 'android' in mdesc.os_type():
+ # generic tweaks
+ cmdline += " init=/init"
+
+ # release-specific tweaks
+ if 'kitkat' in mdesc.os_type():
+ cmdline += " androidboot.hardware=gem5 qemu=1 qemu.gles=0 " + \
+ "android.bootanim=0"
+
self.boot_osflags = fillInCmdline(mdesc, cmdline)
+
self.realview.attachOnChipIO(self.membus, self.bridge)
self.realview.attachIO(self.iobus)
self.intrctrl = IntrControl()
diff --git a/configs/common/Options.py b/configs/common/Options.py
index 07059f23b..4cf1e6c5a 100644
--- a/configs/common/Options.py
+++ b/configs/common/Options.py
@@ -46,6 +46,8 @@ from Benchmarks import *
import CpuConfig
import MemConfig
+from FSConfig import os_types
+
def _listCpuTypes(option, opt, value, parser):
CpuConfig.print_cpu_list()
sys.exit(0)
@@ -241,6 +243,9 @@ def addFSOptions(parser):
# System options
parser.add_option("--kernel", action="store", type="string")
+ parser.add_option("--os-type", action="store", type="choice",
+ choices=os_types[buildEnv['TARGET_ISA']], default="linux",
+ help="Specifies type of OS to boot")
parser.add_option("--script", action="store", type="string")
parser.add_option("--frame-capture", action="store_true",
help="Stores changed frame buffers from the VNC server to compressed "\
diff --git a/configs/example/fs.py b/configs/example/fs.py
index 83b9b3267..98c7db480 100644
--- a/configs/example/fs.py
+++ b/configs/example/fs.py
@@ -314,12 +314,12 @@ if options.benchmark:
else:
if options.dual:
bm = [SysConfig(disk=options.disk_image, rootdev=options.root_device,
- mem=options.mem_size),
+ mem=options.mem_size, os_type=options.os_type),
SysConfig(disk=options.disk_image, rootdev=options.root_device,
- mem=options.mem_size)]
+ mem=options.mem_size, os_type=options.os_type)]
else:
bm = [SysConfig(disk=options.disk_image, rootdev=options.root_device,
- mem=options.mem_size)]
+ mem=options.mem_size, os_type=options.os_type)]
np = options.num_cpus