驱动提供机制,应用实现策略
-
模块运行于内核空间,应用程序运行于用户空间
-
模块运行时,分配的栈很小,注意栈溢出
-
具有两个下划线前缀(__)的函数,通常是底层组件的接口,需要谨慎使用
-
内核符号表
公共内核符号表用于解释模块内未定义的符号,它包含了所有的全局内核项(函数和变量)的地址;导出内核符号表加以使用,可以建立模块间的依赖关系(模块层叠技术);如果一个模块需要向其他模块导出符号:
EXPORT_SYMBOL(name); // (name必须是全局变量)符号可导出
EXPORT_SYMBOL_GPL(name); // 符号只供GPL许可证下的模块使用
-
所有模块都包含的头文件
#include <linux/module.h> //包含大量函数和符号的定义
#include <linux/init.h> //指定出入口函数
#include <linux/moduleparam.h> //可选:用于定义向模块传递参数的功能
-
指定代码许可证
MODULE_LICENSE("GPL");
-
可使用内核定义的错误编码,做函数返回值使用。
#include <linux/errno.h>
-
只有系统调用的名字前带有"sys_"前缀
结束语
希望本文可以帮助到大家!
欢迎大家通过后台与我交流学习心得,水平有限,如有错漏的地方请不吝指出,谢谢!