Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


imported SEABIOS source tree
[palacios.git] / bios / seabios / tools / checkrom.py
1 #!/usr/bin/env python
2 # Script to check a bios image and report info on it.
3 #
4 # Copyright (C) 2008  Kevin O'Connor <kevin@koconnor.net>
5 #
6 # This file may be distributed under the terms of the GNU GPLv3 license.
7
8 import sys
9 import layoutrom
10
11 def main():
12     # Get args
13     objinfo, rawfile, outfile = sys.argv[1:]
14
15     # Read in symbols
16     objinfofile = open(objinfo, 'rb')
17     symbols = layoutrom.parseObjDump(objinfofile, 'in')[1]
18
19     # Read in raw file
20     f = open(rawfile, 'rb')
21     rawdata = f.read()
22     f.close()
23     datasize = len(rawdata)
24     finalsize = 64*1024
25     if datasize > 64*1024:
26         finalsize = 128*1024
27         if datasize > 128*1024:
28             finalsize = 256*1024
29
30     # Sanity checks
31     start = symbols['code32flat_start'].offset
32     end = symbols['code32flat_end'].offset
33     expend = layoutrom.BUILD_BIOS_ADDR + layoutrom.BUILD_BIOS_SIZE
34     if end != expend:
35         print "Error!  Code does not end at 0x%x (got 0x%x)" % (
36             expend, end)
37         sys.exit(1)
38     if datasize > finalsize:
39         print "Error!  Code is too big (0x%x vs 0x%x)" % (
40             datasize, finalsize)
41         sys.exit(1)
42     expdatasize = end - start
43     if datasize != expdatasize:
44         print "Error!  Unknown extra data (0x%x vs 0x%x)" % (
45             datasize, expdatasize)
46         sys.exit(1)
47
48     # Print statistics
49     runtimesize = datasize
50     if '_reloc_abs_start' in symbols:
51         runtimesize = end - symbols['code32init_end'].offset
52     print "Total size: %d  Fixed: %d  Free: %d (used %.1f%% of %dKiB rom)" % (
53         datasize, runtimesize, finalsize - datasize
54         , (datasize / float(finalsize)) * 100.0
55         , finalsize / 1024)
56
57     # Write final file
58     f = open(outfile, 'wb')
59     f.write(("\0" * (finalsize - datasize)) + rawdata)
60     f.close()
61
62 if __name__ == '__main__':
63     main()