我想重定向模块构建的输出,以便将工件与源隔离开来。
我的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 =”更改输出目录会与之发生冲突。
是否有使用现有构建基础架构实现此目的的方法?
答案 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