#!/usr/bin/env python3 # Copyright (C) 2017-2020 Vasily Galkin (galkinvv.github.io) # This file may be used and redistributed accoring to GPLv3 license. #1MB woking 1070 before mem init: \xfb\xac\xd0\xba\xff\xff\xff\xff\xfc\xac\xd0\xba\xff\xff\xff\xff (0badac??, ?? are rotating). import sys, os, mmap, random, datetime, time random.seed(12111) passed = [] def run_test(): if len(sys.argv) < 2: raise Exception("Usage: " + sys.argv[0] + " C8000000 [mb_to_test]") offset = int(sys.argv[1], 16) if len(sys.argv) >= 3: bytes_to_test = int(1024 * 1024 * float(sys.argv[2])) else: bytes_to_test = 1024 * 1024 * 32 // 8 physmem = os.open("/dev/" + os.environ.get("MEM","mem"), os.O_RDWR) #physmem = os.open("/dev/fb0", os.O_RDWR) phys_arr = mmap.mmap(physmem, bytes_to_test, offset=offset) #with open("/tmp/in", "rb") as binin: phys_arr[:]=binin.read() and sys.exit(0) #with open("/tmp/out", "wb") as binout: binout.write(phys_arr) and sys.exit(0) def bin8(byte): return "0b{:08b}".format(byte) def verify_no_errors_with_data(data, test_name): if len(phys_arr) > len(data): data += b'\x00' * (len(phys_arr) - len(data)) #print("Starting test " + test_name) phys_arr[:]=data data_possibly_modified = phys_arr[:] #time.sleep(0.5) #os.system("setfont") bad_addresses = {} all_errors = [] bad_bits = [0]*8 for i in range(0x0000, len(data)): xored_error = data[i] ^ data_possibly_modified[i] if xored_error: #and xored_error == 0b01000000: if not bad_addresses: print("first error detected at " + hex(i)) print("\\x" + "\\x".join("{:02x}".format(n) for n in data_possibly_modified[i:i+32])) #addr_file.write("{:08x}".format(i)+"\n") if xored_error not in bad_addresses: bad_addresses[xored_error] = [0, []] bad_addresses[xored_error][0] += 1 all_addresses = bad_addresses[xored_error][1] if 1: for b in range(8): if xored_error & (1<