- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
西安交通大学计算机系 动态模块与设备驱动 2011.3 Linux的动态模块 动态模块的组成 模块的组织 #include linux/kernel.h// 说明是个内核功能 #include linux/module.h // 说明是个模块 // 其他header信息 int init_module()// 声明是一个模块 {...// 加载时,初始化模块的编码 }...// 期望实现的其它功能,如read()、ioctl()等函数 void cleanup_module() { ... // 卸载时,注销模块的编码 } 模块编译与加卸载 模块的编译 #gcc ?O2 ?g ?Wall ?DMODULE ?D __KERNEL__ ?c filename.c // filename.c为自己编写的模块程序源代码文件 模块的加载 insmod命令 模块的查看 lsmod more /proc/modules dmesg ——查看日志(printk) 模块的卸载 rmmod命令 模块编程_示例1 一个例子testmodule.c #define MODULE #include linux/module.h #include linux/kernel.h #if CONFIG_MODVERSION==1 #define MODVERSIONS #include linux/modversions.h #endif int init_module() {printk(Hello! This is a testing module!\n); return 0; } void cleanup_module() {printk(Sorry! The testing module is unloading now!\n); } 模块编程 模块的编译、加载与卸载 编译 # gcc ?O2 ?g ?Wall ?DMODULE ?D__KERNEL__?c testmodule.c // testmodule.c为自己编写的模块程序源代码文件 加载 #insmod –f testmodule.o 查看 #lsmod #cat /proc/modules #dmesg 卸载 #rmmod testmodule 模块编程—演示 V2.4 /home/yms/mod.c mod.o V2.6 /home/yms/mymodules.c mymodules.ko 模块编程_示例2 系统调用的篡改 模块程序 mod_sys.cmod_sys.o 用户程序 myuser.c可执行程序 myuser Linux的设备驱动 实验目的 了解Linux操作系统中的设备驱动程序的组成 编写简单的字符设备驱动程序并进行测试 理解Linux操作系统的设备管理机制 设备种类繁多,但具有通用性 采用通用接口,屏蔽实现细节 设备驱动程序 控制设备的操作 为内核提供统一的操作接口 准备知识 字符设备 键盘——键盘驱动程序 串口——串口驱动程序 并口——并口驱动程序 显卡——显卡驱动程序 块设备 磁盘——磁盘驱动程序 软盘——软盘驱动程序 光盘——光盘驱动程序 优盘——优盘驱动程序 Linux设备驱动的特点 内核代码 内核代码的一部分,驱动程序出错,可能会导致系统崩溃 内核接口 为内核和其它子系统提供一个标准的接口 内核机制与服务 使用一些标准的内核服务,如内存服务 可装载 模块装卸载 可设置 可集成为内核的一部分,在编译前设置 动态性 设备不存在,也不影响系统的运行 Linux设备驱动程序与外界的接口 驱动程序与操作系统内核的接口 通过数据结构file_operations来完成 驱动程序与系统引导的接口 利用驱动程序对设备进行初始化 驱动程序与设备的接口 描述驱动程序如何与设备进行交互 主设备号和次设备号 设备文件除文件名和设备类型外的两个主要属性 主设备号( major ) 指名唯一的设备类型,即表示设备对应的驱动程序类型,它是块设备表和字符设备表中表项的索引。大多情况下,一个主设备号对应一个设备驱动程序 次设备号(minor) 用于在一组主设备号相同的设备之间唯一标识特定的设备,如两个相同的硬件就可用次设备号予以区分 设备文件的VFS处理 用户(通过函数)访问文件 普通文件——文件系统将用户的操作转换成对磁盘分区的数据块操作 设备文件——文件系统将用户的操作转换成对设备的驱动操作 VFS中,每个文件都有一个inode 与其对应,内核的inode结构中的i_fop成员,类型为file_operations file_operations定义了文件的各种操作 用户对文件操作时通过调用f
文档评论(0)