3

给定一个使用 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 或 MakefilesrcM. 省略src确实让它找到了 Kbuild,但它无法找到实际的源文件 ( no rule to make target //path/in/build//driver.o)。

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

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

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

4

0 回答 0