如何在模块中包含任意内核头文件?

特兰三重奏

情况

我正在编写用于学习目的的内核模块,并希望使用sched_class_highestfor_each_class定义在这里

我看到,如果我想在文件/include/linux/sched.h中使用符号,我会#include <linux/sched.h>因此,以同样的方式,由于我现在要添加的文件位于location /kernel/sched/sched.h,所以我尝试#include

  • 第一次尝试: <kernel/sched.h>
  • 第二次尝试: <kernel/sched/sched.h>
  • 第三次尝试:<../kernel/sched/sched.h>-仅复制此问题中评论的粘贴内容

这些都不起作用,都给了我错误:没有这样的文件或目录

我对C不太熟悉,只是尝试学习内核并在很长一段时间内学习C。

这是我的Makefile。我知道有关Makefile目标的基础知识,但不了解编译过程或它需要什么文件来馈送它。

MODULE_FILENAME=my-schedule

obj-m +=  $(MODULE_FILENAME).o
KO_FILE=$(MODULE_FILENAME).ko

export KROOT=/lib/modules/$(shell uname -r)/build

modules:
        @$(MAKE) -C $(KROOT) M=$(PWD) modules

modules_install:
        @$(MAKE) -C $(KROOT) M=$(PWD) modules_install

clean: 
        @$(MAKE) -C $(KROOT) M=$(PWD) clean
        rm -rf   Module.symvers modules.order

insert: modules
        sudo insmod $(KO_FILE)
        sudo dmesg -c

remove:
        sudo rmmod $(MODULE_FILENAME)
        sudo dmesg -c

printlog:
        sudo dmesg -c 
        sudo insmod $(KO_FILE)
        dmesg

问题

  1. 如何在内核模块中引用这两个符号?
  2. 这些符号是否应该由标准模块直接引用如果是这样,标准的做法是什么?
  3. Makefile是否与我如何将内核代码文件导入模块有关?
马克·博内利

如何在内核模块中引用这两个符号?

您不应该在“常规”内核模块中使用它们。如果确实需要,请在模块中重新定义它们。

这些符号是否应该由标准模块直接引用?

它们不是,该特定sched.h文件仅应由调度程序代码使用(中的文件kernel/sched)。这就是为什么不导出(即不在include目录中)的原因。您不会在标题文件夹(/lib/modules/.../build)中找到它们

Makefile是否与我如何将内核代码文件导入模块有关?

不确定这到底意味着什么...如果您想知道是否可以通过某种方式配置Makefile,以便可以包含该文件,那么就没有了。如果您使用内核导出的内核头文件进行构建/lib/modules(这是您通过将控制权移交给内核的Makefile时所做的事情$(MAKE) -C $(KROOT)),则该文件根本就不存在。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 HTML 中包含头文件

如何在opencart 2.0.1.1的头文件中调用模块文件

如何在 CMake 中包含仅头文件的库?

如何在内核中包含qcserial模块?

如何在另一个头文件中包含c头文件?

如何在其他类头文件中包含类头文件

如何包含名称中包含“>”的头文件?

如何仅使用已安装的内核头文件而不使用完整内核在Debian中安装/编译模块

如何在 .mli 文件中包含模块?

如何在内核模块和用户空间应用程序之间共享相同的头文件。

如何包含共享库中的头文件?

如何安装内核头文件?

如何访问内核头文件?

你如何在 C++ 中包含头文件和实现文件?

如何在库中组织头文件

如何在其他目录的.c中包含头文件

为什么/如何在Visual Studio中默认包含某些c ++头文件?

如何在一个内核模块中包含三个 IRQ 处理程序?

如何在Perl模块中包含数据文件?

我必须包含哪个头文件才能在内核源文件中获取printk()?

如何在 CMake 项目中包含 wxWidgets 头文件

如何在c ++项目中包含所有头文件?

如何在 Linux 上找到 Qt 包含头文件的位置

pycparser如何读取C代码文件中包含的头文件?

在C中包含头文件

编译pod时“在框架模块中包含非模块化头文件”

如何正确使用内核头文件?

如何在CMakeLists.txt中包含h / hpp头文件,而不是cpp或其他hpp文件

使用dkms构建内核模块,缺少头文件