试验八增加新的设备驱动程序.PPT

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

实验三 增加新的设备驱动程序 实验三 增加新的设备驱动程序 预备知识 Linux设备分类 Linux设备文件 Linux设备驱动 实验指导 设备驱动函数 模块方式动态加载 编译时静态加载 实验目的、内容 1.1 Linux设备分类 字符设备 通过位于/dev目录的文件系统结点来存取 映射为chrdevs向量表中的device_struct条目 大部分字符设备是数据通道,只能顺序存取 直接对设备进行读写操作 块设备 通过/dev目录的文件系统结点存取,分为SCSI类和IDE类 填充blk_dev向量表中的blk_dev_struct数据结构 利用系统内存作为缓冲区在设备与内存间传送数据 网络设备 类似于一个已挂载的块设备 基于BSD Unix的Socket机制 1.2 Linux设备文件 把物理设备看成文件,将各种设备硬件的物理特性的细节屏蔽起来,实现用户程序与设备的无关性 三类设备文件:字符设备文件(c)、块设备文件(b)、网络设备文件(s) 设备文件命名规则 第一部分:主设备号,2-3个字符,表示设备的种类(驱动) 第二部分:次设备号,字母或数字,用于区分同种设备中的单个设备 通过proc文件系统访问相应的驱动程序 1.3 Linux驱动程序 驱动程序加载方式 常见的驱动程序作为内核模块动态加载(如声卡、网卡等) 最基础的驱动程序编译在内核文件中(如CPU、PCI总线、VFS等) 驱动加载时的模块命令 模块加入:insmod modulename.ko 查看模块:lsmod 删除模块:rmmod modulename 实验三 增加新的设备驱动程序 预备知识 Linux设备分类 Linux设备文件 Linux设备驱动 实验指导 设备驱动函数 模块方式动态加载 编译时静态加载 实验目的、内容 2.1 添加设备驱动程序 注册设备:向系统登记设备及驱动程序的入口点 int register_chrdev (unsigned int major, const char *name, struct file_operations *fops); //向系统的字符设备表登记一个字符设备 //major:希望获得的设备号,为0时系统选择一个没有被占用的设备号返回。 //name:设备名 //fops:登记驱动程序实际执行操作的函数的指针 //登记成功,返回设备的主设备号,否则,返回一个负值 int register_blkdev (unsigned int major, const char *name, struct file_operations *fops); //向系统的块设备表登记一个块设备 添加设备驱动程序(续) 设备卸载 int unregister_chrdev (unsigned int major, const char *name); //卸载字符设备 //major:要卸载设备的主设备号 //name:设备名 int unregister_blkdev (unsigned int major, const char *name); //卸载块设备 添加设备驱动程序(续) Linux系统采用一组固定的入口点来实现驱动设备的功能。 open入口点: 打开设备。对将要进行的I/O操作做好必要的准备工作,如清除缓冲区等 close入口点: 关闭一个设备 read入口点: 从设备上读数据 write入口点: 往设备上写数据 ioctl入口点: 执行读、写之外的操作 select入口点: 检查设备,看数据是否可读或设备是否可用于写数据 添加设备驱动程序 内核模块(LKM, Loadable Kernel Modules) Linux核心是一种monolithic类型的内核,即单一的大核心 linux内核是一个整体结构,因此向内核添加或者删除某些功能,都十分困难。为了解决这个问题,引入了模块机制,从而可以动态的在内核中添加或删除模块 添加设备驱动程序(续) 模块的实现机制 模块初始化(注册) int init_module( ){ }; 模块卸载(注销) int cleanup_module( ){ }; 操作 unsigned long sys_create_module (char *name, unsigned long size); //重新分配内存 int sys_delete_module (char *name); //卸载 int sys_query_module (const char *name, int which, void *buf, size_t bufsize, size_t *

文档评论(0)

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

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

1亿VIP精品文档

相关文档