如何在Linux内核构建期间生成可加载模块?

时间:2015-05-21 02:05:03

标签: linux-kernel linux-device-driver

我似乎成功构建了一个内核映像,但是我无法生成我期望的所有模块。我期待更多模块,因为我在gconfig窗口中看到它们已启用。 Here是我的make会话的副本。好像make进入了设备目录。我无法弄清楚为什么它不是创建.ko文件。我希望看到.ko文件。我已经检查了/ drivers目录下的Makefile,我可以看到它配置了许多行,比如

obj-$(CONFIG_PCI)               += pci/

例如,指示make构建pci模块。我认为这意味着我应该看到一些.ko文件。但我不。我只看到了scsi模块的一个.ko文件。我希望能够构建所有选定的模块。

我还验证了当我发布时启用了一些模块:

make VARIANT_DEFCONFIG=msm8974_sec_hlte_spr_defconfig msm8974_sec_defconfig SELINUX_DEFCONFIG=selinux_defconfig gconfig

但正如我所说,我没有看到任何一个。我错过了什么?

@Subin - 谢谢。我刚试过make modules_install。我不得不提一下,我正在为一个手臂目标进行交叉编译。我相信modules_install是为了安装你所在机器的驱动程序?我收到一条关于需要在root中的消息,但我没有继续。我一直想知道什么时候需要运行它。它到底做了什么?

Re:make模块;我以前跑了。我会再次运行它并发布结果。由于我有一个.ko文件,我认为该模块之间的问题是不同的,在我的配置中启用了每个其他模块。这是我运行make modules时得到的结果:

sansari@ubuntu:~/WORKING_DIRECTORY$ make modules
CHK     include/linux/version.h
CHK     include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
CALL    scripts/checksyscalls.sh
Building modules, stage 2.
MODPOST 1 modules

Re:您对.ko文件的位置发表评论,我正在查找是否可能找不到正确的地方,它只找到构建的那个。不是其他的。这是输出:

sansari@ubuntu:~/WORKING_DIRECTORY$ find . -type f -name "*.ko"
./drivers/scsi/scsi_wait_scan.ko
sansari@ubuntu:~/WORKING_DIRECTORY$ 

我应该运行make v = 1,在详细模式下是吗?这会提供更多关于为什么不构建其他模块的信息吗?

@Gil Hamilton - 谢谢。你是对的。以下是.config文件的摘录:

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not set
# CONFIG_CHR_DEV_OSST is not set
# CONFIG_BLK_DEV_SR is not set
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_SCH=y
CONFIG_SCSI_MULTI_LUN=y
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SCAN_ASYNC=y
CONFIG_SCSI_WAIT_SCAN=m

此条目是唯一设置为“m”的条目。

1 个答案:

答案 0 :(得分:0)

linux内核构建系统中的大多数设备驱动程序模块都使用三态(3值)配置设置。选项是

  • ' N' (根本不打造),
  • ' Y' (静态构建和链接到主内核对象)和
  • '米' (构建为动态加载的模块)。

值由.config的内容决定。 .config中的值通常是从现有的配置文件生成的(查看arch <ARCH> / configs中的<ARCH>)。还要检查&#39;制作帮助&#39;的输出。有趣的配置目标。

如果您没有看到正在创建的.ko个文件,则表示相应的配置变量已设置为&#39; y&#39;或者&#39; n&#39;。