1.在mod-subdirs 中加入模块文件夹名
2.按照如下模式添加子目录配置项
subdir-$(CONFIG_MMC) += mmc
注:CONFIG_MMC在Config.in文件中被定义,且当你配置内核时会给其赋值。
3.模块文夹中的Config.in文件简单范例
#
# MMC subsystem configuration
#
mainmenu_option next_comment
comment 'MMC/SD Card support'
tristate 'MMC support' CONFIG_MMC
if [ "$CONFIG_MMC" = "y" -o "$CONFIG_MMC" = "m" ]; then
bool ' MMC debugging' CONFIG_MMC_DEBUG
if [ "$CONFIG_MMC_DEBUG" = "y" ]; then
int ' MMC debugging verbosity (0=quiet, 3=noisy)' CONFIG_MMC_DEBUG_VERBOSE 0
fi
if [ "$CONFIG_MMC_S3C2410" = "y" -o "$CONFIG_ARCH_H5400" = "y" -o "$CONFIG_ARCH_H2200" = "y" ] ; then
tristate ' Samsung MMC ASIC Support' CONFIG_MMC_SAMSUNG_ASIC
dep_tristate ' S3C2410 SD/MMC Support' CONFIG_MMC_S3C2410 $CONFIG_MMC_SAMSUNG_ASIC $CONFIG_ARCH_S3C2410
dep_tristate ' H5400 SD/MMC Support' CONFIG_MMC_H5400 $CONFIG_MMC_SAMSUNG_ASIC $CONFIG_ARCH_H5400
dep_tristate ' ASIC3 SD/MMC support' CONFIG_MMC_ASIC3 $CONFIG_IPAQ_HAS_ASIC3
fi
fi
endmenu
4.模块文件中Makefile简单范例
#
# Makefile for the kernel mmc device drivers.
#
O_TARGET := mmc.o
export-objs := mmc_core.o mmc_samsung.o
obj-$(CONFIG_MMC) += mmc_base.o
obj-$(CONFIG_MMC_SAMSUNG_ASIC) += mmc_samsung.o
obj-$(CONFIG_MMC_S3C2410) += mmc_s3c2410.o
obj-$(CONFIG_MMC_H5400) += mmc_h5400.o
obj-$(CONFIG_MMC_ASIC3) += mmc_asic3.o
# Declare multi-part drivers.
list-multi := mmc_base.o
mmc_base-objs := mmc_protocol.o mmc_core.o mmc_media.o
include $(TOPDIR)/Rules.make
# Link rules for multi-part drivers.
mmc_base.o: $(mmc_base-objs)
$(LD) -r -o $@ $(mmc_base-objs)
5.当我们把上面的都添加了以后,运行make munuconfig命令的时候在主目录下我们依然看不到mmc的选项。原因是没有把Config.in文件导入现在的系统配置中。不同的cpu结构有
不同的系统导入点。这个导入点在arch目录的CPU结构体目录下,例如选择ARM结构,那么需要在arch/arm/config.in 中指定mmc这个Config.in :source drivers/mmc/Config.in
==========================================================================
上面我们是在主目录下添加模块,下面介绍在子目录下添加小模块的方法:
举例:
我们要在char目录下添加led模块。需要修改的文件只有两个:drivers/char/Config.in和drivers/char/Makefile
1.在drivers/char/Config.in文件中添加:
dep_tristate 'S3C2410 LED support' CONFIG_S3C2410_GPIO_LED
$CONFIG_ARCH_S3C2410
含义:CONFIG_ARCH_S3C2410只要被定义为Y或M,在字符设备分类下就会出现S3C2410 LED support选项,它对应了CONFIG_S3C2410_GPIO_LED的定义。定义为模块时
CONFIG_S3C2410_GPIO_LED为M,定义为连接到内核中CONFIG_S3C2410_GPIO_LED为y。
2.在drivers/char/Makefile文件中添加:
obj-$(CONFIG_S3C2410_GPIO_LED) += s3c2410_led.o
含义:Makefile会根据obj-m和obj-y编译并连接对应的源码。
3.make modules SUBDIRS=drivers/char
只编译drivers/char目录下的模块。