Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset df425da in mainline


Ignore:
Timestamp:
2016-03-08T23:45:14Z (5 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
master
Children:
d4d8255
Parents:
b6bbc74
Message:

Add gem5 support to tools/ew.py.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/ew.py

    rb6bbc74 rdf425da  
    3838import autotool
    3939import platform
     40import thread
     41import time
    4042
    4143overrides = {}
     
    4648        return False
    4749
    48 def cfg_get(platform, machine):
    49         if machine == "":
     50def cfg_get(platform, machine, processor):
     51        if machine == "" or emulators[platform].has_key("run"):
    5052                return emulators[platform]
    51         else:
     53        elif processor == "" or emulators[platform][machine].has_key("run"):
    5254                return emulators[platform][machine]
     55        else:
     56                return emulators[platform][machine][processor]
    5357
    5458def run_in_console(cmd, title):
     
    142146        return ' -device intel-hda -device hda-duplex'
    143147
    144 def qemu_run(platform, machine):
    145         cfg = cfg_get(platform, machine)
     148def qemu_run(platform, machine, processor):
     149        cfg = cfg_get(platform, machine, processor)
    146150        suffix, options = platform_to_qemu_options(platform, machine)
    147151        cmd = 'qemu-' + suffix
     
    177181                        subprocess.call(cmdline, shell = True)
    178182               
    179 def ski_run(platform, machine):
     183def ski_run(platform, machine, processor):
    180184        run_in_console('ski -i contrib/conf/ski.conf', 'HelenOS/ia64 on ski')
    181185
    182 def msim_run(platform, machine):
     186def msim_run(platform, machine, processor):
    183187        hdisk_mk()
    184188        run_in_console('msim -c contrib/conf/msim.conf', 'HelenOS/mips32 on msim')
    185189
     190def gem5_console_thread():
     191        # Wait a little bit so that gem5 can create the port
     192        time.sleep(1)
     193        term = os.environ['M5_PATH'] + '/gem5/util/term/m5term'
     194        port = 3457
     195        run_in_console(term + ' %d' % port, 'HelenOS/sun4v on gem5')
     196
     197def gem5_run(platform, machine, processor):
     198        try:
     199                gem5 = os.environ['M5_PATH'] + '/gem5/build/SPARC/gem5.fast'
     200                if not os.path.exists(gem5):
     201                        raise Exception
     202        except:
     203                print("Did you forget to set M5_PATH?")
     204                raise
     205
     206        thread.start_new_thread(gem5_console_thread, ())
     207
     208        cmdline = gem5 + ' ' + os.environ['M5_PATH'] + '/configs/example/fs.py --disk-image=' + os.path.abspath('image.iso')
     209
     210        print(cmdline)
     211        if not is_override('dry_run'):
     212                subprocess.call(cmdline, shell = True)
    186213
    187214emulators = {
     
    229256        'sparc64' : {
    230257                'generic' : {
    231                         'run' : qemu_run,
    232                         'image' : 'image.iso',
    233                         'audio' : False
     258                        'us' : {
     259                                'run' : qemu_run,
     260                                'image' : 'image.iso',
     261                                'audio' : False
     262                        },
     263                        'sun4v' : {
     264                                'run' : gem5_run,
     265                        }
    234266                }
    235267        },
     
    247279        print("-nosnd\tDisable sound, if applicable.")
    248280        print("-nousb\tDisable USB support, if applicable.")
     281
     282def fail(platform, machine):
     283        print("Cannot start emulation for the chosen configuration. (%s/%s)" % (platform, machine))
     284       
    249285
    250286def run():
     
    301337                mach = ''
    302338
     339        if 'PROCESSOR' in config.keys():
     340                processor = config['PROCESSOR']
     341        else:
     342                processor = ''
     343
    303344        try:
    304                 emu_run = cfg_get(platform, mach)['run']
     345                emu_run = cfg_get(platform, mach, processor)['run']
     346                emu_run(platform, mach, processor)
    305347        except:
    306                 print("Cannot start emulation for the chosen configuration. (%s/%s)" % (platform, mach))
     348                fail(platform, mach)
    307349                return
    308350
    309         emu_run(platform, mach)
    310 
    311351run()
Note: See TracChangeset for help on using the changeset viewer.