linux 内核模块

linux 内核模块

1.内核模块相关命令
  • lsmod 列出当前模块信息和依赖,实际上是读取并分析/proc/modules文件
  • insmod 加载内核模块,内核加载模块信息在/sys/module目录下
  • modprobe 命令加载命令以 modprobe -r filename会同时卸载依赖模块,模块依赖关系放在/lib/modules/<kernel-version>/modules.dep文件,实际是编译内核是有depmod工具生成
  • 使用modinfo命令可以获取模块的信息,包括模块的作者,说明和支持的参数;
  • rmmod 命令用于删除模块
  • depmod命令用于分析可载入模块的相依性

2.linux 段
  • linux 内核可以使用request_module函数加载内核模块;
  • __init 初始化段
  • __initdata 初始化阶段需要的数据,内核初始化完后可以释放掉
  • __exit 模块卸载函数
  • __exitdata退出阶段采用的数据

3.linux 模块参数

module_param(name, type, perm);

  • name:用作参数的变量的名称。
  • type:参数的类型(bool、charp、byte、short、ushort、int、uint、long、ulong),其中charp代表字符指针。
  • perm:代表/sys/module/<module>/parameters/<param>文件的权限,其中包括S_IWUSRS_IRUSRS_IXUSRS_IRGRPS_WGRPS_IRUGO

当使用模块参数时,应该用MODULE_PARM_DESC描述每个参数,这些参数可以通过modinfo查看。

static char *mystr = "hello";
static int myint = 1;
static int myarr[3] = {0, 1, 2};

module_param(myint, int, S_IRUGO);
module_param(mystr, charp, S_IRUGO);
module_param_array(myarr, int,NULL,S_IWUSR|S_IRUSR);

MODULE_PARM_DESC(myint,"this is my int variable");
MODULE_PARM_DESC(mystr,"this is my char pointer variable");
MODULE_PARM_DESC(myarr,"this is my array of int");

运行上述模块时,要在加载该模块时提供参数 insmod hellomodule-params.ko mystring="packtpub" myint=15 myArray=1,2,3,否则为默认值。


4.导出符号

使用EXPORT_SYMBOL(符号名)或者EXPORT_SYMBOL_GPL(符号名)导出符号到内核符号表中,对应的内核符号表文件在/proc/kallsysms,它记录了符号以及所在的内存地址。


5.模块声明与描述
MODULE_AUTHOR(author);//模块作者
MODULE_VERSION(version);//模块版本
MODULE_ALIAS(alternate_name);//模块别名
MODULE_DESCRIPTION(description);//模块描述
MODULE_LICENSE(license);//模块license
MODULE_DEVICE_TABLE(table_info);//模块设备列表
MODULE_INFO(tag,info)//用户添加tag=info信息

模块声明真正底层宏是MODULE_INFO,其他的宏其本质也是调用这个红来给指定变量赋值,比如MODULE_AUTHOR(my)本质是将MODULE_INFO(author,my)


6.参考资料

书籍《Linux设备驱动开发((法)约翰·马迪厄(John Madieu)》

书籍《Linux设备驱动开发详解:基于最新的Linux 4.0内核》

不足之处,敬请指出,谢谢^_^


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值