2019-02-18 22:58:32 +00:00
#!/usr/bin/env python3
import argparse
2018-03-09 19:17:16 +00:00
from ftplib import FTP
from os import stat
2019-02-18 22:58:32 +00:00
parser = argparse . ArgumentParser ( description = ' Tool to boot AVM EVA ramdisk images. ' )
parser . add_argument ( ' ip ' , type = str , help = ' IP-address to transfer the image to ' )
parser . add_argument ( ' image ' , type = str , help = ' Location of the ramdisk image ' )
parser . add_argument ( ' --offset ' , type = lambda x : int ( x , 0 ) , help = ' Offset to load the image to in hex format with leading 0x. Only needed for non-lantiq devices. ' )
args = parser . parse_args ( )
2018-03-09 19:17:16 +00:00
2019-02-18 22:58:32 +00:00
size = stat ( args . image ) . st_size
2018-03-09 19:17:16 +00:00
# arbitrary size limit, to prevent the address calculations from overflows etc.
assert size < 0x2000000
2019-02-18 22:58:32 +00:00
if args . offset :
addr = size
haddr = args . offset
else :
# We need to align the address.
# A page boundary seems to be sufficient on 7362sl and 7412
addr = ( ( 0x8000000 - size ) & ~ 0xfff )
haddr = 0x80000000 + addr
2018-03-09 19:17:16 +00:00
2019-02-18 22:58:32 +00:00
img = open ( args . image , " rb " )
ftp = FTP ( args . ip , ' adam2 ' , ' adam2 ' )
2018-03-09 19:17:16 +00:00
def adam ( cmd ) :
print ( " > %s " % ( cmd ) )
resp = ftp . sendcmd ( cmd )
print ( " < %s " % ( resp ) )
assert resp [ 0 : 3 ] == " 200 "
ftp . set_pasv ( True )
# The following parameters allow booting the avm recovery system with this
# script.
adam ( ' SETENV memsize 0x %08x ' % ( addr ) )
adam ( ' SETENV kernel_args_tmp mtdram1=0x %08x ,0x88000000 ' % ( haddr ) )
adam ( ' MEDIA SDRAM ' )
ftp . storbinary ( ' STOR 0x %08x 0x88000000 ' % ( haddr ) , img )
img . close ( )
ftp . close ( )