Linux内核模块 Linux是一个单内核的结构,单内核的模块的可维护性比较差,当我们想增加一个新的功能,比如说要写一个驱动程序要融入到内核里头,Linux内核现在非常庞大,编译一次内核花费的时间很长。所幸的是Linux提供了一种机制(可加载的Linux内核模块),我们所写的代码不需要完全和内核捆绑在一起。在Linux内核运行的过程中,可以把模块加载进Linux内核,当不需要这个模块的时候,即使Linux内核在运行,也可以进行卸载。 Linux内核模块编程 函数包含在,和是必须包含的头文件。 模块的初始化函数 是用于初始化的编译修饰符,当通过insmod命令加载内核模块时,模块的初始化函数会自动被内核执行,完成本模块相关初始化工作。 模块的退出和清理函数 当通过rmmod命令卸载模块时,模块的退出函数会自动被内核执行,完成退出清理工作。 module_init和module_exit module_init表示要用来调用这个初始化函数的宏,它的参数是一个函数名,这个宏定义它放在。 module_init(lkp_init); module_exit(lkp_exit);模块许可证申明 模块的参数 块参数是模块被加载的时候可以被传递给他的值,它本身对应模块内部的全局变量。 模块的导出符号 内核模块可以导出符号(symbol,对应于函数或变量),这样其他模块可以使用本模块中的变量或函数。 模块的编译 Linux内核模块不是一个独立的可执行文件,是在内核运行期间可以插入到内核中的,只有超级用户才能加载和卸载模块。 编译内核模块不能用一般的编译方法,必须写一个Makefile文件,下面这个格式是在ubuntu下的格式。 这个赋值语句的含义是说明要使用目标文件module_helloworld.o建立一个模块,最后生成的模块名为module_helloworld.ko。.o文件是经过编译和汇编,而没有经过链接的中间文件。 模块插入命令 模块卸载命令 C应用程序内核模块程序使用函数Libc库内核函数运行空间用户空间内核空间运行权限普通用户超级用户入口函数main()module_init()出口函数exit()module_exit()编译gcc-cmake链接gccinsmod运行直接运行insmod调试gdbkgdb Linux内核模块与C应用的对比
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/36805.html