diff options
author | Tejun Heo <htejun@gmail.com> | 2007-12-07 07:04:30 -0500 |
---|---|---|
committer | Sam Ravnborg <sam@ravnborg.org> | 2008-01-28 17:14:35 -0500 |
commit | 551559e13af1ccd19d0525cb2b0f308905170647 (patch) | |
tree | df0cf86a47d0014747ab1c4f23bac71f384d3f4e /Makefile | |
parent | 9e233625fbee1f977929a5406533b96011f1a06b (diff) |
kbuild: implement modules.order
When multiple built-in modules (especially drivers) provide the same
capability, they're prioritized by link order specified by the order
listed in Makefile. This implicit ordering is lost for loadable
modules.
When driver modules are loaded by udev, what comes first in
modules.alias file is selected. However, the order in this file is
indeterministic (depends on filesystem listing order of installed
modules). This causes confusion.
The solution is two-parted. This patch updates kbuild such that it
generates and installs modules.order which contains the name of
modules ordered according to Makefile. The second part is update to
depmod such that it generates output files according to this file.
Note that both obj-y and obj-m subdirs can contain modules and
ordering information between those two are lost from beginning.
Currently obj-y subdirs are put before obj-m subdirs.
Sam Ravnborg cleaned up Makefile modifications and suggested using awk
to remove duplicate lines from modules.order instead of using separate
C program.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Bill Nottingham <notting@redhat.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Cc: Jon Masters <jonathan@jonmasters.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -1021,9 +1021,14 @@ ifdef CONFIG_MODULES | |||
1021 | all: modules | 1021 | all: modules |
1022 | 1022 | ||
1023 | # Build modules | 1023 | # Build modules |
1024 | # | ||
1025 | # A module can be listed more than once in obj-m resulting in | ||
1026 | # duplicate lines in modules.order files. Those are removed | ||
1027 | # using awk while concatenating to the final file. | ||
1024 | 1028 | ||
1025 | PHONY += modules | 1029 | PHONY += modules |
1026 | modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) | 1030 | modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) |
1031 | $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order | ||
1027 | @echo ' Building modules, stage 2.'; | 1032 | @echo ' Building modules, stage 2.'; |
1028 | $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost | 1033 | $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost |
1029 | 1034 | ||
@@ -1051,6 +1056,7 @@ _modinst_: | |||
1051 | rm -f $(MODLIB)/build ; \ | 1056 | rm -f $(MODLIB)/build ; \ |
1052 | ln -s $(objtree) $(MODLIB)/build ; \ | 1057 | ln -s $(objtree) $(MODLIB)/build ; \ |
1053 | fi | 1058 | fi |
1059 | @cp -f $(objtree)/modules.order $(MODLIB)/ | ||
1054 | $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst | 1060 | $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst |
1055 | 1061 | ||
1056 | # This depmod is only for convenience to give the initial | 1062 | # This depmod is only for convenience to give the initial |
@@ -1110,7 +1116,7 @@ clean: archclean $(clean-dirs) | |||
1110 | @find . $(RCS_FIND_IGNORE) \ | 1116 | @find . $(RCS_FIND_IGNORE) \ |
1111 | \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ | 1117 | \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ |
1112 | -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ | 1118 | -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ |
1113 | -o -name '*.symtypes' \) \ | 1119 | -o -name '*.symtypes' -o -name 'modules.order' \) \ |
1114 | -type f -print | xargs rm -f | 1120 | -type f -print | xargs rm -f |
1115 | 1121 | ||
1116 | # mrproper - Delete all generated files, including .config | 1122 | # mrproper - Delete all generated files, including .config |