EXPORT_SYMBOL解析

linux内核模块(2)导出符号 /*本文由真胖子同志私人定制,烦请转载保留来源*/ 内核模块不但可以使用内核和其他模块导出的符号,还可以向外部导出自己的符号。如果一个模块向外界导出符号,那么模块的编译工具链将负责生成这写导出符号的section(都带有SHF_ALLOC标志),所以在模块的加载过程中会被搬移到CORE section区域。 (1)    导出符号的定义 内核用structkernel_symbol来表示 阅读详情

 

Code Segment:
 
 
 
Analysis:
 
1. kernel_symbol: 内核函数符号结构体
value: 记录使用EXPORT_SYMBOL(fun),函数fun的地址
name: 记录函数名称("fun"),在静态内存中
 
2. EXPORT_SYMBOL(sym) :导出函数符号,保存函数地址和名称
 
宏等价于:(去掉gcc的一些附加属性,MODULE_SYMBOL_PREFIX该宏一般是"")
 
 
 
 
3. gcc 附加属性

1>. __atrribute__ 指定变量或者函数属性。在此查看详细 http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Variable-Attributes.html#Variable-Attributes。
 
__attribute((section("section-name")) var : 编译器将变量var放在section-name所指定的data或者bss段里面。
 
很容易看出:EXPORT_SYMBOL(sym)将sym函数的名称__kstrtab_sym记录在,段名为"__kstrtab_strings"数据段中。 将sym所对应的kernel_symbol记录在名为__ksymtab段中。
EXPORT_SYMBOL_GPL(sym) 和EXPORT_SYMBOL不同之处在于sym对应的kenel_symbol记录在__ksymtab_gpl段中。

 

制造业信息化的现实困局与未来展望:从基础到数字化的挑战与机遇 随着全球科技的发展和市场竞争的加剧,制造业的转型升级成为企业必须面临的挑战。在信息化和数字化的浪潮下,许多企业试图通过技术创新来提升自身竞争力。然而,现实情况是,绝大部分制造业企业的基本信息化都尚未完成,更遑论复杂的数字化。那么,制造业在信息化进程中面对哪些阻碍?未来又该如何实现从基础信息化到数字化的转型? 阅读详情

相关推荐

ESD镜像解密与转换全攻略:从esd-decrypter到WinNTSetup的完整流程

本文详细解析了ESD镜像的加密特性与压缩优势,并提供了从解密到转换的完整实战指南。核心步骤包括使用esd-decrypter工具解密ESD文件为WIM格式,以及如何结合WinNTSetup进行灵活的系统安装或进一步封装为可引导的ISO镜像,帮助用户高效处理官方Windows安装镜像。

weixin_29207439的博客 451

Kernel. EXPORT_SYMBOL解析

Kernel. EXPORT_SYMBOL解析 Code Segment: include/module.h: struct kernel_symbol {    unsigned long value;       const char *name;}; /* For every exported symbol, place a struct in the __k

GAME-LAB(游戏开发,微信公众号:fury-programer) 5048

Quartus (Quartus Prime 18.1)的安装及仿真步骤

前两天做计组的课设需要用到Quartus 这个软件,但安装有点麻烦,在网上搜了很多教程,发现都是旧版本的,最后弄了好半天才把环境搭建好。所以,分享一下它的搭建过程。 因为我不经常用它,所以安装的版本是精简版的其他版本的也应该差不多以下是需要下载的安装包: 准备: Quartus Prime 精简版,最新发布: v18.1 1. QuartusLiteSetup-18.1.0.625-wi...

weixin_41082948的博客 8万+

内核EXPORT_SYMBOL函数讲解(二)

书接上文,在https://blog.youkuaiyun.com/weixin_37867857/article/details/84526808这个博客里面写到EXPORT_SYMBOL函数使用就是把导出的符号以符号值+符号的字符串表示的形式表示的。只是讲解了EXPORT_SYMBOL宏的作用就是把导出的符号以符号名称+符号值的形式存储在struct kernel_symbol为数据结构的文件里面,如果文...

weixin_37867857的博客 2630

Arnold Denoise流程

参考:https://support.solidangle.com/display/ARP/Removing+Noise+Workflow Arnold生来不是一个以单帧渲染速度见长的渲染器,但这并不能作为一个简单场景渲染时间长达几个小时的借口。 个人认为高品质生产级渲染结果中,Unbiased renderer在渲染时最耗计算时间的其实就是降噪,以至于降噪专门成了一门灯光师必备的技术

机器猫的CG空间 5084

初识colmap

COLMAP是一款开源的计算机视觉软件,主要用于从一系列二维图像中进行三维重建。它全称为“COLLISION-MAPping”,是一个高度集成的Structure-from-Motion (SfM) 和 Multi-View Stereo (MVS) 管道工具,由斯坦福大学开发和维护。COLMAP的主要功能包括特征检测与匹配、增量式SfM、多视图立体匹配以及优化。它能够从无序或有序的二维照片集合中恢复出三维场景的几何结构(点云)以及每张图像对应的相机姿态。

Hhsjehejj的博客 5551

如何在一分钟内解决Windows系统崩溃问题

Dirk A. D. Smith / translate by Minghui Li系统崩溃了:如果你是幸运的,它只在你那天崩溃了。更可能的是,你好几天都会遇到这个问题,或者是几周、几个月。毕竟系统很少会只失败一次。甚至它会一直崩溃,直到你找到修复问题的方法。 本文将为你提供快速解决问题的方法,使用一个工具,你可以在几分钟内解决大约50%的windows服务器和工作站的崩溃问题,这个工具就是WinDbg,免费的Windows调试器(debugger)。 你可能从来没用过调试器,没有这个工具或者根本不想用它。

bob_formula1的专栏 1万+

Kong API Gateway 配置与深入

Kong是一个开源的、高性能的API网关,提供了一种简单易用的服务间路由、流量管理和安全防护方案,其最初起源于Nginx Inc.,但后迁移至Apache Software Foundation。Kong支持RESTful、GraphQL、TCP/UDP等协议,可与AWS Lambda、Azure Functions、Google Cloud Functions等云函数平台集成。其主要功能包括:服务发现与负载均衡、请求代理、身份认证与授权、缓存、日志记录、监控指标、灰度发布、多种插件等。

AI天才研究院 2283

2.7 Linux模块机制

1、模块插入模块的格式。驱动模块在2.6内核下编译出来是.ko文件,.ko文件也是elf格式的。elf格式的文件有3种类型:可重定位文件obj、可执行文件、共享库文件。需要注意的是,用户态编译出来的应用程序是可执行类型的elf,而.ko文件是可重定位类型的elf。 仅从文件格式上就可以看到,模块文件的加载和用户态可执行文件的动态加载机制是不一样的。1.1、外部模块插入工具Modprobe加载外部模块

pwl999的博客 2138

【GameFramework框架内置模块】8、文件系统(File System)

最近好忙,鸽了好久。不能颓废了,继续发力。今天分享的是GF框架的文件系统。首先,引用比较官方的说法:GF的FileSystem虚拟文件系统,使用类似磁盘存储的感念对零散的文件进行集中管理,优化资源加载时产生的内存分配,也可以对资源进行局部片段加载,极大的提升了资源加载的性能。通俗点讲就是,我这个模块就是加载磁盘文件的,优化加载时产生的内存分配。那么,它是怎么优化的呢?

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2452

【YOLOv11多模态涨点改进】独家创新首发 | TGRS 2025 | 引入CDFIM跨模态差异特征交互模块,通过差异特征提取和融合增强机制,减少了冗余信息,显著提升了小目标的检测精度,高效涨点改进

🔥本文给大家介绍使用 CDFIM跨模态差异特征交互模块改进 YOLOv11多模态目标检测,通过有效的差异特征提取和增强,显著提升了小目标的检测精度,特别是在复杂背景和低对比度环境下。该模块通过残差加法和通道与空间注意力机制,增强了可见光与红外模态之间的互补特征交互,减少了冗余信息,提高了检测稳定性。尽管提升了特征交互,CDFIM 仍保持轻量化设计,计算开销和参数量较低,适合实时检测应用。总的来说,CDFIM 模块在保留原始模态信息的同时优化了特征融合,有效提高了 YOLO 在多模态目标检测中的鲁棒性和精度

Ai缝合怪、助力小伙伴高效发论文 131

内核分析:EXPORT_SYMBOL解析

Kernel. EXPORT_SYMBOL解析   Code Segment:   include/module.h:   struct kernel_symbol  {     unsigned long value;        const char *name; }; /* For every exported symbol, place

LinuxEngineer的专栏 1352

基于STM32的智能宠物喂食系统设计与实现(代码+PCB )

STM32;DHT11;本系统的软件程序基于Keil MDK-ARM V5集成开发环境进行编写和编译。Keil MDK是ARM公司官方推荐的嵌入式开发工具,支持ARM Cortex-M系列微控制器的程序开发,内置ARM C/C++编译器、调试器和仿真器,具有代码编辑、语法高亮、工程管理和在线调试等功能,是STM32开发领域应用最为广泛的IDE之一。

3254968421的博客 72

Linux内核EXPORT_SYMBOL宏解析

Linux内核EXPORT_SYMBOL宏定义解析,以及链接脚本说明

深海 1302

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[转] 内核. EXPORT_SYMBOL 解析

EXPORT_SYMBOL宏是定义在include/linux/export.h的头文件中 Code Segment: include/module.h: struct kernel_symbol { unsigned long value; // 该内核符号的地址 const char *name; // 该内核符号的名字 }; /* For every exported ...

猫瑾的博客 594

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

700个Agent串联背后:多智能体编排架构的工程实践

在大模型应用从单一智能体走向系统性协作的进程中,多智能体编排(Multi-Agent Orchestration)成为解决复杂业务问题的关键架构范式。它借鉴分布式系统的服务编排思想,将多个职责单一的Agent通过消息传递、任务调度和状态管理组织成可控的工作流,常见模式包括链式、并行、分层与混合编排。与固定流程的工作流不同,多智能体系统需要应对输出不确定性、语义上下文膨胀、消息丢失、失败重试幂等等工程挑战。生产环境下,通过引入消息队列、共享状态存储、全局trace_id、最小权限控制等手段,可以让数百个Age

weixin_33834910的博客 133

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【深入解析】Linux模块化设计(5)EXPORT_SYMBOL 的未知路径:Linux 内核符号表的运作机制

源码位于和return 0;// 已定义的符号无需处理if (!return 0;这段代码做了什么?从符号表中拿到每个符号的名字(通过st_name+ 字符串表)如果是SHN_UNDEF(未定义),就查找该名字是否存在于内核符号表如果存在,就替换其st_value为真实地址,实现符号绑定。

NO_Dream_的博客 1009
下一篇: MIPS公司及其开发的体系结构
call321
博客等级 码龄16年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值