def handle_blkdev(self, blkdev): n = len(self.opts) if n == 0: print("Usage: boot ( show [hex] [asm] | read <file> | write <file> | install [boot1x] | clear )") return 1 cmd = self.opts[0] # fetch boot blcok bb = BootBlock(blkdev, 0) bb.read() # boot show [hex] [asm] if cmd == 'show': bb.dump() if bb.valid and bb.boot_code != None: if 'hex' in self.opts: print_hex(bb.boot_code) if 'asm' in self.opts: dis = DisAsm() code = dis.disassemble(bb.boot_code) dis.dump(code) return 0 # boot read <file> elif cmd == 'read': if n > 1: if bb.valid: if bb.boot_code != None: f = open(self.opts[1], "wb") f.write(bb.boot_code) f.close() return 0 else: print("No Boot Code found!") return 2 else: print("Invalid Boot Block!") return 1 else: print("No file name!") return 1 # boot write <file> elif cmd == 'write': if n > 1: f = open(self.opts[1], "rb") data = f.read() f.close() ok = bb.set_boot_code(data) if ok: bb.write() return 0 else: print("Boot Code invalid!") return 2 else: print("No file name!") return 1 # boot install [<name>] elif cmd == 'install': if n == 1: # default boot code name = "boot2x3x" else: name = self.opts[1] # boot code directory bc_dir = bb.get_boot_code_dir() if bc_dir == None: print("No boot code directory found!") return 1 path = os.path.join(bc_dir, name + ".bin") if not os.path.exists: print("Boot code '%s' not found!" % path) return 1 # read data f = open(path,"rb") data = f.read() f.close() ok = bb.set_boot_code(data) if ok: bb.write() return 0 else: print("Boot Code invalid!") return 2 # boot clear elif cmd == 'clear': bb.set_boot_code(None) bb.write() return 0 # boot ? else: print("Unknown boot command!") return 1