重定向linux模块构建的输出

时间:2012-07-26 19:10:25

标签: linux module makefile kernel

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

我的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。          运行'make oldconfig&&在内核src上做准备以修复它。

     

警告:符号版本转储   /work/development/linux/driver/blah/Module.symvers              不见了;模块没有依赖关系和modversions。

我认为这源于这样一个事实:内核版本中有一些输出文件用于模块构建,而用“O =”更改输出目录会与之发生冲突。

是否有使用现有构建基础架构实现此目的的方法?

2 个答案:

答案 0 :(得分:0)

查看the module system的文档,看起来不太好。也许您可以将.config复制到您的构建目录中,然后设置make oldconfig && make modules-prepare O=


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

/somewhere/else$ make -C /path/to/kernel ARCH=arm CROSS_COMPILE=arm-eabi- M=/your/module/dir modules

答案 1 :(得分: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