blob: feecf4b6fbd82a7f6fbe163c212942e445796db6 [file] [log] [blame]
Marat Dukhane029fd42017-10-26 00:35:46 +00001#!/usr/bin/env python
2
3import os
4import sys
5import argparse
6import shutil
7
8
9parser = argparse.ArgumentParser(description='Android system files extractor')
10parser.add_argument("-p", "--prefix", metavar="NAME", required=True,
11 help="Prefix for stored files, e.g. galaxy-s7-us")
12
13
14SYSTEM_FILES = [
15 "/proc/cpuinfo",
16 "/sys/devices/system/cpu/kernel_max",
17 "/sys/devices/system/cpu/possible",
18 "/sys/devices/system/cpu/present",
19]
20
21CPU_FILES = [
22 "cpufreq/cpuinfo_max_freq",
23 "cpufreq/cpuinfo_min_freq",
24 "topology/physical_package_id",
25 "topology/core_siblings_list",
26 "topology/core_id",
27 "topology/thread_siblings_list",
28]
29
30CACHE_FILES = [
31 "allocation_policy",
32 "coherency_line_size",
33 "level",
34 "number_of_sets",
35 "shared_cpu_list",
36 "size",
37 "type",
38 "ways_of_associativity",
39 "write_policy",
40]
41
42def c_escape(string):
43 c_string = ""
44 for c in string:
45 if c == "\\":
46 c_string += "\\\\"
47 elif c == "\"":
48 c_string += "\\\""
49 elif c == "\t":
50 c_string += "\\t"
51 elif c == "\n":
52 c_string += "\\n"
53 elif c == "\r":
54 c_string += "\\r"
55 elif ord(c) == 0:
56 c_string += "\\0"
57 elif 32 <= ord(c) < 127:
58 c_string += c
59 else:
60 c_string += "x%02X" % ord(c)
61 return c_string
62
63
64def dump_system_file(stream, path):
65 try:
66 with open(path, "rb") as device_file:
67 content = device_file.read()
68 stream.write("\t{\n")
69 stream.write("\t\t.path = \"%s\",\n" % path)
70 stream.write("\t\t.size = %d,\n" % len(content))
71 if len(content.splitlines()) > 1:
72 stream.write("\t\t.content =")
73 for line in content.splitlines(True):
74 stream.write("\n\t\t\t\"%s\"" % c_escape(line))
75 stream.write(",\n")
76 else:
77 stream.write("\t\t.content = \"%s\",\n" % c_escape(content))
78 stream.write("\t},\n")
79 return True
80 except IOError:
81 pass
82
83
84def main(args):
85 options = parser.parse_args(args)
86
87 # with open(os.path.join("test", "dmesg", options.prefix + ".log"), "w") as dmesg_log:
88 # dmesg_log.write(device.Shell("dmesg"))
89 with open(os.path.join("test", options.prefix + ".h"), "w") as file_header:
90 file_header.write("struct cpuinfo_mock_file filesystem[] = {\n")
91 for path in SYSTEM_FILES:
92 dump_system_file(file_header, path)
93 for cpu in range(16):
94 for filename in CPU_FILES:
95 path = "/sys/devices/system/cpu/cpu%d/%s" % (cpu, filename)
96 dump_system_file(file_header, path)
97 for index in range(10):
98 for filename in CACHE_FILES:
99 path = "/sys/devices/system/cpu/cpu%d/cache/index%d/%s" % (cpu, index, filename)
100 dump_system_file(file_header, path)
101 file_header.write("\t{ NULL },\n")
102 file_header.write("};\n")
103 shutil.copy("/proc/cpuinfo",
104 os.path.join("test", "cpuinfo", options.prefix + ".log"))
105
106if __name__ == "__main__":
107 main(sys.argv[1:])