This patchset implements dynamic pegging of kconfig symbol into driver modinfo section
* updates streamline_config.pl to generate the auxiliary file scripts/mod/Module.ksymb containing associations of driver file names and corresponding kconfig symbols CONFIG_* * updates Makefiles to trigger streamline_config.pl call for Module.ksymb generation and pass the determined CONFIG_* symbol as compilation parameter -D in KBUILD_KSYMB variable * adds kconfig_symb as module attribute * updates modpost to set KBUILD_KSYMB macro as value for kbuild_symb attribute Note: the content of the file Module.ksymb is generated for all modules that have only one associate CONFIG option. All others are considered to be components linked at the final modules but not final modules itselves. The result of this patchset is the following. All modules from /sys expose the correct CONFIG_* symbol in the module attribute kconfig_symb with some exceptions. For a total number of 58 modules, 4 of them do not: snd_seq_midi_event mptscsih libahci mptbase After a short research: For mptscsih - ./drivers/message/fusion/Makefile obj-$(CONFIG_FUSION_SPI) += mptbase.o mptscsih.o mptspi.o obj-$(CONFIG_FUSION_FC) += mptbase.o mptscsih.o mptfc.o obj-$(CONFIG_FUSION_SAS) += mptbase.o mptscsih.o mptsas.o As appears in the Makefile mptscsi is part of more config options so it's excluded because it's not considered a module by itself but, somehow gets compiled as module. Same for the mptbase. I still have to understand better the Kbuild logic so I cannot state that this is loose practice. For libahci there are multiple CONFIG_ symbols for different architectures. Although past discussion recommended not to use streamline_config, this patchset still relies on it, for the sake of the proof of concept. Although the result is close to the target it still does not provide complete correctness. However it can be replaced by creating another script which tries to determine better the module <-> CONFIG associations and output them in auxiliary file Module.ksymb. Maybe this way we could also determine all CONFIGs for a particular driver, not only the exact one that enables it. The auxiliary file is necessary because the Makefile itself does not have a mapping. The makefile includes the config file with directive include which creates a series of internal variables CONFIG_FOO=y/m/n. Afterwards, when recursively descending into other Makefiles, lines like obj-$(CONFIG_FOO) = foo.o are resolved in place to obj-y, obj-m etc according to 'make' logic and the association is lost. Finally, what does this patchset provide is an infrastructure to dinamically peg CONFIG_* options to associate drivers using the mapping from Module.ksymb file. Generation of Module.ksymb can be replaced but keeping the same format permit the usage of the other patches. This patchset is part of a research project within Google Summer of Code of porting 'make localmodconfig' for backported drivers. The goal is to enable each module to expose in /sys its corresponding CONFIG_* option. The value of this attribute will be dynamically pegged by modpost without requiring extra work from the driver developers. Further, this information will be used by a hardware interogation tool to extract build information about the existing devices. Cristina Moraru (5): Add generation of Module.symb in streamline_config Add CONFIG symbol to module as compilation parameter Trigger Module.ksymb generation in Makefile Set KCONFIG_KSYMB as value for kconfig_ksymb module attribute Add kconf_symb as kernel module attribute Makefile | 4 ++++ include/linux/module.h | 1 + kernel/module.c | 2 ++ scripts/Makefile.lib | 9 ++++++++- scripts/kconfig/streamline_config.pl | 30 +++++++++++++++++++++++++++++- scripts/mod/modpost.c | 7 +++++++ 6 files changed, 51 insertions(+), 2 deletions(-) -- 2.7.4