import json import subprocess import sys from pathlib import Path skipped_keys = [ 'sig_id', 'signer', 'sig_key', 'sig_hashalgo', 'signature', 'srcversion', 'vermagic', 'filename', 'license', 'author', ] if __name__ == '__main__': kversion: str = sys.argv[1] modules: list = [] for module in Path(f"/lib/modules/{kversion}").rglob("*.ko*"): cmd = ["modinfo", module.absolute()] sp = subprocess.run(cmd, capture_output=True) obj: dict = {} key: str = "" for line in sp.stdout.decode('utf8').split("\n"): if line.find("\t") == 0: continue if line.find(":") == -1: continue key, value = line.split(":", 1) value = value.strip() if value == "": value = None if value is None: continue if key in skipped_keys: continue if key in ['depends']: if line.find(",") != -1: value = value.split(",") if key in ['intree', 'retpoline']: if value == "Y": value = True else: value = False if key not in obj: obj[key] = value else: if not isinstance(obj[key], list): obj[key] = [obj[key]] obj[key].append(value) if 'parm' in obj: parms = {} if isinstance(obj['parm'], str): obj['parm'] = [obj['parm']] for i in obj['parm']: k, v = i.split(":", 1) v = v.strip() parms[k] = v obj['parm'] = parms modules.append(obj) print(json.dumps(modules, indent=" "))