- 1、本文档共55页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二部分 实 验 指 导 第二部分 实 验 指 导 7.1 实验目的 7.2 准备知识 7.2.1 设备驱动程序简介 图7-1 字符(块)设备、驱动程序和接口 7.2.2 设备驱动程序与外界的接口 7.2.3 设备驱动程序的组织结构 图7-2 设备驱动程序与外界的接口 7.2.4 设备驱动程序的代码 #include linux/fs.h #include linux/errno.h int register_chrdev(unsigned int major,const char *name, struct file_operations *ops); struct blk_dev_struct { // queue_proc 指向的队列必须为原子操作,即指令的执行是一次性完成的,不能间断 request_queue_t request_queue ; queue_proc *queue ; void *data ; }; struct blk_dev_struct blk_dev[MAX_BLKDEV] 图7-3 blk_dev_struct static struct { const char *name; struct block_device_operations *bdops; } blkdevs[MAX_BLKDEV]; int register_blkdev(unsigned int major,const char *name,struct block_device_ operations *bdops); ? 图7-4 块设备驱动程序的注册 7.3 实验内容 7.3.1 字符类型设备的驱动程序 7.3.2 块类型设备的驱动程序 7.4 实验指导 7.4.1 字符类型设备驱动程序 struct device_struct{ const char *name; struct file_operations *chops; }; static struct device_struct chrdevs[MAX_CHRDEV]; typedef struct Scull_Dev { void **data; int quantum; // 当前容量的大小 int qset; // 当前数组的大小 unsigned long size; unsigned int access_key; // 由sculluid 和scullpriv 使用的存取字段。 unsigned int usage; // 当字符设备使用时加锁 struct Scull_Dev *next; // 指针指向下一字符设备 }scull static int scull_open(struct inode *inode,struct file *filp);// 打开字符设备 static int scull_release(struct inode *inode,struct file *filp); // 释放字符设备 static ssize_t scull_write(struct inode *inode,struct file *filp,const char *buffer,int count); // 将数据送往字符设备 static ssize_t scull_read(struct inode *inode,struct file *filp,char *buffer,int count); // 从字符设备读出数据,写入用户空间 static int scull_ioctl(struct inode *inode,struct file *filp,unsigned long int cmd,unsigned long arg); // 字符设备的控制操作 struct file_operations chr_fops = { NULL, /
文档评论(0)