用于内核模块的Makefile,将所有.o .ko .order .mod文件保留在build /目录中[重复]

问题描述 投票:0回答:1

我的文件夹结构如下:

root dir
       |__build/
       |__Makefile
       |__mod_init.c

Makefile:

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
       ......

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

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

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

我已经尝试过make .o files in separate folder in linux kernel compilation。但是出现以下错误。

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

提前感谢。

我的文件夹结构如下:root dir | __build / | __Makefile | __mod_init.c Makefile:obj-m + = mod_klm.o mod_klm-y:= mod_init.o全部:make -C / lib / modules / $ (shell ...

linux makefile linux-kernel kernel kernel-module
1个回答
0
投票

此Makefile是树外Makefile。修改后的Makefile如下:

© www.soinside.com 2019 - 2024. All rights reserved.