`

宏EXPORT_SYMBOL在内核中的作用

 
阅读更多

Module运行在kernel space,不能直接调用应用程序库,只能调用内核函数。

EXPORT_SYMBOL的作用是把内核函数的符号导出,也就是将函数的入口地址导出。

 

Module在运行的时候会根据Kernel中的符号表(EXPORTSYMBOL的名字表)去找Symbol(根据内核函数loadmodule()中的_findsymbol),如果该Module无法找到symbol,函数无法执行,该Module也就无法加载。

 

如果非要执行module入口函数,可以用写上绝对地址的函数指针来调用未被EXPORT_SYMBOL的函数。

分享到:
评论

相关推荐

    嵌入式系统/ARM技术中的Linux内核中EXPORT_SYMBOL的用法

    在Linux内核开发过程中,有时我们需要在不同的模块之间共享函数,这时就用到了`EXPORT_SYMBOL`机制。`EXPORT_SYMBOL`是Linux内核提供的一种功能,允许将特定的函数公开给其他内核模块使用,而无需直接修改内核源码。...

    获取Linux内核未导出符号的几种方式

    只有在内核中使用EXPORT_SYMBOL或EXPORT_SYMBOL_GPL导出的符号才能在内核模块中直接使用。然而,内核并没有导出所有的符号。例如,在3.8.0的内核中,do_page_fault没有被导出。  而我的内核模块中需要使用do_page...

    Linux模块原理

    EXPORT_SYMBOL 宏定义的实现是通过将符号存放在一个叫做“__ksymtab”的区段中,並将其置于内核映像中。这个区段中所有的符号就组成了模块对外“移出”的符号表,这些符号可供内核及已安装的模块来引用。 在 ...

    dma.c驱动分析

    可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导 出给其他模块使用 */ EXPORT_SYMBOL(dma_spin_lock); static dma_t *dma_chan[MAX_DMA_CHANNELS]; //通道对应的指针数组 //申明...

    linux模块间函数调用通讯

    - **EXPORT_SYMBOL**: 这个宏用于导出一个函数或变量,使其对所有内核代码可见。这种方式适用于那些希望对所有内核模块开放使用的函数。 示例: ```c EXPORT_SYMBOL(my_function); ``` - **EXPORT_SYMBOL_GPL...

    内核符号的导出实验(附源代码)

    本实验详细讲解了如何在Linux内核中导出符号,以便于模块调用。这里我们将深入探讨这个主题。 首先,内核符号是内核中的函数、变量或其他标识符,它们对于模块来说是可见的。当内核模块需要访问内核中的函数或变量...

    深入linux设备驱动程序内核机制

    2. **EXPORT_SYMBOL的内核实现**:`EXPORT_SYMBOL`宏用于对外导出符号,使得模块能访问内核提供的函数和数据。这个过程涉及宏定义、链接脚本和符号解析,确保模块加载时能够找到所需符号的实际地址。 3. **模块加载...

    Linux内核模块开发常用内核接口

    - **`EXPORT_SYMBOL()`**:此宏用于向内核导出符号,使得其他模块可以使用该符号。 - **`EXPORT_SYMBOL_GPL()`**:此宏与前者相似,但限制了导出仅对GPL许可证下的模块可用。 ##### **5. 模块信息** ```c MODULE_...

    linux 内核模块

    在Linux系统中,内核模块主要用于设备驱动程序,网络协议,文件系统等。了解如何编写、加载和管理内核模块对于系统管理员和开发人员来说是至关重要的。 一、内核模块基础 1. **模块编译**:编写内核模块通常使用...

    linux驱动开发实例

    EXPORT_SYMBOL 宏是 Linux 内核提供的一个宏,用于将模块中的变量或函数导出,以便在其他模块中使用。在带传入参数的 Hello World 模块程序设计中,使用 EXPORT_SYMBOL 宏将 howmany 和 whom 变量导出,以便在其他...

    创建有导出函数的内核驱动程序

    2. 导出函数:通过`EXPORT_SYMBOL`宏,我们可以使内核模块中的函数对其他模块(包括用户空间程序)可见。这需要在驱动程序的头文件中声明导出函数,并在源文件中定义它。 三、创建步骤 1. 编写驱动程序源代码:以`...

    Linux2.6的内核移植资料

    在2.6内核中,使用新的宏module_init和module_exit来代替原来的init_module和cleanup_module函数。模块参数的声明也有所变化,现在必须包含头文件并使用module_param宏。 2. GPL许可证声明的变化。2.6内核中,模块...

    LINUX内核模块编程

    2. `EXPORT_SYMBOL`和`EXPORT_SYMBOL_GPL`:这两个宏用于导出内核符号,使得其他模块可以使用。 3. `device`和`driver`结构:用于设备驱动编程,表示硬件设备和与其关联的驱动程序。 4. `request_module`和`try_...

    编写简单的内核模块.pdf

    - 解决问题:为使模块能访问`my_variable`,需要在内核源码中使用`EXPORT_SYMBOL(my_variable)`导出该变量。 5. **模块调试**: - 错误处理:当模块加载失败时,系统会给出错误信息,如"Unknown symbol in module...

    《深入Linux设备驱动程序内核机制》.pdf

    在Linux内核中,驱动程序的开发涉及到对操作系统内核机制的深入理解,尤其是符号的导出和模块的加载过程。《深入Linux设备驱动程序内核机制》这本书详细阐述了这些概念。 首先,导出符号是Linux内核模块之间通信的...

    Linux课程设计.pdf

    EXPORT_SYMBOL宏用于导出符号,使其在模块之间可见,便于不同模块之间的函数调用;pid_task宏用于根据进程ID获取task_struct结构体指针;for_each_process宏用于遍历系统中的所有进程。 在编写Linux内核模块时,...

    linux kernel 2.4和 2.6 的驱动编写区别

    3. **模块参数**:在2.6内核中,模块参数的声明需要使用`module_param`系列宏,如`module_param_named`,而2.4内核使用`MODULE_PARM`和`MODULE_PARM_DESC`。 4. **模块别名**:2.6内核引入了`MODULE_ALIAS`,可以...

    驱动-A53 .pptx

    `EXPORT_SYMBOL`系列宏用于将内核模块的符号公开给其他模块,例如: ```c EXPORT_SYMBOL(symbol_name); ``` **模块的编译和装载** 编译内核模块需要内核头文件,并使用如`make`命令构建。装载模块使用`insmod`,...

Global site tag (gtag.js) - Google Analytics