All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Use modinfo to gather module dependencies
@ 2012-02-25 21:09 Dennis Schridde
  2012-02-27 10:25 ` Harald Hoyer
       [not found] ` <CALAkbJMqL-p95Yb=jsP8BZAjhJkByHn-QZV=C0nmsTkMW1qZ1Q@mail.gmail.com>
  0 siblings, 2 replies; 6+ messages in thread
From: Dennis Schridde @ 2012-02-25 21:09 UTC (permalink / raw)
  To: initramfs-u79uwXL29TY76Z2rM5mHXA


[-- Attachment #1.1: Type: text/plain, Size: 457 bytes --]

Hello!

I just switched from module-init-tools to kmod and found dracut broken, 
because it uses modprobe --show-depends to find out about module locations and 
dependencies, which apparently is not implemented in kmod.

Hence I wrote attached patch, switching from modprobe to modinfo, which also 
seem to be the tool intended for the job. This method appears to work reliable 
in kmod-5, but I have not tested with module-init-tools.

Kind regards,
Dennis

[-- Attachment #1.2: dracut-modinfo.patch --]
[-- Type: text/x-patch, Size: 1655 bytes --]

--- /usr/lib/dracut/dracut-functions.orig	2012-02-25 20:28:31.378736079 +0100
+++ /usr/lib/dracut/dracut-functions	2012-02-25 21:53:55.278987278 +0100
@@ -964,6 +964,28 @@
     return 0
 }
 
+get_kmod_filename_with_deps_recursive() {
+    local _kmod=$1 _field _value _modpath _dep _deps
+	shift 1
+    modinfo "$@" $_kmod 2>&${_fderr} | (
+		while read _field _value ; do
+			case $_field in
+				filename:)
+					_modpath=$_value
+					;;
+				depends:)
+					_deps=${_value//,/ }
+					for _dep in $_deps ; do
+						get_kmod_filename_with_deps_recursive $_dep "$@"
+					done
+					;;
+			esac
+		done
+		echo $_modpath
+		[[ $_modpath ]] || exit 1
+	)
+}
+
 # Do something with all the dependencies of a kernel module.
 # Note that kernel modules depend on themselves using the technique we use
 # $1 = function to call for each dependency we find
@@ -972,17 +994,13 @@
 # rest of args = arguments to modprobe
 # _fderr specifies FD passed from surrounding scope
 for_each_kmod_dep() {
-    local _func=$1 _kmod=$2 _cmd _modpath _options _found=0
+    local _func=$1 _kmod=$2 _modpath _found=0
     shift 2
-    modprobe "$@" --ignore-install --show-depends $_kmod 2>&${_fderr} | (
-        while read _cmd _modpath _options; do
-            [[ $_cmd = insmod ]] || continue
-            $_func ${_modpath} || exit $?
-            _found=1
-        done
-        [[ $_found -eq 0 ]] && exit 1
-        exit 0
-    )
+    for _modpath in `get_kmod_filename_with_deps_recursive ${_kmod} "$@"` ; do
+       	$_func ${_modpath}
+        _found=1
+	done
+    [[ $_found -ne 0 ]]
 }
 
 # filter kernel modules to install certain modules that meet specific

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-02-27 12:39 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-25 21:09 [PATCH] Use modinfo to gather module dependencies Dennis Schridde
2012-02-27 10:25 ` Harald Hoyer
     [not found]   ` <4F4B5A00.2060400-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-02-27 11:29     ` Colin Guthrie
2012-02-27 12:08       ` Harald Hoyer
     [not found]         ` <4F4B7237.6070005-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-02-27 12:33           ` Colin Guthrie
     [not found] ` <CALAkbJMqL-p95Yb=jsP8BZAjhJkByHn-QZV=C0nmsTkMW1qZ1Q@mail.gmail.com>
     [not found]   ` <CALAkbJMqL-p95Yb=jsP8BZAjhJkByHn-QZV=C0nmsTkMW1qZ1Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-02-27 12:39     ` Dennis Schridde

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.