通过autoconf

时间:2017-04-27 04:28:52

标签: linux makefile linux-kernel autoconf kbuild

给定一个使用autoconf(配置脚本)来提供用户模式应用程序和内核驱动程序的软件包,其目录结构如下:

configure.ac
configure
Makefile.am
user
    Makefile.am
    user.c
driver
    Makefile.am
    Kbuild.in
    driver.c

这在本地配置时成功配置和构建用户和驱动程序(运行./configure --options)。

然而,配置脚本的一个有用功能是,您可以拥有一个单独的源和构建目录,只需从构建目录运行脚本,例如:

mkdir build && cd build && ../configure --options

这适用于用户应用程序,但我在此上下文中无法获取内核驱动程序。在驱动程序Makefile.am中,我按照this answer的建议提供了以下内容:

modules:
    $(MAKE) -C "$(LINUX_SOURCE_DIR)" M="@abs_builddir@" src="@abs_srcdir@" modules

但这无法编译,因为它期望Kbuild或Makefile位于src,但它们实际上在M。省略src会让它找到Kbuild,但它无法找到实际的源文件(no rule to make target //path/in/build//driver.o)。

使用O=作为其他一些答案提示不正确,因为这指定了查找内核的输出文件(.config等)的路径,这些仍然在LINUX_SOURCE_DIR。 (因此,尝试使用它会导致各种其他丢失文件错误。)

我希望找到一个不需要修改任何实际Kbuild脚本的解决方案,因为这些脚本不在我的包的控制之内。

到目前为止,我提出的最佳选择是在调用Kbuild之前将所有模块源文件复制/链接到构建目录中,这并不理想。我希望有一个可用于此的隐藏设置。

0 个答案:

没有答案