第7章 模块编程实验02.ppt

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

成都信息工程学院 徐虹 成都信息工程学院 徐虹 成都信息工程学院 徐虹 成都信息工程学院 徐虹 成都信息工程学院 徐虹 成都信息工程学院 徐虹 成都信息工程学院 徐虹 成都信息工程学院 徐虹 成都信息工程学院 徐虹 成都信息工程学院 徐虹 成都信息工程学院 徐虹 第七章 模块编程实验 模块作为一种抽象数据类型,它具有一个可以通过静态内核中断的接口。最小的模块结构必须包括两个函数:init_module()和cleanup_module(),它们在系统加载模块和卸载模块时被调用。也可以编写一个只包括这两个函数的模块,这样该模块中唯一会被调用的函数就是模块被加载时所调用的函数init_module()和模块被卸载时所调用的函数cleanup_module()。并且用函数init_module()来启动模块加载期间的操作,用函数cleanup_module()来停止这些操作。 由于模块可以实现相当复杂的功能,故可以在模块中加入很多新函数以实现所期望的功能。不过加入模块的每个新函数都必须在该模块加载到内核中时进行注册。若该模块是静态加载的,则该模块的所有函数都是在内核启动时进行注册;若该模块是动态加载的,则这些新函数必须在加载这个模块时动态注册。当然,如果该模块被动态卸载了,则该模块的函数都必须从系统中注销。通过这种方式,当这个模块不在系统中时,就不能调用该模块的函数。其中注册工作通常是在函数init_module()中完成的,而注销工作则是在函数cleanup_module()中完成。 7.2.1 模块的组织结构 #include linux/kernel.h // 说明是个内核功能 #include linux/module.h // 声明是一个模块 … …  // 其它header信息 int init_module( ) { … … // 加载时,初始化模块的编码 } … … … … // 期望该模块所能实现的一些功能函数,如open()、 release()、write()、 read()、ioctl()等函数 … … void cleanup_module( ) { … … // 卸载时,注销模块的编码 } 一般编译模块文件的命令格式如下: #gcc -O2 –g -Wall -DMODULE -D__KERNEL__ -c –f -I/usr/src/ linux-2.4/include filename.c //filename.c为自己编写的模块程序源代码文件 7.2.2 模块的编译 两种方式:insmod, kerneld Insmod的工作过程:内核函数create_module() ? get_kernel_syms() ? 分配内存并将模块加入到模块链表 ? init_module()加载模块文件 ? 将新模块设置为RUNNING 模块加载成功后,可以在/proc/modules找到新模块。 7.2.3 模块的加载 Rmmod命令和kerneld内核进程 Cleanup_module() 7.2.4 模块的卸载 图7-1 模块链接到内核的示意图 7.2.5 模块链接到内核的示意图 在内核是用一个file结构来识别模块,而且内核使用file_operations结构来访问模块程序中的函数。file_operations结构是一个定义在linux/fs.h中的函数指针表。管理模块的文件操作,通常也称为“方法”,它们都为struct file_operations提供函数指针。在struct file_operations中的操作一般按如下顺序出现,除非特别说明,一般它们返回0值时表示访问成功;发生错误时会返回一个负的错误值(目前共有13个操作): int (*lseek) ()、 int (*read)()、int (*write) () int (*readdir)()、int (*select)()、 int (*ioctl)() int (*mmap)()、int (*open)(

文档评论(0)

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

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

1亿VIP精品文档

相关文档