【问题标题】:How to create new directories and move .o files to it while compiling a kernel module from multiple directories/files如何在从多个目录/文件编译内核模块时创建新目录并将 .o 文件移动到其中
【发布时间】:2013-01-16 16:23:53
【问题描述】:

我正在尝试从多个目录中的文件构建内核模块。我想将生成的 .o 文件放在与每个源目录相对应的新目录中。

例如,如果我的来源是 A/a1.c 、 A/a2.c 、 B/b.c ;我希望 .o 文件转到 A/new-dir/a1.o A/new-dir/a2.o B/new-dir/b.o 等等。

我现在的 Makefile 是这样的:

obj-m += foo.o

lavya-objs := lavya_module1.o  lavya_module2.o

lavya-objs += $(A_DIR)/a1.o $(A_DIR)/a2.o $(B_DIR)/b.o 


all: 

        make -C $KERNEL_PATH  M=$(PWD) modules

它会在与对应的 .c 文件相同的目录中创建 .o 文件。是否可以修改 Makefile 以在每个源目录中插入一个新目录并将 .o 文件移到那里?怎么办?

非常感谢!

【问题讨论】:

  • @Satish:谢谢,但这是针对用户空间 cpp 应用程序的。我的问题是关于制作内核模块。
  • 有什么区别? makefile 指示 Make 编译 a1.c 并将 a1.o 放在某处。它不知道a1.c是谁写的,也不知道代码要做什么。
  • 内核构建过程不是完全不同吗?实际上,我刚刚为 c 应用程序做了一些类似的事情,但这不适用于模块。

标签: c linux module makefile kernel


【解决方案1】:

主内核 Makefile 讲述了两种将输出放置在别处的方法(不像你问的那样,但它可能很有用)。查找 KBUILD_OUTPUT(可以设置为环境变量或设置为 O=where/to/put to make)。

【讨论】:

    【解决方案2】:

    是的,你可以像下面这样在 makefile 中做到这一点

    obj-m += foo.o
    
    lavya-objs := lavya_module1.o  lavya_module2.o
    
    lavya-objs += $(A_DIR)/a1.o $(A_DIR)/a2.o $(B_DIR)/b.o 
    
    
    all: 
        make -C $KERNEL_PATH  M=$(PWD) modules
        mkdir -p $(A_DIR)/objs && mv $(A_DIR)/*.o $(A_DIR)/objs/
        mkdir -p $(B_DIR)/objs && mv $(B_DIR)/*.o $(B_DIR)/objs/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-20
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 2013-12-26
      • 1970-01-01
      • 2012-02-26
      相关资源
      最近更新 更多