li nu x内核模块
文章平均质量分 81
真胖子
这个作者很懒,什么都没留下…
展开
-
内核模块(1)模块初探
概念:通过在系统运行期间,加载内核模块来动态的扩展系统该功能而无需重启系统,更无须为这新增添的功能重新编译一个新的系统内核映像。1. ELF文件格式解析内核模块采用ELF(Executableand Linkable Format )格式作为文件的数据组织格式,更具体的讲,内核模块是一种普通的可重定位目标文件。上图忽略了驱动程序模块中不会用到了program原创 2014-02-28 20:17:55 · 995 阅读 · 0 评论 -
linux内核模块(2)导出符号
/*本文由真胖子同志私人定制,烦请转载保留来源*/内核模块不但可以使用内核和其他模块导出的符号,还可以向外部导出自己的符号。如果一个模块向外界导出符号,那么模块的编译工具链将负责生成这写导出符号的section(都带有SHF_ALLOC标志),所以在模块的加载过程中会被搬移到CORE section区域。(1) 导出符号的定义内核用structkernel_symbol来表示原创 2014-02-28 20:38:05 · 3652 阅读 · 0 评论 -
内核模块(4)模块卸载
当需要修改某个模块的功能的时候我们可以使用rmmod命令卸载模块,与模块的加载相比这个要简单得多,j结构也很清晰,下面还是通过源码简要介绍其思想。822 SYSCALL_DEFINE2(delete_module, const char __user *, name_user,823 unsigned int, flags)824 {825原创 2014-02-28 20:58:29 · 1213 阅读 · 0 评论 -
一个模块引用另一个模块导出的函数
编写一个内核模块,在模块中引用另一个模块的导出函数。编写提供plus导出函数的module_plus模块(1)源程序#include#include#includeMODULE_LICENSE("GPL");staticint init(void){printk("""\nplus_init success!\n");return 0;}stat原创 2014-02-27 20:21:04 · 2791 阅读 · 1 评论 -
内核模块(3)模块加载
(1)符号的重定位 想想正在加载的模块有一个“未解决的引用”符号是另一个模块导出的,看看我们上节得到的sym[i].st_value = ksym->value。 虽然“__ksymtab”段被搬移到了最终的内存地址,但是kernel_symbol类型符号sym中的value值依然是内核模块在静态编译时产生的地址(导出符号时EXPORT_SYMBOL,模块编译工具链中原创 2014-02-28 20:48:53 · 1456 阅读 · 0 评论