1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
Что можем сделать с помощью Depthcharge Подключаться к UART и обнаруживать командную строку UBoot Выполнять считывание и запись в SPI flash с помощю команд rksfc read/write Выполнять считывание и запись на USB-накопитель при помощи команд USB read/write pip install depthcharge Подключение: def console_setup(): console=Console("/dev/ttyS0",baudrate=115200) ctx = Depthcharge(console,arch="arm") return ctx Считывание и запись во флэш-память при помощи depthcharge: def rksfc_read(ctx,dest_addr,src_addr,size): cmd_str = f"rksfc read 0x{dest_addr:02x} 0x{src_addr:02x} 0x{size:02x}" resp = ctx.send_command(cmd_str) return resp def rksfc_write(ctx,dest_addr,src_addr,size): cmd_str = f"rksfc write 0x{dest_addr:02x} 0x{src_addr:02x} 0x{size:02x}" resp = ctx.send_command(cmd_str) time.sleep(10) return resp Считывание и запись на USB при помощи depthcharge: ''' usb_setup This script is used to enumerate and set up the USB port ''' def usb_setup(ctx,reset=False): resps = [] if not reset: resp = ctx.send_command("usb start") else: resp = ctx.send_command("usb reset") resps.append(resp) resp = ctx.send_command("usb storage") resps.append(resp) resp = ctx.send_command("usb dev 0") resps.append(resp) return resps ''' USB write addr blk# cnt - write `cnt' blocks starting at block `blk#' from memory address `addr' ''' def usb_raw_write(ctx,source_addr,block,size): cmd = f"usb write 0x{source_addr:x} 0x{block:x} 0x{size:x}" resp = ctx.send_command(cmd) return resp ''' USB read addr blk# cnt - read `cnt' blocks starting at block `blk#' to memory address `addr' ''' def usb_raw_read(ctx,source_addr,block,size): cmd = f"usb read 0x{source_addr:x} 0x{block:x} 0x{size:x}" resp = ctx.send_command(cmd) return resp Дамп флэш-памяти при помощи Depthcharge if __name__ == "__main__": log.info("Marvel Super Heroes Depthcharge Test...") ctx = console_setup() usb_setup(ctx,reset=False) # Read the SPI flash into RAM rksfc_read(ctx,TARGET_RAM_ADDR,0,0x35E00) log.info("Flash read into RAM") # Write the data from RAM to a USB drive usb_raw_write(ctx,TARGET_RAM_ADDR,0,0x35E00) log.info("Flash written to USB") |