Skip to content

Commit 1994898

Browse files
committed
moved firmware pulling/module dependency addition to build time
Signed-off-by: Zen <[email protected]>
1 parent 63f57d8 commit 1994898

File tree

2 files changed

+25
-16
lines changed

2 files changed

+25
-16
lines changed

ugrd/kmod/kmod.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -59,17 +59,6 @@ def _process_kernel_modules_multi(self, module: str) -> None:
5959
else:
6060
dependencies += sofdeps
6161

62-
if firmware := modinfo.get('firmware'):
63-
if self.get('kmod_pull_firmware'):
64-
self.logger.info("[%s] Adding firmware to dependencies: %s" % (module, firmware))
65-
for file in firmware:
66-
try:
67-
self['dependencies'] = Path('/lib/firmware/') / file
68-
except FileNotFoundError:
69-
self.logger.warning("[%s] Unable to find referenced firmware file: %s" % (module, file))
70-
else:
71-
self.logger.warning("Firmware was detected, but is being ignored: %s" % firmware)
72-
7362
for dependency in dependencies:
7463
if dependency in self['kmod_ignore']:
7564
self.logger.error("Kernel module dependency is in ignore list: %s" % dependency)
@@ -101,12 +90,10 @@ def _get_kmod_info(self, module: str):
10190
Runs modinfo on a kernel module, parses the output and stored the results in self.config_dict['_kmod_modinfo']
10291
"""
10392
if module in self['_kmod_modinfo']:
104-
self.logger.debug("Module info already exists for: %s" % module)
93+
self.logger.log(5, "Module info already exists for: %s" % module)
10594
return
10695

107-
self.logger.debug("Getting modinfo for: %s" % module)
10896
args = ['modinfo', module]
109-
11097
# Set kernel version if it exists, otherwise use the running kernel
11198
if self.get('kernel_version'):
11299
args += ['--set-version', self['kernel_version']]
@@ -247,12 +234,34 @@ def calculate_modules(self) -> None:
247234

248235
if self.config_dict['_kmod_depend']:
249236
self.logger.info("Adding internal dependencies to kmod_init: %s" % self.config_dict['_kmod_depend'])
250-
self.config_dict['kmod_init'] = self.config_dict['_kmod_depend']
237+
self.config_dict['kmod_init'] = self.config_dict['_kmod_depend'].copy() # Copy because _kmood_depend may shrink during iteration
251238

252239
self.logger.info("Included kernel modules: %s" % self.config_dict['kernel_modules'])
253240
process_module_metadata(self)
254241

255242

243+
def process_modules(self) -> None:
244+
"""
245+
Processes all kernel modules, adding dependencies to the initramfs
246+
"""
247+
for kmod in self.config_dict['kernel_modules']:
248+
self.logger.debug("Processing kernel module: %s" % kmod)
249+
modinfo = self.config_dict['_kmod_modinfo'][kmod]
250+
# Add the module itself to the dependencies
251+
self.config_dict['dependencies'] = Path(modinfo['filename'])
252+
# If the module has firmware, add it to the dependencies
253+
if firmware := modinfo.get('firmware'):
254+
if self.get('kmod_pull_firmware'):
255+
self.logger.info("[%s] Adding firmware to dependencies: %s" % (kmod, firmware))
256+
for file in firmware:
257+
try:
258+
self['dependencies'] = Path('/lib/firmware/') / file
259+
except FileNotFoundError:
260+
self.logger.warning("[%s] Unable to find referenced firmware file: %s" % (kmod, file))
261+
else:
262+
self.logger.warning("Firmware was detected, but is being ignored: %s" % firmware)
263+
264+
256265
def load_modules(self) -> None:
257266
"""
258267
Creates a bash script which loads all kernel modules in kmod_init

ugrd/kmod/kmod.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ _kmod_modinfo = "dict" # Used internally, caches modinfo output for kernel modul
2121
"ugrd.kmod.kmod" = [ "_process_kmod_init_multi", "_process_kernel_modules_multi", "_process_kmod_ignore_multi" ]
2222

2323
[imports.build_pre]
24-
"ugrd.kmod.kmod" = [ "calculate_modules" ]
24+
"ugrd.kmod.kmod" = [ "calculate_modules", "process_modules" ]
2525

2626
[imports.init_pre]
2727
"ugrd.kmod.kmod" = [ "load_modules" ]

0 commit comments

Comments
 (0)