如何使用预构建的内核输出目录构建 linux 内核模块?

Posted

技术标签:

【中文标题】如何使用预构建的内核输出目录构建 linux 内核模块?【英文标题】:How to build a linux kernel module against with a prebuilt kernel output directory? 【发布时间】:2019-07-22 05:32:09 【问题描述】:

我的客户将预构建的内核输出目录发给我(他们不能向我们发布内核源代码树)。这个输出目录如下(在/home/michael/Clients/android_p_Hzh/kernel/kernel/下):

拱 阻止 内置.o 证书 ... .config 生成文件 Module.symvers source(指向我客户文件系统中本地源代码树的符号链接)

是否可以使用此目录构建我的外部模块?

/home/michael/Source/Linux/br_driver 是我的驱动程序目录。我试图在这个目录下构建我的驱动程序,如下make命令:

制作 CROSS_COMPILE=x86_64-poky-linux- -C /home/michael/Clients/android_p_Hzh/kernel/kernel/ M=pwd $1

失败,输出如下:

*** No rule to make target '/home/michael/Source/Linux/br_driver/common.o' needed by ...

br_driver下的Makefile如下:

brt-objs := $(BRTOFILES)
obj-$(DRIVER_TYPE)   += brt.o

all:
    @echo "$(MAKE) --no-print-directory -C $(KDIR) SUBDIRS=$(CURDIR) modules"
    @$(MAKE) --no-print-directory -C $(KDIR) SUBDIRS=$(CURDIR) modules

clean:
    rm -rf *.o *.ko *.mod.c *~ .*.cmd *.o.cmd .*.o.cmd \
    Module.symvers modules.order .tmp_versions modules.builtin

install:
    @$(MAKE) --no-print-directory -C $(KDIR) \
        SUBDIRS=$(CURDIR) modules_install

【问题讨论】:

是的,可以针对这样的目录构建内核模块。如果您希望我们帮助您解决您遇到的错误,您需要提供更多信息:/home/michael/Source/Linux/ 对您的机器意味着什么,br_driver 是什么,您的 Makefile 是什么样的等等。 /home/michael/Source/Linux 是我的工作区目录。 /home/michael/Source/Linux/br_driver 是我的驱动程序的源目录。我在这个目录下运行“make CROSS_COMPILE=...”。 Makefile 如下所示: ... brt-objs := $(BRTFILES) obj-$(DRIVER_TYPE) += brt.o all: @echo "$(MAKE) --no- print-directory -C $(KDIR) SUBDIRS=$(CURDIR) modules" @$(MAKE) --no-print-directory -C $(KDIR) SUBDIRS=$(CURDIR) modules clean: rm -rf .o *.ko *.mod.c *~ ..cmd .o.cmd ..o.cmd \ Module.symvers modules.order .tmp_versions modules.builtin install: @ $(MAKE) --no-print-directory -C $(KDIR) \ SUBDIRS=$(CURDIR) modules_install 需要的信息应该在问题帖中,而不是在cmets中。 (如您所见,cmets 非常适合表示多行文件和日志)。请edit您提出问题并将所有必需的信息添加到其中。 @Tsyvarev 感谢您的提醒。我已经编辑了我的问题。 【参考方案1】:

我已经解决了这个问题。我唯一需要的是 .config 和 Modules.symvers。关键操作是make oldconfigmodules_prepare

【讨论】:

以上是关于如何使用预构建的内核输出目录构建 linux 内核模块?的主要内容,如果未能解决你的问题,请参考以下文章

转载你知道 Linux 内核是如何构建的吗?

如何理解 Linux 内核模块的“构建单独的文件”?

构建调试Linux内核网络代码的环境MenuOS系统

构建调试Linux内核网络代码的环境MenuOS系统

构建调试Linux内核网络代码的环境MenuOS系统

如何编译一个内核