【问题标题】:How to build an out-of-tree linux module with an additional include path (includes external header files, librairies like yaml, boost...)如何使用额外的包含路径构建一个树外 linux 模块(包括外部头文件、yaml 等库、boost ......)
【发布时间】:2017-06-07 10:01:02
【问题描述】:

我正在尝试构建一个树外 linux 内核,它应该考虑来自预编译和安装的自定义库的外部头文件。我的 linux 模块将通过 C 接口使用来自共享库的函数。 如何防止内核Makefile中存在此类文件?

    obj-m+= hello_module.o
    $(MAKE) -C $(KDIR) M=$(OUTDIR) modules
    #additional include path
    INCLUDES :=\ 
             -I $(PROJECT_ROOT)/deps1
             -I $(PROJECT_ROOT)/deps2
             -I $(PROJECT_ROOT)/deps3

那么我怎样才能将它包含在上面的 $(MAKE) 行中呢? 提前致谢, Rgds 萨比

【问题讨论】:

  • ... headers files comming from already compiled and installed custom libraries. - Linux 内核模块无法链接用户空间库。也就是说,您可以在编译过程中包含给定的头文件,但生成的模块将包含 unresolved 符号,因此无法将其加载到内核中。
  • 那我应该怎么做呢?实际上外部库是动态的,这就是为什么我不能在 OUTDIR 中包含标题。我注意到 VxWorks 可以做到这一点,所以我的问题,
  • 您打算如何将动态库链接到内核?
  • 示例 deps1 = boost,deps2 = 头文件模板,deps3= 使用 deps2 中的库的 C-iterface

标签: c linux makefile linux-kernel linux-device-driver


【解决方案1】:

您不能将用户空间库链接到模块中。 但是您可以使用以下 Makefile 链接多个文件:

obj-m := combinedmodule.o
combinedmodule-objs := part1.o part2.o


all:
        make -C $(KERNEL_SRC) M=$(PWD) modules

【讨论】:

    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    相关资源
    最近更新 更多