[英]How to include an arbitrary kernel header file in a module?
情況
我正在編寫一個用於學習目的的內核模塊,並希望使用此處定義的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>
- 只是從這個問題的評論中復制粘貼這些都沒有工作,都給了我錯誤No such file or directory 。
我對 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 個符號?
您不應該在“普通”內核模塊中需要它們。 如果您真的這樣做了,請在您的模塊中重新定義它們。
這些符號是否應該由標准模塊直接引用?
他們不是,那個特定的sched.h
文件只應該由調度程序代碼( kernel/sched
文件)使用。 這就是為什么它沒有被導出(即不在include
目錄中)。 您不會在標頭文件夾 ( /lib/modules/.../build
) 中找到它們。
Makefile 是否與我如何將內核代碼中的文件導入到我的模塊中有關?
不確定這到底意味着什么……如果您想知道是否有某種方法可以配置 Makefile 以便可以包含該文件,那么就沒有。 如果您使用內核在/lib/modules
導出的內核頭文件進行構建(這就是您使用$(MAKE) -C $(KROOT)
控制權移交給內核的 Makefile 時$(MAKE) -C $(KROOT)
),那么該文件就是不在那里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.