mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-03-28 13:38:42 +00:00
86 lines
3.0 KiB
Python
86 lines
3.0 KiB
Python
from devlib.exception import TargetError
|
|
from devlib.target import KernelConfig, KernelVersion, Cpuinfo
|
|
|
|
|
|
class TargetInfo(object):
|
|
|
|
hmp_config_dir = '/sys/kernel/hmp'
|
|
|
|
def __init__(self):
|
|
self.os = None
|
|
self.kernel_version = None
|
|
self.kernel_cmdline = None
|
|
self.kernel_config = {}
|
|
self.sched_features = []
|
|
self.cpuinfo = None
|
|
self.os_version = {}
|
|
self.properties = {}
|
|
|
|
@staticmethod
|
|
def from_pod(pod):
|
|
kconfig_text = '\n'.join('{}={}'.format(k, v) for k, v in pod['kernel_config'].iteritems())
|
|
sections = []
|
|
for section in pod['cpuinfo']:
|
|
text = '\n'.join('{} : {}'.format(k, v) for k, v in section.iteritems())
|
|
sections.append(text)
|
|
cpuinfo_text = '\n\n'.join(sections)
|
|
|
|
instance = TargetInfo()
|
|
instance.os = pod['os']
|
|
instance.kernel_version = KernelVersion(pod['kernel_version'])
|
|
instance.kernel_cmdline = pod['kernel_cmdline']
|
|
instance.kernel_config = KernelConfig(kconfig_text)
|
|
instance.sched_features = pod['sched_features']
|
|
instance.cpuinfo = Cpuinfo(cpuinfo_text)
|
|
instance.os_version = pod['os_version']
|
|
instance.properties = pod['properties']
|
|
return instance
|
|
|
|
def to_pod(self):
|
|
kversion = str(self.kernel_version)
|
|
kconfig = {k: v for k, v in self.kernel_config.iteritems()}
|
|
return dict(
|
|
os=self.os,
|
|
kernel_version=kversion,
|
|
kernel_cmdline=self.kernel_cmdline,
|
|
kernel_config=kconfig,
|
|
sched_features=self.sched_features,
|
|
cpuinfo=self.cpuinfo.sections,
|
|
os_version=self.os_version,
|
|
properties=self.properties,
|
|
)
|
|
|
|
def load(self, target):
|
|
self.os = target.os
|
|
print target.is_rooted
|
|
self.os_version = target.os_version
|
|
self.kernel_version = target.kernel_version
|
|
self.kernel_cmdline = target.execute('cat /proc/cmdline',
|
|
as_root=target.is_rooted).strip()
|
|
self.kernel_config = target.config
|
|
self.cpuinfo = target.cpuinfo
|
|
try:
|
|
output = target.read_value('/sys/kernel/debug/sched_features')
|
|
self.sched_features = output.strip().split()
|
|
except TargetError:
|
|
pass
|
|
self.properties = self._get_properties(target)
|
|
|
|
def _get_properties(self, target):
|
|
props = {}
|
|
if target.file_exists(self.hmp_config_dir):
|
|
props['hmp'] = self._get_hmp_configuration(target)
|
|
if target.os == 'android':
|
|
props.update(target.getprop().iteritems())
|
|
return props
|
|
|
|
def _get_hmp_configuration(self, target):
|
|
hmp_props = {}
|
|
for entry in target.list_directory(self.hmp_config_dir):
|
|
path = target.path.join(self.hmp_config_dir, entry)
|
|
try:
|
|
hmp_props[entry] = target.read_value(path)
|
|
except TargetError:
|
|
pass
|
|
return hmp_props
|