是否有可能编译包含非内核包含的功能的
linux内核(2.6)模块?
例如:
kernelmodule.h
#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> // printk() // ... #include <openssl/sha.h> // ...
Makefile文件
obj-m := kernelmodule.o all: $(MAKE) -C /lib/modules/`uname -r`/build M=`pwd` modules clean: $(MAKE) -C /lib/modules/`uname -r`/build M=`pwd` clean $(RM) Module.markers modules.order
我编写并尝试编译的内核模块包含许多openssl包含文件中的功能.
上面提到的标准makefile不允许在linux头文件之外包含.是否可以包含此功能,如果可以,请指出我正确的方向.
谢谢,
麦克风
解决方法
内核不能使用用户空间代码,必须独立(即完全自包含,没有库),因此它不会选择标准头.
目前尚不清楚尝试获取用户空间标头的好处是什么.如果有些东西可以使用(常量,某些宏可能提供它们不会调用任何用户空间函数),那么复制它们并且仅包含所需的内核兼容部分可能更好.
无法将内核与为用户空间使用而设计的库链接 – 即使它们没有进行任何OS调用 – 因为内核中的链接环境无法获取它们.
相反,重新编译要在内核中使用的任何函数(假设它们不进行任何操作系统或库调用 – 例如malloc – 在这种情况下它们无论如何都需要修改).将它们合并到您自己的库中,以便在您的内核模块中使用.