目录
gem5: Creating a very simple SimObject
背景
在上述教程中,主要介绍了类的开发思路,但是对其中涉及到要修改的文件并没有详细说明。可能有的同学即使看了
本文主要按照最基本的思路以及本人画的一个修改路线的visio图(早期),比较利于刚开始不知道如何下手的同学。
【注】:这部分比较简单,所以gem5社区教程中原始版本并没有留存简单版本代码【最早的应该是下一个教程gem5: Event-driven programming】,所以我基于教程中的HelloSimobject类给出简单版源码。
一、涉及到的5个文件
文件修改过程是按照下述顺序。
其中文件1-4应该在同一目录中(例如gem5/src/learning_gem5/part2中,是为了方便引入和修改其他的头文件内容),然后文件5<run_hello.py>在其他的目录(例如gem5/config/中)。
- HelloObject.py【类的定义和成员变量初始化,主要描述可以从python配置文件中控制的SimObject参数】
- hello_object.hh【类的声明,成员函数的声明和定义】(declare our class)
- hello_object.cc【实现.hh文件中声明的类】
- SConscript【在构建过程中将模块、SimObject定义和源代码文件添加到gem5模拟器中】gem5/config/dsic/
- run_hello.py(前面几个步骤已经实现了一个SimObject,并将其编译到gem5中)【创建python脚本,实例化新SimObject,并开启模拟过程】
二、5个文件的具体内容
1、HelloObject.py
from m5.params import *
from m5.SimObject import SimObject
class HelloObject(SimObject):
type = 'HelloObject'
cxx_header = "learning_gem5/part2/hello_object.hh"
cxx_class = "gem5::HelloObject"
2、hello_object.hh
#ifndef __LEARNING_GEM5_HELLO_OBJECT_HH__
#define __LEARNING_GEM5_HELLO_OBJECT_HH__
#include "params/HelloObject.hh"
#include "sim/sim_object.hh"
namespace gem5
{
class HelloObject : public SimObject
{
public:
HelloObject(const HelloObjectParams &p);
};
} // namespace gem5
#endif // __LEARNING_GEM5_HELLO_OBJECT_HH__
3、hello_object.cc
#include "learning_gem5/part2/hello_object.hh"
#include <iostream>
namespace gem5
{
HelloObject::HelloObject(const HelloObjectParams ¶ms) :
SimObject(params)
{
std::cout << "Hello World! From a SimObject!" << std::endl;
}
} // namespace gem5
4、SConscript
如果没有这个文件的话,就需要新建一个。
如果已经有这个文件,需要新增的HelloObject类的相关信息。
Import('*')
SimObject('HelloObject.py', sim_objects=['HelloObject'])
Source('hello_object.cc')
5、run_hello.py
import m5
from m5.objects import *
root = Root(full_system = False)
root.hello = HelloObject()
m5.instantiate()
print("Beginning simulation!")
exit_event = m5.simulate()
print('Exiting @ tick {} because {}'
.format(m5.curTick(), exit_event.getCause()))
三、对新建HelloObject类进行测试
1、(re)-build gem5.debug
scons build/X86/gem5.debug
如果对src中的.cc文件进行修改后,都需要重新编译。
由于gem5支持增量编译,如果修改部分文件的话就不会耗费太长时间。
2、运行run_hello.py
build/X86/gem5.debug config/run_hello.py