linux内核模块是如何调用的内核函数?

linux内核模块是如何调用的内核函数?

在学习Linux设备驱动的过程一直有一个疑惑:

我们在写用户空间程序的后自然是需要include用户空间的头文件,而头文件中声明函数的定义又需要编译成库或目标文件,链接到最终的可执行文件中去。但是在编写内核模块的时候,从哪里找的linux内核头文件呢?而linux内核头文件中对应函数的定义又放在哪里的呢?

事实上我们想要编译内核模块首先就需要构建好内核源码树,或者直接使用本系统的内核头文件,我们一般都是直接使用本地的内核头文件的,放在:/usr/src/linux-header-xxx下,这个目录下面放了linux顶层的makefile文件,具体的头文件放在include下,我们常用内核模块编程所需要的头文件都在include/linux下!

但是只有头文件的声明当然不行,那些函数定义在哪呢?linux都被编译成可执行文件了,怎么去调用里面的函数呢?在网上各种查终于找到了靠谱的解释:https://blog.csdn.net/youbang321/article/details/8563208

“内核模块有所不同。在hello world模块中你也许已经注意到了我们使用的函数 printk() 却没有包含标准I/O库。这是因为模块是在insmod加 载时才连接的目标文件。那些要用到的函数的符号链接是内核自己提供的。 也就是说,你可以在内核模块中使用的函数只能来自内核本身。如果你对内核提供了哪些函数符号 链接感兴趣,看一看文件/proc/kallsyms。”

其实使用linux内核内部的所有函数的方式都是通过直接跳转到函数符号地址的方式来调用!通过对应函数的地址就可以调用内核中的函数了!
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值