Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python2
- import struct, sys
- ONENAND_BASE = 0x08000000
- ONENAND_REG_SIZE = 2
- class BaseRegion(object):
- def __init__(self, name, size, reserved=False):
- self.name = name
- self.size = size
- self.reserved = reserved
- def __str__(self):
- return '%s (%d)' % (self.name, self.size)
- class ReservedRegion(BaseRegion):
- def __init__(self, size):
- BaseRegion.__init__(self, 'Reserved', size, reserved=True)
- def parse(self, file, base):
- data = file.read(self.size)
- return
- # return '%s (%08x-%08x)\n' % (str(self), base, (base+self.size))
- class Register(BaseRegion):
- def __init__(self, name):
- BaseRegion.__init__(self, name, ONENAND_REG_SIZE)
- def parse(self, file, base):
- data = file.read(self.size)
- value, = struct.unpack('H', data)
- return '%08x: [%04x] %20s: %08x' % (base, ((base - ONENAND_BASE) >> 1), self.name, value)
- class DataRegion(BaseRegion):
- def parse(self, file, base):
- data = file.read(self.size)
- out = '%s\n' % str(self)
- if self.reserved:
- return out
- for i in xrange(len(data)):
- if i % 16 == 0:
- if i > 0:
- out += '\n'
- out += '%08x: ' % (base+i)
- out += '%02x ' % ord(data[i])
- out += '\n\n'
- return out
- memory_map = [
- DataRegion('BootRAM_1/2', 512 * 2),
- DataRegion('DataRAM_0', 512 * 4),
- DataRegion('DataRAM_1', 512 * 4),
- ReservedRegion(59 * 1024),
- DataRegion('BootRAM_Spare_1/2', 16 * 2),
- DataRegion('DataRAM_Spare_1', 16 * 4),
- DataRegion('DataRAM_Spare_2', 16 * 4),
- ReservedRegion(8032),
- ReservedRegion((24 + 8 + 16) * 1024),
- Register('Manufacturer ID'),
- Register('Device ID'),
- Register('Version ID'),
- Register('Data buf size'),
- Register('Boot buf size'),
- Register('Amt. buffers'),
- Register('Technology'),
- ReservedRegion(0x1f2),
- Register('Start addr. 1'),
- Register('Start addr. 2'),
- Register('Start addr. 3'),
- Register('Start addr. 4'),
- Register('Start addr. 5'),
- Register('Start addr. 6'),
- Register('Start addr. 7'),
- Register('Start addr. 8'),
- ReservedRegion(0x1f0),
- Register('Start buffer'),
- ReservedRegion(0x0c),
- ReservedRegion(0x33),
- Register('Command'),
- Register('Sysconf. 1'),
- Register('Sysconf. 2'),
- ReservedRegion(0x18),
- ReservedRegion(0x1e),
- Register('Ctrlr. status'),
- Register('Interrupt'),
- ReservedRegion(0x18),
- Register('Start blk. addr.'),
- ReservedRegion(0x2),
- Register('Write prot. status'),
- ReservedRegion(0x1962),
- Register('ECC status'),
- Register('ECC main sec. 1'),
- Register('ECC spare sec. 1'),
- Register('ECC main sec. 2'),
- Register('ECC spare sec 2'),
- Register('ECC main sec 3'),
- Register('ECC spare sec 3'),
- Register('ECC main sec 4'),
- Register('ECC spare sec 4'),
- ]
- class MemoryRegion:
- def __init__(self, base):
- self.base = base
- self.offset = 0
- self.types = []
- def add(self, type):
- self.types.append(type)
- def parse(self, file):
- for t in self.types:
- res = t.parse(file, self.base + self.offset)
- if res:
- print res
- self.offset += t.size
- if __name__ == '__main__':
- if len(sys.argv) < 2:
- print 'Usage: regparse.py <dump>'
- sys.exit(1)
- mr = MemoryRegion(ONENAND_BASE)
- map(mr.add, memory_map)
- f = open(sys.argv[1], 'rb')
- mr.parse(f)
Add Comment
Please, Sign In to add comment