| Index: embios/trunk/tools/embios.py |
| — | — | @@ -168,7 +168,10 @@ |
| 169 | 169 | print " <priority> the priority of the thread, from 1 to 255"
|
| 170 | 170 | print " <state> the thread's initial state, valid are: 1 => ready, 0 => suspended"
|
| 171 | 171 | print ""
|
| | 172 | + print " execimage <offset>"
|
| | 173 | + print " Executes the emBIOS executable image at <offset>."
|
| 172 | 174 | print ""
|
| | 175 | + print ""
|
| 173 | 176 | print " flushcaches"
|
| 174 | 177 | print " Flushes the CPUs data and instruction caches."
|
| 175 | 178 | print ""
|
| — | — | @@ -338,7 +341,11 @@ |
| 339 | 342 | if len(argv) != 9: usage()
|
| 340 | 343 | dev.createthread(int(argv[2], 16), int(argv[3], 16), int(argv[4], 16), int(argv[5], 16), int(argv[6], 16), int(argv[7], 16), int(argv[8], 16))
|
| 341 | 344 |
|
| | 345 | + elif argv[1] == "execimage":
|
| | 346 | + if len(argv) != 3: usage
|
| | 347 | + dev.execimage(int(argv[2], 16))
|
| 342 | 348 |
|
| | 349 | +
|
| 343 | 350 | elif argv[1] == "flushcaches":
|
| 344 | 351 | if len(argv) != 2: usage()
|
| 345 | 352 | dev.flushcaches()
|
| — | — | @@ -345,6 +352,5 @@ |
| 346 | 353 |
|
| 347 | 354 | else: usage()
|
| 348 | 355 |
|
| 349 | | -
|
| 350 | 356 | dev = libembios.embios()
|
| 351 | 357 | parsecommand(dev, sys.argv)
|
| Index: embios/trunk/tools/libembios.py |
| — | — | @@ -380,7 +380,7 @@ |
| 381 | 381 |
|
| 382 | 382 |
|
| 383 | 383 | def uploadfile(self, offset, file, usedma = 1, freezesched = 0, silent = 0):
|
| 384 | | - self.__myprint("Uploading %s to 0x%8x..." % (file, offset), silent)
|
| | 384 | + self.__myprint("Uploading %s to 0x%08x..." % (file, offset), silent)
|
| 385 | 385 | f = open(file, "rb")
|
| 386 | 386 |
|
| 387 | 387 | while True:
|
| — | — | @@ -394,7 +394,7 @@ |
| 395 | 395 |
|
| 396 | 396 |
|
| 397 | 397 | def downloadfile(self, offset, size, file, usedma = 1, freezesched = 0, silent = 0):
|
| 398 | | - self.__myprint("Downloading 0x%x bytes from 0x%8x to %s..." % (size, offset, file), silent)
|
| | 398 | + self.__myprint("Downloading 0x%x bytes from 0x%08x to %s..." % (size, offset, file), silent)
|
| 399 | 399 | f = open(file, "wb")
|
| 400 | 400 |
|
| 401 | 401 | while True:
|
| — | — | @@ -410,15 +410,15 @@ |
| 411 | 411 |
|
| 412 | 412 |
|
| 413 | 413 | def uploadint(self, offset, data, silent = 0):
|
| 414 | | - self.__myprint("Uploading 0x%8x to 0x%8x..." % (data, offset), silent)
|
| | 414 | + self.__myprint("Uploading 0x%08x to 0x%08x..." % (data, offset), silent)
|
| 415 | 415 | self.write(offset, data, 0, 0)
|
| 416 | 416 | self.__myprint(" done\n", silent)
|
| 417 | 417 |
|
| 418 | 418 |
|
| 419 | 419 | def downloadint(self, offset, silent = 0):
|
| 420 | | - self.__myprint("Downloading 0x%8x from 0x%8x..." % (data, offset), silent)
|
| | 420 | + self.__myprint("Downloading 0x%08x from 0x%08x..." % (data, offset), silent)
|
| 421 | 421 | data = self.read(offset, data, 0, 0)
|
| 422 | | - self.__myprint(" done\nValue was: 0x%8x\n" % (data), silent)
|
| | 422 | + self.__myprint(" done\nValue was: 0x%08x\n" % (data), silent)
|
| 423 | 423 |
|
| 424 | 424 | return data
|
| 425 | 425 |
|
| — | — | @@ -715,10 +715,10 @@ |
| 716 | 716 |
|
| 717 | 717 | def suspendthread(self, suspend, threadid, silent = 0):
|
| 718 | 718 | if (suspend):
|
| 719 | | - self.__myprint("Suspending thread 0x%8x...", silent) % threadid
|
| | 719 | + self.__myprint("Suspending thread 0x%08x..." % threadid, silent)
|
| 720 | 720 | suspend = 1
|
| 721 | 721 | else:
|
| 722 | | - self.__myprint("Unsuspending thread 0x%8x...", silent) % threadid
|
| | 722 | + self.__myprint("Unsuspending thread 0x%08x..." % threadid, silent)
|
| 723 | 723 | suspend = 0
|
| 724 | 724 |
|
| 725 | 725 | self.handle.bulkWrite(self.__coutep, struct.pack("<IIII", 17, suspend, threadid, 0))
|
| — | — | @@ -729,7 +729,7 @@ |
| 730 | 730 |
|
| 731 | 731 |
|
| 732 | 732 | def killthread(self, threadid, silent = 0):
|
| 733 | | - self.__myprint("Killing thread 0x%8x...", silent) % threadid
|
| | 733 | + self.__myprint("Killing thread 0x%08x..." % threadid, silent)
|
| 734 | 734 |
|
| 735 | 735 | self.handle.bulkWrite(self.__coutep, struct.pack("<IIII", 18, threadid, 0, 0))
|
| 736 | 736 | response = self.__getbulk(self.handle, self.__cinep, 0x10)
|
| — | — | @@ -1002,8 +1002,8 @@ |
| 1003 | 1003 | processinfoprint += "--------------------------------------------------------------------------------"
|
| 1004 | 1004 |
|
| 1005 | 1005 | self.__myprint(" done\n\
|
| 1006 | | - Process information struct version: 0x%8x\n\
|
| 1007 | | - Total size of process information table: 0x%8x\n\
|
| | 1006 | + Process information struct version: 0x%08x\n\
|
| | 1007 | + Total size of process information table: 0x%08x\n\
|
| 1008 | 1008 | %s"
|
| 1009 | 1009 | % (out[0], out[1], procinfoprint)
|
| 1010 | 1010 | , silent)
|
| — | — | @@ -1011,7 +1011,18 @@ |
| 1012 | 1012 | return out
|
| 1013 | 1013 |
|
| 1014 | 1014 |
|
| | 1015 | + def execimage(self, offset):
|
| | 1016 | + self.__myprint("Executing emBIOS executable image at 0x%08x..." % offset, silent)
|
| | 1017 | +
|
| | 1018 | + self.handle.bulkWrite(self.__coutep, struct.pack("<IIII", 18, threadid, 0, 0))
|
| | 1019 | + response = self.__getbulk(self.handle, self.__cinep, 0x10)
|
| | 1020 | + self.__checkstatus(response)
|
| 1015 | 1021 |
|
| | 1022 | + self.__myprint(" done\n execimage() return code: 0x%08x\n" % struct.unpack("<I", response[4:8]), silent)
|
| | 1023 | +
|
| | 1024 | + return struct.unpack("<I", response[4:8])
|
| | 1025 | +
|
| | 1026 | +
|
| 1016 | 1027 | #=====================================================================================
|
| 1017 | 1028 |
|
| 1018 | 1029 |
|