def setUpClass(cls): # Create a temporary directory for test files cls._indir = tempfile.mkdtemp(prefix='cbfs_util.') tools.SetInputDirs([cls._indir]) # Set up some useful data files TestCbfs._make_input_file('u-boot.bin', U_BOOT_DATA) TestCbfs._make_input_file('u-boot.dtb', U_BOOT_DTB_DATA) TestCbfs._make_input_file('compress', COMPRESS_DATA) # Set up a temporary output directory, used by the tools library when # compressing files tools.PrepareOutputDir(None) cls.have_cbfstool = True try: tools.Run('which', 'cbfstool') except: cls.have_cbfstool = False cls.have_lz4 = True try: tools.Run('lz4', '--no-frame-crc', '-c', tools.GetInputFilename('u-boot.bin'), binary=True) except: cls.have_lz4 = False
def setUpClass(cls): # Create a temporary directory for test files cls._indir = tempfile.mkdtemp(prefix='cbfs_util.') tools.SetInputDirs([cls._indir]) # Set up some useful data files TestCbfs._make_input_file('u-boot.bin', U_BOOT_DATA) TestCbfs._make_input_file('u-boot.dtb', U_BOOT_DTB_DATA) TestCbfs._make_input_file('compress', COMPRESS_DATA) # Set up a temporary output directory, used by the tools library when # compressing files tools.PrepareOutputDir(None) cls.cbfstool = bintool.Bintool.create('cbfstool') cls.have_cbfstool = cls.cbfstool.is_present() cls.have_lz4 = comp_util.HAVE_LZ4
def setUp(self): # Create a temporary directory for test files self._indir = tempfile.mkdtemp(prefix='fip_util.') tools.SetInputDirs([self._indir]) # Set up a temporary output directory, used by the tools library when # compressing files tools.PrepareOutputDir(None) self.src_file = os.path.join(self._indir, 'orig.py') self.outname = tools.GetOutputFilename('out.py') self.args = ['-D', '-s', self._indir, '-o', self.outname] self.readme = os.path.join(self._indir, 'readme.rst') self.macro_dir = os.path.join(self._indir, 'include/tools_share') self.macro_fname = os.path.join(self.macro_dir, 'firmware_image_package.h') self.name_dir = os.path.join(self._indir, 'tools/fiptool') self.name_fname = os.path.join(self.name_dir, 'tbbr_config.c')
def test_output_dirs(self): """Test outputting files to a directory""" # Remove the directory so that files from other tests are not there tools._RemoveOutputDir() tools.PrepareOutputDir(None) # This should create the .dts and .dtb in the output directory dtb_file = get_dtb_file('dtoc_test_simple.dts') outdir = tools.GetOutputDir() fnames = glob.glob(outdir + '/*') self.assertEqual(2, len(fnames)) dtb_platdata.run_steps(['all'], dtb_file, False, None, [outdir], True) fnames = glob.glob(outdir + '/*') self.assertEqual(4, len(fnames)) leafs = set(os.path.basename(fname) for fname in fnames) self.assertEqual( {'dt-structs-gen.h', 'source.dts', 'dt-plat.c', 'source.dtb'}, leafs)
def setUpClass(cls): tools.PrepareOutputDir(None) cls.maxDiff = None
def Binman(args): """The main control code for binman This assumes that help and test options have already been dealt with. It deals with the core task of building images. Args: args: Command line arguments Namespace object """ global Image global state if args.full_help: pager = os.getenv('PAGER') if not pager: pager = 'more' fname = os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])), 'README') command.Run(pager, fname) return 0 # Put these here so that we can import this module without libfdt from binman.image import Image from binman import state if args.cmd in ['ls', 'extract', 'replace']: try: tout.Init(args.verbosity) tools.PrepareOutputDir(None) if args.cmd == 'ls': ListEntries(args.image, args.paths) if args.cmd == 'extract': ExtractEntries(args.image, args.filename, args.outdir, args.paths, not args.uncompressed) if args.cmd == 'replace': ReplaceEntries(args.image, args.filename, args.indir, args.paths, do_compress=not args.compressed, allow_resize=not args.fix_size, write_map=args.map) except: raise finally: tools.FinaliseOutputDir() return 0 # Try to figure out which device tree contains our image description if args.dt: dtb_fname = args.dt else: board = args.board if not board: raise ValueError('Must provide a board to process (use -b <board>)') board_pathname = os.path.join(args.build_dir, board) dtb_fname = os.path.join(board_pathname, 'u-boot.dtb') if not args.indir: args.indir = ['.'] args.indir.append(board_pathname) try: tout.Init(args.verbosity) elf.debug = args.debug cbfs_util.VERBOSE = args.verbosity > 2 state.use_fake_dtb = args.fake_dtb try: tools.SetInputDirs(args.indir) tools.PrepareOutputDir(args.outdir, args.preserve) tools.SetToolPaths(args.toolpath) state.SetEntryArgs(args.entry_arg) images = PrepareImagesAndDtbs(dtb_fname, args.image, args.update_fdt) missing = False for image in images.values(): missing |= ProcessImage(image, args.update_fdt, args.map, allow_missing=args.allow_missing) # Write the updated FDTs to our output files for dtb_item in state.GetAllFdts(): tools.WriteFile(dtb_item._fname, dtb_item.GetContents()) if missing: tout.Warning("Some images are invalid") finally: tools.FinaliseOutputDir() finally: tout.Uninit() return 0
def setUpClass(cls): tools.PrepareOutputDir(None)
def setUpClass(self): self._binman_dir = os.path.dirname(os.path.realpath(sys.argv[0])) self._indir = tempfile.mkdtemp(prefix='binmant.') tools.PrepareOutputDir(self._indir, True)
def setUp(self): tools.PrepareOutputDir(None)
def Binman(args): """The main control code for binman This assumes that help and test options have already been dealt with. It deals with the core task of building images. Args: args: Command line arguments Namespace object """ global Image global state if args.full_help: tools.PrintFullHelp( os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])), 'README.rst') ) return 0 # Put these here so that we can import this module without libfdt from binman.image import Image from binman import state if args.cmd in ['ls', 'extract', 'replace']: try: tout.Init(args.verbosity) tools.PrepareOutputDir(None) if args.cmd == 'ls': ListEntries(args.image, args.paths) if args.cmd == 'extract': ExtractEntries(args.image, args.filename, args.outdir, args.paths, not args.uncompressed) if args.cmd == 'replace': ReplaceEntries(args.image, args.filename, args.indir, args.paths, do_compress=not args.compressed, allow_resize=not args.fix_size, write_map=args.map) except: raise finally: tools.FinaliseOutputDir() return 0 # Try to figure out which device tree contains our image description if args.dt: dtb_fname = args.dt else: board = args.board if not board: raise ValueError('Must provide a board to process (use -b <board>)') board_pathname = os.path.join(args.build_dir, board) dtb_fname = os.path.join(board_pathname, 'u-boot.dtb') if not args.indir: args.indir = ['.'] args.indir.append(board_pathname) try: tout.Init(args.verbosity) elf.debug = args.debug cbfs_util.VERBOSE = args.verbosity > 2 state.use_fake_dtb = args.fake_dtb # Normally we replace the 'u-boot' etype with 'u-boot-expanded', etc. # When running tests this can be disabled using this flag. When not # updating the FDT in image, it is not needed by binman, but we use it # for consistency, so that the images look the same to U-Boot at # runtime. use_expanded = not args.no_expanded try: tools.SetInputDirs(args.indir) tools.PrepareOutputDir(args.outdir, args.preserve) tools.SetToolPaths(args.toolpath) state.SetEntryArgs(args.entry_arg) state.SetThreads(args.threads) images = PrepareImagesAndDtbs(dtb_fname, args.image, args.update_fdt, use_expanded) if args.test_section_timeout: # Set the first image to timeout, used in testThreadTimeout() images[list(images.keys())[0]].test_section_timeout = True missing = False for image in images.values(): missing |= ProcessImage(image, args.update_fdt, args.map, allow_missing=args.allow_missing) # Write the updated FDTs to our output files for dtb_item in state.GetAllFdts(): tools.WriteFile(dtb_item._fname, dtb_item.GetContents()) if missing: tout.Warning("\nSome images are invalid") # Use this to debug the time take to pack the image #state.TimingShow() finally: tools.FinaliseOutputDir() finally: tout.Uninit() return 0