[Linux内核驱动]导出符号

导出符号

更多详细内容可以查看我的github

在Linux内核中,导出符号(Exported symbols)是指内核模块可以访问的符号,这些符号通常是函数或变量。当内核模块需要调用内核中定义的函数或访问内核中定义的变量时,这些函数或变量必须被导出。

导出的符号可以在/proc/kallsyms文件中查看

导出符号方法

可以使用下面的宏导出符号到内核符号表中:

  1. EXPORT_SYMBOL(symbol_name):这是用于导出符号的宏。任何使用此宏声明的符号都将被添加到内核的符号表中,以便其他模块可以引用它。
  2. EXPORT_SYMBOL_GPL(symbol_name):这是与EXPORT_SYMBOL类似的宏,但它仅导出符号给那些遵循GNU公共许可证(GPL)的模块。

使用导出的符号

在使用的模块的源文件中使用 extern 来声明要使用的导出符号,然后使用即可。

测试

make
dmesg -Cinsmod export_symbol.ko
insmod test_export.kodmesg

代码

#include <linux/module.h>
#include <linux/kernel.h>int exported_function(int a, int b)
{return a + b;
}
EXPORT_SYMBOL(exported_function);static int __init export_symbol_init_module(void)
{printk(KERN_INFO "export_symbol loaded\n");return 0;
}static void __exit export_symbol_exit_module(void)
{printk(KERN_INFO "export_symbol unloaded\n");
}module_init(export_symbol_init_module);
module_exit(export_symbol_exit_module);MODULE_AUTHOR("lidonghang-02");
MODULE_LICENSE("GPL");

测试代码

#include <linux/module.h>
#include <linux/kernel.h>extern int exported_function(int a, int b); // 声明导出的函数static int __init test_export_init_module(void)
{int result = exported_function(2, 3); // 调用导出的函数printk(KERN_INFO "test_export: result = %d\n", result);return 0;
}static void __exit test_export_exit_module(void)
{printk(KERN_INFO "test_export unloaded\n");
}module_init(test_export_init_module);
module_exit(test_export_exit_module);MODULE_AUTHOR("lidonghang-02");
MODULE_LICENSE("GPL");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/31644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【代码仓库提交大文件,用Git LFS!】

开始前 Git LFS&#xff1a;请注意&#xff0c;你的远程仓库需要支持Git LFS。GitHub、GitLab和Bitbucket都支持Git LFS&#xff0c;但可能需要额外的配置或开启特定的支持选项。 介绍 Git LFS (Large File Storage) 是一个 Git 扩展&#xff0c;用于处理和存储大文件。通常…

DVWA 靶场 Authorisation Bypass 通关解析

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

在寻找电子名片在线制作免费生成?5个软件帮助你快速制作电子名片

在寻找电子名片在线制作免费生成&#xff1f;5个软件帮助你快速制作电子名片 当你需要快速制作电子名片时&#xff0c;有几款免费在线工具可以帮助你实现这个目标。这些工具提供了丰富的设计模板和元素&#xff0c;让你可以轻松地创建个性化、专业水平的电子名片。 1.一键logo…

python 学习积累

持续更新中 感受python的强大之case列举&#xff1a; 1. 生成的map list要经过json格式化写入文件&#xff0c;请用python实现这一需求 import json map{"name": "张三", "age": 18, "address": "北京"} list[] for i in …

个人知识库(python/AI/机器学习/数据分析/神经网络/机器视觉/共享文档)

个人工作学习中总结的知识技巧,欢迎大家阅读学习,地址:语雀阅读地址 后期也会把资源在csdn上公布出来,方便同行借鉴.

探索C嘎嘎的奇妙世界:第十七关---STL(vector的模拟实现)

vector是一种动态数组&#xff0c;可以动态调整大小并按照索引访问元素。由于很多接口在string中都有所重复&#xff0c;所以这次来讲一些有所区别的接口 1. 迭代器 Vector中的迭代器是一种用于遍历vector中元素的对象。迭代器提供了一种访问vector中元素的统一方式&#xff0…

vue2.7支持组合式API,但是对应的vue-router3并不支持useRoute、useRouter。

最近在做一个项目&#xff0c;因为目标用户浏览器版本并不确定&#xff0c;可能会有较旧版本&#xff0c;于是采用vue2.7而不是vue3&#xff0c;最近一年多使用vue3开发的项目都碰到了很多chrome 63-73版本&#xff0c;而对应UI 库 element plus又问题很多。 为了不碰到这些问…

TCP 协议详解:三次握手与四次挥手

在网络通信中&#xff0c;确保数据准确无误地传递是至关重要的。TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;作为一种面向连接的、可靠的、基于字节流的通信协议&#xff0c;在网络数据传输中起到了核心作用。本文将详细解析 TCP 的基本…

神经网络学习5-非线性激活

非线性激活&#xff0c;即 这是最常用的 inplaceTrue 原位操作 改变变量本身的值&#xff0c;就是是否输入时若原本有值&#xff0c;是否更换 该函数就是表示&#xff1a;输入小于零时输出0&#xff0c;大于零时保持不变 代码如下&#xff1a; import torch from torch imp…

Python初体验

# Java基础知识学的差不多了&#xff0c;项目上又没什么事&#xff0c;学学py&#xff0c;方便以后对接 1、打包flask应用&#xff08;好痛苦&#xff0c;在什么平台打包就只在那个平台可用想在linux用只能参考方法2了&#xff09; pyinstaller --onefile app.py -n myapp 2…

Databend 开源周报第 149 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持递归公共表…

(项目实战)RocketMQ5.0延迟消息在聚合支付系统中的应用

1 基于业务场景掌握RocketMQ5.0 本篇文章主要结合聚合支付系统中的业务场景来落地RocketMQ中间件的应用&#xff0c;聚合支付系统主要在支付系统超时订单和商户支付结果异步通知场景中会使用到RocketMQ消息中间件。本文使用到了RocketMQ中的延迟消息知识点&#xff0c;RocketM…

数据库精选题(一)(关系数据库设计)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;数据库 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 前言 练习题 题型一&#xff1a;判断关系…

百度地图使用任意图片旋转任意角度作为地面贴图

公司项目有个需求是要在地图上贴个航拍的照片做出类似卫星地图的效果,但是只有一张图片而且可以随时替换,也不好做瓦片地图,而且照片的角度可以任意旋转。 要实现这个功能需要解决以下问题: 百度地图怎么贴图片图片角度如何旋转 不卖关子,我先放出实现的效果,为了不涉及侵…

ansible file模块

file模块 管理文件和目录的属性&#xff0c;如状态&#xff08;是否存在&#xff09;、权限、所有权等。 1、创建文件&#xff1a; 使用file模块的state参数设置为touch可以创建文件。例如&#xff1a; ansible 组名 -m file -a "path/csdn/jingyu statetouch" …

期末考后怎样发成绩?

老师们&#xff0c;下周可就是期末考啦&#xff0c;又到了头疼发成绩的时候了。每当这个时候&#xff0c;家长们总是急切地咨询孩子的考试表现&#xff0c;向老师们询问成绩。这种场景几乎成了每学期结束时的常态。 别担心&#xff0c;我来安利一个超棒的工具——“易查分小程序…

Java开发接口设计的原则

在现代软件开发实践中&#xff0c;接口设计扮演着至关重要的角色。它不仅关乎代码的结构和未来的可维护性&#xff0c;还直接影响到软件系统的灵活性和扩展性。本文将通过实例详解几个核心的接口设计原则&#xff0c;帮助开发者更好地编写和管理接口&#xff0c;从而提升软件的…

一键制作,打造高质量的数字刊物

随着数字化时代的到来&#xff0c;数字刊物已经成为信息传播的重要载体。它以便捷、环保、互动性强等特点&#xff0c;受到了越来越多人的青睐。然而&#xff0c;如何快速、高效地制作出高质量的数字刊物&#xff0c;成为许多创作者面临的难题。今天&#xff0c;教大家一个制作…

【golang学习之旅】Go中的变量(1)

系列文章 【golang学习之旅】使用VScode安装配置Go开发环境 【golang学习之旅】报错&#xff1a;a declared but not used 【golang学习之旅】Go 的基本数据类型 【golang学习之旅】深入理解字符串string数据类型 【golang学习之旅】go mod tidy 【golang学习之旅】记录一次 p…

Codepen Three.js环境依赖配置

Codepen Three.js环境依赖配置 前言 如果想在CodePen环境写Three.js依赖的项目&#xff0c;环境搭建可以参考该Codepen项目: Chill the lion 详细 打开设置可以看到以下配置 更多项目参考 1. Chill the Lion Chill the Lion 是一个基于 ThreeJS 制作的 WebGL 示例。它由…