Hi,
I am trying to run ARM FS with ruby. The error I have now is the following:
gem5.debug: build/ARM/mem/ruby/system/RubyPort.cc:418: virtual void
RubyPort::M5Port::recvFunctional(PacketPtr): Assertion
`ruby_port->pio_port.isConnected()' failed.
Program aborted at cycle 0
Aborted
Clearly I messed up some port connection, but I can't find it. I was having
problem in hooking up a dma device, then I think I don't have to use a dma
device (do I?). The following is the class that create an ARM system with
ruby. Can someone please help point out what goes wrong? Thank you.
def makeArmRubySystem(mem_mode, machine_type, mdesc = None, bare_metal =
False):
assert machine_type
if bare_metal:
self = ArmSystem()
else:
self = LinuxArmSystem()
if not mdesc:
# generic system
mdesc = SysConfig()
self.readfile = mdesc.script()
# Create pio bus to connect all device pio ports to rubymem's pio port
self.piobus = Bus(bus_id=0)
self.mem_mode = mem_mode
if machine_type == "RealView_PBX": #default
self.realview = RealViewPBX()
elif machine_type == "RealView_EB":
self.realview = RealViewEB()
elif machine_type == "VExpress_ELT":
self.realview = VExpress_ELT()
else:
print "Unknown Machine Type"
sys.exit(1)
print machine_type
self.cf0 = CowIdeDisk(driveID='master')
self.cf0.childImage(mdesc.disk())
# default to an IDE controller rather than a CF one
# assuming we've got one
try:
self.realview.ide.disks = [self.cf0]
except:
self.realview.cf_ctrl.disks = [self.cf0]
if bare_metal:
# EOT character on UART will end the simulation
self.realview.uart.end_on_eot = True
self.physmem = PhysicalMemory(range = AddrRange(Addr(mdesc.mem())),
zero = True)
else:
self.kernel = binary('vmlinux.smp.mouse.arm')
self.machine_type = machine_type
if convert.toMemorySize(mdesc.mem()) > int(self.realview.max_mem_size):
print "The currently implemented ARM platforms only support 256MB of DRAM"
sys.exit(1) # can be removed to explore more memory space
boot_flags = 'earlyprintk console=ttyAMA0 lpj=19988480 norandmaps ' + \
'rw loglevel=8 mem=%s root=/dev/sda1' % mdesc.mem()
self.physmem = PhysicalMemory(range =
AddrRange(self.realview.mem_start_addr, size = mdesc.mem()), zero = True)
self.nvmem = PhysicalMemory(range = AddrRange(Addr('2GB'), size =
'64MB'), zero = True)
self.nvmem.port = self.piobus.master
self.boot_loader = binary('boot.arm')
self.boot_loader_mem = self.nvmem
self.gic_cpu_addr = self.realview.gic.cpu_addr
self.flags_addr = self.realview.realview_io.pio_addr + 0x30
if mdesc.disk().count('android'): # with lower()???
boot_flags += "init=/init "
self.boot_osflags = boot_flags
self.physmem.port = self.piobus.master
# Attach I/ O devices that are on chip
self.realview.gic.pio = self.piobus.master
self.realview.l2x0_fake.pio = self.piobus.master
self.realview.a9scu.pio = self.piobus.master
self.realview.local_cpu_timer.pio = self.piobus.master
self.realview.attachIO(self.piobus)
self.intrctrl = IntrControl()
self.terminal = Terminal()
self.vncserver = VncServer()
#self.system_port = self.piobus.slave # we need this???
return self
-Tony
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users