版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统课程设计,专题四:设备驱动 李航 ,1,Abstract,2,实验要求,设备驱动举例,3,2,1. Linux设备驱动程序,3,Linux设备分类,字符设备 (character devices) 以字符为单位进行I/O操作; 只能顺序存取; 无需缓冲区; 如: Keyboard, Serial Port 块设备 (block devices ) 以固定大小的数据块为单位进行I/O操作;数据块可以被随机存取; 需要一定内存做为缓冲区; 如:HD, CDROM, Floppy 网络设备 (Network devices) 面向数据包的传输设备 在文件系统中没有相应的inode表示,只有一
2、个符号名, 如eth0。,4,Linux将硬件设备看做一类特殊的文件(/dev/*): 设备文件是逻辑概念,是应用访问设备的途径;代表一个驱动程序的入口及与之相关联的数据结构; 设备是实体。 设备文件操作 为设备编写几个基本的函数,向VFS注册就可以完成设备驱动程序;安装设备驱动程序就是将该设备的操作函数集在内核中注册。 /proc/devices列出系统当前的设备。,int fd = open(“/dev/null”, O_WRONLY); write( fd, “1234567890”, 10 ); close( fd );,设备文件,5,设备文件,设备文件的3个基本属性: 类型: Blo
3、ck or character 主设备号(Major number) Identifies the device type and range from 1 to 255; associated with each device driver major.h中定义了主设备号 次设备号(Minor number) 区分使用同一驱动程序的不同设备。 创建设备文件: mknod /dev/foo b 60 0 例:运行命令 ls -l /dev/hda* /dev/tty012 查看设备的3个属性,brw-rw- 1 root cdrom 3, 0 May 6 1998 hda brw-rw- 1
4、root disk 3, 1 May 6 1998 hda1 brw-rw- 1 root disk 3, 2 May 6 1998 hda2 brw-rw- 1 root disk 3, 3 May 6 1998 hda3 crw- 1 root root 4, 0 Dec 29 09:55 tty0 crw- 1 root root 4, 1 Dec 29 09:56 tty1 crw- 1 root root 4, 2 Dec 29 09:56 tty2,Documentation/devices.txt,6,设备驱动程序,用户进程,V F S,设备驱动程序,设备控制器,设备本身,用户进
5、程请求设备服务流程图,用户进程发出I/O请求,系统将请求处理下传到VFS上; VFS通过驱动程序提供的接口将任务分配到驱动程序; 驱动程序根据需要对设备控制器进行操作; 设备控制器去控制设备。,设备制造商范围,OS可管辖范围,7,物理文件系统层,VFS,MINIX,EXT2,MSDOS,用户进程,内核其他子系统,内 核 空 间,用户空间,VFS,设备驱动程序,设备缓存,VFS对上提供统一接口和数据表示,对下管理物理 FS,VFS,对上:提供通用接口和数据表示,对下:管理各物理文件系统,8,设备驱动程序,组成 设备服务子程序 每个服务子程序只处理一种设备或与其紧密相关的设备; 从与设备无关的软件
6、中接受抽象的命令并执行; 中断处理程序 主要用来检测I/O操作是否完成,以唤醒被阻塞的进程。 特点 驱动程序属于内核代码的一部分,运行在内核空间; 向OS内核提供统一接口,便于内核对设备的管理; 在编译内核时,连入内核的设备驱动程序是可以配置的; 多以内核模块方式实现,使系统资源有效利用。,9,设备驱动的注册和管理,内核设备驱动程序表结构(in fs/devices.c) struct device_struct const char *name; / device name struct file_operations * fops; ; 字符设备驱动程序: 设备表:全局数组chrdevs2
7、55,主设备号是它的下标 登记: register_chrdev() / unregister_chrdev() 缺省操作集合: file_ops: def_chr_fops,仅定义了open方法; inode_ops: chrdev_inode_operations, 仅定义了其中的file_operation= / 请求队列 queue_proc *queue; blk_dev255;,11,2. 设备驱动举例,12,假想的字符设备,实现一个字符设备,支持以下功能: 用户可以向设备写入字符串; 用户可以从设备读出写入的字符串; 用户通过系统调用ioctl清除设备中写入的字符串; 测试程序示
8、例,/ process 1: reader char yourmsg1000; int h = open(“/dev/rwbuf”, O_RDONLY); / 打开设备失败时 h 0 int n = read (h, yourmsg, sizeof(yourmsg); / 读设备失败时 n0,n=0 表示文件结束 close(h);,/ process 2: writer char yourmsg1000; int h = open(“/dev/rwbuf”, O_WRONLY); / 打开设备失败时 h 0 int n = write (h, yourmsg, sizeof(yourmsg)
9、+1); / 写设备失败时 n0,否则表示写入的字节数 close(h);,/ process 3: cleaner char yourmsg1000; int h = open(“/dev/rwbuf”, O_RDWR); / 打开设备失败时 h 0 int n =ioctl (h, RW_CLEAR, 0); / 写设备失败时 n0,否则表示成功 close(h);,13,字符设备驱动的实现,/ rwbuf.h, driver for virtual char-device #define DEVICE_NAME “ChrDev_A” #define RWBUF_CLEAR 0 x9090
10、90 / IO Ctrl Command,/ rwbuf.c, driver for virtual char-device #include “rwbuf.h” #include / for kernel programming #include / for kernel module struct. #include / struct file_operations,14,/ rwbuf.c, driver for virtual char-device int init_module() printk(Hello worldn); if ( register_chrdev(60, DEV
11、ICE_NAME, ,字符设备驱动的实现,/ rwbuf.c, driver for virtual char-device static struct file_operations rwbuf_fops = open: rwbuf_open, release: rwbuf_close, read: rwbuf_read, write: rwbuf_write, ioctl: rwbuf_ioctl, ;,15,/ rwbuf.c, driver for virtual char-device void cleanup_module() if (unregister_chrdev( 254,
12、 DEVICE_NAME) !=0 ) printk(unreg errn); else printk(unreg okn); printk(byen); ,字符设备驱动的实现,/ rwbuf.c, driver for virtual char-device static struct file_operations rwbuf_fops = open: rwbuf_open, release: rwbuf_close, read: rwbuf_read, write: rwbuf_write, ioctl: rwbuf_ioctl, ;,16,字符设备驱动的实现,/ rwbuf.c, dr
13、iver for virtual char-device static int inuse=0;/ only one process permited at the same time static int rwbuf_open ( struct inode *inode, struct file * filep ) if (inuse = 1) return -1; inuse = 1; MOD_INC_USE_COUNT;/ increase the use count in struct module return 0; static int rwbuf_close( struct in
14、ode *inode, struct file * filep ) inuse = 0; MOD_DEC_USE_COUNT; return 0; ,17,字符设备驱动的实现,/ rwbuf.c, driver for virtual char-device #define rwbuf_size 200 / MAX size of buffer static char rwbufrwbuf_size; / the buffer keeping string static int rwlen = 0; / length of string static ssize_t rwbuf_write (
15、 struct file * filep, const char *buf, size_t count, loff_t * ppos ) / 判断写入的长度是否有效 copy_from_user(rwbuf, buf, count); / 从用户空间复制到内核空间 rwlen = count; / print some message by printk(); return count; ,18,字符设备驱动的实现,/ rwbuf.c, driver for virtual char-device static ssize_t rwbuf_read( struct file* filep, c
16、har * buf, size_t count, loff_t* ppos) / 判断读取的长度是否有效 copy_to_user( buf, rwbuf, count); / 从内核空间复制到用户空间 / print some message by printk() return count; ,2.6以下版本内核注意: _generic_copy_to_user( buf, rwbuf, count); _generic_copy_from_user(rwbuf, buf, count);,19,字符设备驱动的实现,/ rwbuf.c, driver for virtual char-de
17、vice static int rwbuf_ioctl ( struct inode *inode, struct file * filep, unsigned int cmd, unsigned long arg ) if ( cmd = RW_CLEAR ) rwlen = 0;/ clear buf by set its len to zero printk(rwbuf in kernel zero-edn); break; ; return 0; ,20,字符设备驱动的实现,编译 2.4: gcc -c rwbuf.c -I/usr/src/linux/include -D_KERNEL_ -DMODULE -Wall 2.6: 建立Makefile,其内容为: obj-m := rwbuf.o 然后使用: 转入驱动程序源码所在目录,执行: make C 内核源码目录 M=pwd modules 安装与卸载:mknod /dev/rwbuf c 60 0创建设备文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年呼伦贝尔市海拉尔区(中小学、幼儿园)教师招聘笔试备考题库及答案详解
- 雨污水管网工程沟槽回填施工方案
- 双向拉伸薄膜项目立项报告
- 2026年福建省三明市(中小学、幼儿园)教师招聘笔试模拟试题及答案详解
- 2026浙教版八年级上册科学节水探究报告
- 钠离子储能系统集成测试方案
- 光伏组件PID修复技术施工方案
- 独立储能电站项目环境影响报告书
- 消防报警主机使用手册
- 律师事务所办公物资领用管理制度
- TCAS 1020-2025温室气体产品碳足迹量化方法与要求乘用车空调
- 2026年医院药师招聘考核题库综合试卷及完整答案详解(有一套)
- 软式内镜清洗消毒技术规范WS 507-2025
- T∕CIATCM 132-2025 名老中医经验传承信息系统基本功能规范
- 循证医学:创伤评分课件
- 设备管理员培训
- 贵妇膏产品培训课件
- 行动教育EMBA课程体系
- 遥感技术监测大气污染
- 2025黑龙江齐齐哈尔泰来镇第二次社区工作者招聘44人备考题库附答案
- 2025-2026学年沪教版七年级英语上册(全册)知识点梳理归纳
评论
0/150
提交评论