The problem here is that modern versions of depmod produce a file that
contains only relative paths. The busybox modprobe somewhat
arbitrarily assumes that module path names start with a slash. By
removing that assumption and making sure we're sat in the
/lib/modules/<kernel-version> directory when we run we can easily
support the new format.

--- busybox/modutils/modprobe.c.orig	2008-06-25 13:51:18.000000000 +0100
+++ busybox/modutils/modprobe.c	2011-04-25 11:10:39.497854504 +0100
@@ -407,7 +407,8 @@ static struct dep_t *build_dep(void)
 				mods = bb_basename(line_buffer);
 
 				/* find the path of the module */
-				modpath = strchr(line_buffer, '/'); /* ... and this is the path */
+				/* The path name might not start with a slash. */
+				modpath = line_buffer;
 				if (!modpath)
 					modpath = line_buffer; /* module with no path */
 				/* find the end of the module name in the file name */
@@ -876,6 +878,7 @@ static int mod_remove(char *mod)
 int modprobe_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int modprobe_main(int argc, char **argv)
 {
+	struct utsname uts;
 	int rc = EXIT_SUCCESS;
 	char *unused;
 
@@ -887,6 +890,11 @@ int modprobe_main(int argc, char **argv)
 	if (option_mask32 & (RESTRICT_DIR | CONFIG_FILE))
 		bb_error_msg_and_die("-t and -C not supported");
 
+	/* goto modules location so that relative paths will work */
+	xchdir(CONFIG_DEFAULT_MODULES_DIR);
+	uname(&uts);
+	xchdir(uts.release);
+
 	depend = build_dep();
 
 	if (!depend)
