【发布时间】:2020-10-27 13:44:05
【问题描述】:
情况
我正在编写一个用于学习目的的内核模块,并希望使用here 定义的sched_class_highest 和for_each_class。
我看到如果我想在文件/include/linux/sched.h 中使用符号,我会#include <linux/sched.h>。所以以同样的方式,由于我现在要添加的文件位于位置/kernel/sched/sched.h,所以我尝试:#include:
- 第一次尝试:
<kernel/sched.h> - 第二次尝试:
<kernel/sched/sched.h> - 第三次尝试:
<../kernel/sched/sched.h>- 只是从this question 的评论中复制粘贴
这些都不起作用,都给了我错误没有这样的文件或目录。
我对 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
问题
- 如何在内核模块中引用这 2 个符号?
- 这些符号是否应该由标准模块直接引用?如果有,标准的做法是什么?
- Makefile 是否与如何将内核代码中的文件导入模块有关?
【问题讨论】:
-
你应该提到你需要 linux 模块,而不是 bsd 一个
-
@АлексейНеудачин 它被标记为 linux-kernel 是有原因的。
标签: c linux makefile linux-kernel