Linux 内核模块 proc文件系统.pdf

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux 内核模块 proc文件系统

Linux内核模块 proc文件系统 Linux内核模块 §  内核模块是内核的扩展,它供了在内核运 行过程中动态加载的特性. §  模块被加载进系统后,就在内核态下运行了, 成了内核的一部分,可以读写内核数据结构. §  内核模块通常用来实现设备驱动程序. 模块的工作原理 §  模块运行Linux内核空间 §  内核符号表保存了内核导出一些符号(APIs和全 局变量) §  内核动态的加载模块,模块导出的所有符号成为 内核符号表的一部分 §  模块可以使用导出的符号 §  /proc/kallsyms 记录了所有的符号 EXPORT_SYMBOL(name) EXPORT_SYMBOL_GPL(name) Hello World例子(2.6 内核模块) #include linux/init.h #include linux/module.h MODULE_LICENSE(Dual BSD/GPL); static int hello_init(void) { printk(KERN_ALERT Hello, world\n); return 0; } static void hello_exit(void) { printk(KERN_ALERT Goodbye, cruel world\n); } module_init(hello_init); module_exit(hello_exit); 模块初始化和释放 §  模块的初始化函数负责注册模块所供的 任何设施. §  module_init在模块的目标代码中增加一个 特殊的段,用于说明内核初始化函数所在的 位置 static int __init initialization_func(void) { /*初始化代码*/ } module_init(initialization_func); §  清除函数,该函数在模块被移除前注销接口并向系 统返回所有资源 §  module_exit 帮助内核找到模块的清除函数,如 果一个模块未定义清除函数,内核就不允许卸载该 模块 §  宏 __init 和 __exit可以使函数在运行完成后自动 回收内存 static void __exit cleanup_func(void) { /*这里是清除代码*/ } module_exit(cleanup_func) 编译模块(2.6 内核) §  必须使用Makefile §  Makefile文件 obj-m := hello.o §  编译命令 make –C ~/kernel-2.6 M=`pwd` modules §  obj-m := Module.o表示编译后生成Module.ko模块 §  -C 内核源码路径 M= 外部模块 `pwd`该模块文件 所在路径 命令 §  insmod 加载模块 §  rmmod 卸载模块 §  lsmod 列出当前系统所有已加载模块 §  modinfo 查看模块信息 §  dmesg 查看内核系统日志 模块相关宏 §  模块参数 module_param(变量名称,类型,sysfs入口项访 问许可掩码) §  参数值在insmod装载模块时赋值 §  模块说明相关宏 Ø  MODULE_LICENSE() 说明代码许可类型 Ø  MODULE_DESCRIPTION() 模块述 Ø  MODULE_AUTHOR() 作者 Ø  MODULE_VERSION()模块版本 内存操作 §  内核空间与用户空间 §  内核空间与用户空间的数据交换 get/put_user(x, ptr) cop

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档