1

我想重定向我的模块构建的输出以将工件与源隔离。

我的makefile看起来像:

    obj-m += hello-1.o

all:
    make ARCH=arm CROSS_COMPILE=arm-eabi- -C /work/TI-Android-ICS-4.0.3_AM37x_3.0.0/kernel M=$(PWD) modules

clean:
    make ARCH=arm CROSS_COMPILE=arm-eabi- -C /work/TI-Android-ICS-4.0.3_AM37x_3.0.0/kernel M=$(PWD) clean

这可以正常工作,除了模块输出恰好在我的源目录中。我尝试在每一行中添加 O={path to my output dirctory} ,但是它无法使用类似...

错误:内核配置无效。缺少 include/generated/autoconf.h 或 include/config/auto.conf。在内核 src 上运行“make oldconfig && make prepare”来修复它。

警告:符号版本转储 /work/development/linux/driver/blah/Module.symvers 丢失;模块将没有依赖项和 modversions。

我认为这源于这样一个事实,即模块构建中使用了内核构建中的一些输出文件,并且使用“O =”更改输出目录会与之发生冲突。

有没有一种方法可以使用现有的构建基础设施来实现这一点?

4

2 回答 2

0

这个 Makefile 将解决您的查询

 obj-m += hello-1.o

all:
make ARCH=arm CROSS_COMPILE=arm-eabi- -C /work/TI-Android-ICS-4.0.3_AM37x_3.0.0/kernel M=$(PWD) modules_install INSTALL_MOD_PATH=<output directory for modules>

clean:
make ARCH=arm CROSS_COMPILE=arm-eabi- -C /work/TI-Android-ICS-4.0.3_AM37x_3.0.0/kernel M=$(PWD) clean
于 2013-01-22T17:47:32.840 回答
0

查看模块系统的文档,看起来不太好。也许您可以复制.config到您的构建目录并执行make oldconfig && make modules-preparewith O=set。


或者,如果您make从另一个目录运行会发生什么?

/somewhere/else$ make -C /path/to/kernel ARCH=arm CROSS_COMPILE=arm-eabi- M=/your/module/dir modules
于 2012-07-27T05:52:39.420 回答