首页 > 解决方案 > 内核模块的 Makefile 将所有 .o .ko .order .mod 文件保存在 build/ 目录中

问题描述

我的文件夹结构如下:

root dir
       |__build/
       |__Makefile
       |__mod_init.c

生成文件:

obj-m += mod_klm.o
mod_klm-y := mod_init.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

这将我的文件夹结构更改如下:

    root_dir
       |__build/
       |__Makefile
       |__mod_init.c
       |__mod_klm.ko
       |__mod_klm.mod.o
       |__mod_init.o
       |__mod_klm.mod
       ......

但我希望所有这些生成的 .o .ko .order .mod 文件都在 build/ 中,即

   root_dir    
      |__build/
           |__mod_klm.ko
           |__mod_klm.mod.o
           |__mod_init.o
           |__mod_klm.mod
            ..........
      |__Makefile
      |__mod_init.c

我知道这段代码不足以做到这一点,但无法弄清楚要在 Makefile 中添加什么。

我已经尝试在 linux 内核编译的单独文件夹中制作 .o 文件。但得到以下错误。

make -C /lib/modules/5.5.15-200.fc31.x86_64/build  M=/home/aninsen/projects/kspace/kmod_template/kspace modules
make[1]: Entering directory '/usr/src/kernels/5.5.15-200.fc31.x86_64'
make[2]: Entering directory '/home/aninsen/projects/kspace/kmod_template/kspace/build'
  CC [M]  /home/aninsen/projects/kspace/kmod_template/kspace/mod_init.o
In file included from /usr/src/kernels/5.5.15-200.fc31.x86_64/include/linux/types.h:6,
                 from /usr/src/kernels/5.5.15-200.fc31.x86_64/include/linux/limits.h:6,
                 from /usr/src/kernels/5.5.15-200.fc31.x86_64/include/linux/kernel.h:7,
                 from /home/aninsen/projects/kspace/kmod_template/kspace/mod_init.c:1:
/usr/src/kernels/5.5.15-200.fc31.x86_64/include/uapi/linux/types.h:5:10: fatal error: asm/types.h: No such file or directory
    5 | #include <asm/types.h>
      |          ^~~~~~~~~~~~~
compilation terminated.
make[3]: *** [/usr/src/kernels/5.5.15-200.fc31.x86_64/scripts/Makefile.build:266: /home/aninsen/projects/kspace/kmod_template/kspace/mod_init.o] Error 1
make[2]: *** [/usr/src/kernels/5.5.15-200.fc31.x86_64/Makefile:1694: /home/aninsen/projects/kspace/kmod_template/kspace] Error 2
make[2]: Leaving directory '/home/aninsen/projects/kspace/kmod_template/kspace/build'
make[1]: *** [Makefile:179: sub-make] Error 2
make[1]: Leaving directory '/usr/src/kernels/5.5.15-200.fc31.x86_64'
make: *** [Makefile:25: all] Error 2

提前致谢。

标签: linuxmakefilelinux-kernelkernelkernel-module

解决方案


推荐阅读