加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

编译linux内核(2.6)模块,包括非内核头文件

发布时间:2020-12-13 18:31:37 所属栏目:Linux 来源:网络整理
导读:是否有可能编译包含非内核包含的功能的 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.oall: $(MA
是否有可能编译包含非内核包含的功能的 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 – 在这种情况下它们无论如何都需要修改).将它们合并到您自己的库中,以便在您的内核模块中使用.

最新版本的linux无论如何都包含加密函数,包括各种SHA哈希 – 也许您可以使用其中之一.

另一个想法是停止尝试在内核空间中进行加密并将代码移动到用户空间.用户空间代码更易于编写/调试/维护等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读