19.Linux驱动程序原理
华南理工MSE嵌入式课件
Linux驱动程序原理陈虎 tommychen74@http://www.77cn.com.cn
华南理工MSE嵌入式课件
参考数目Johnathan Corbet等著, 魏永明等译,Linux 设备驱动程序,中国电力出版社,2006年
华南理工MSE嵌入式课件
什么是驱动程序设备驱动程序是操作系统内核和机器硬件之间的接口, 为应用程序屏蔽了硬件的细节. 在应用程序看来,硬件设备只是一个设备文件,应用程 序可以像操作普通文件一样对硬件进行操作.设备驱动 程序主要完成这些功能: 探测设备和初始化设备; 从设备接收数据并提交给内核; 从内核接收数据送到设备; 检测和处理设备错误.
嵌入式设备往往具有大量独有的外设,开发人员需要把 很多精力放在设备驱动方面.
华南理工MSE嵌入式课件
Linux中设备类型字符型设备 字符设备的读写以字节为单位,存取时没有缓存. 对字符设备发出读写请求时,实际的硬件I/O紧接着就发生了.一般来说,字符 设备不支持随机访问. 典型的字符设备包括鼠标,键盘及串行口等.
块设备. 块设备读写以块为单位,典型的块大小为512或1024字节. 利用一块系统内存作为缓冲区,当用户进程对设备发出读写请求时,驱动程序先 察看缓冲区中的内容,若缓冲区中的数据能满足用户的要求就返回相应的数据, 否则就调用相应的请求函数来进行实际的I/O操作,以提高效率. 块设备主要包括硬盘,软盘,CD-ROM等.
网络设备 Linux的网络系统主要基于BSD Unix的Socket机制.在系统和驱动程序之间定义 有专门的数据结构进行数据的传递.系统里支持对发送数据和接收数据的缓存, 提高流量控制机制,提供对多协议的支持.
华南理工MSE嵌入式课件
驱动程序的公共特征读写 几乎所有设备都有输入和输出. 操作系统定义一些读写接口,由驱动程序完成具体的读写操作. 在驱动程序初始化时,需要把具有这种接口的读写函数注册到操作 系统中. 中断 驱动程序把一个中断处理程序注册到系统中去,操作系统在硬件中 断发生后调用驱动程序中的中断处理程序. 时钟 在实现驱动程序时,很多地方会用到时钟,如某些协议里的超时处 理等.操作系统应该为驱动程序提供定时机制,一般是在预定的时 间过去以后回调注册的时钟函数.
华南理工MSE嵌入式课件
设备文件每个设备对应一个文件,放在/dev目录下 每个设备文件都对应有两个设备号,存放在inode节点中 主设备号标示设备的种类,也标识了该设备所使用的驱动程序; 次设备号标识了使用同一设备驱动程序的不同硬件设备. 一些典型的设备: 设备名 类型 主设备号 从设备号 说明 /dev/fd0 块设备 2 0 软盘 /dev/hda 块设备 3 0 第一个IDE硬盘 /dev/ttyp0 字符设备 3 0 控制终端 /dev/ttys0 字符设备 4 64 第一个串口 创建一个设备节点 mknod /dev/hda1 b 8 0
华南理工MSE嵌入式课件
字符设备文件的数据结构
华南理工MSE嵌入式课件
驱动程序的注册与注销设备驱动程序可以在系
统启动时初始化,也 可以在需要时动态加载. 字符设备初始化由chr_dev_init()完成 块设备初始化由blk_dev_init()完成
从内核中注销设备时,还需要通过 字符设备unregister_chrdev() 块设备unregister_blkdev()
华南理工MSE嵌入式课件
设备的打开和关闭打开设备是由open()完成的.在大部分驱动程序中, open完成如下工作: 增加设备的使用计数. 检查设备相关错误. 如果是首次打开,则初始化设备. 识别次设备号,如有必要则更新f_op指针.
关闭操作由close()完成的,主要完成以下工作: 递减设备的使用计数. 如果是最后一个释放,则关闭设备.
华南理工MSE嵌入式课件
编写驱动程序的注意事项驱动程序是在内核空间运行 堆栈很小 尽量使用静态变量 不能使用标准的Linux库函数调用!!!只能使用 Linux Linux内核提供的函数接口 必须具有正确版本的编译器和操作系统内核
华南理工MSE嵌入式课件
AD转换器的驱动程序分析基本数据结构 static struct file_operations s3c2410_fops = { owner: THIS_MODULE, open: s3c2410_adc_open, read:s3c2410_adc_read, write: s3c2410_adc_write, release: s3c2410_adc_release, }; typedef struct { struct semaphore lock; //互斥锁 wait_queue_head_t wait; //等待队列 int channel; //当前通道号 int prescale; //比例因子 }ADC_DEV;
华南理工MSE嵌入式课件
驱动程序注册#include <linux/module.h> #define DEVICE_NAME "s3c2410-adc" static int adcMajor = 0; int __init s3c2410_adc_init(void){ int ret; ADCTSC = 0; //XP_PST(NOP_MODE); ret = request_irq(IRQ_ADC_DONE, adcdone_int_handler, SA_INTERRUPT, DEVICE_NAME, NULL); if (ret) return ret; ret = register_chrdev(0, DEVICE_NAME, &s3c2410_fops); if (ret < 0) return ret; adcMajor=ret; #ifdef CONFIG_DEVFS_FS …… #endif printk (DEVICE_NAME"\tinitialized\n"); return 0; } module_init(s3c2410_adc_init);
华南理工MSE嵌入式课件
重要注解指定初始化的宏 __init, __initdata, __exit, __exitdata
模块的初始化函数和注销函数 #include<linux/module.h> module_init(init_function); module_exit(cleanup_function);
在内核中打印 printk(const char *fmt, …);
华南理工MSE嵌入式课件
设备注册函数int register_chdev(unsigned int major, const char *name, struct file_operations *fops); major:主设备号 name:驱动程序名称(出现在/proc/devices中) fops: 文件操作表
相关代码ret = register_chrdev(0, DEVICE_NAME, &s3c2410_fops); if (ret < 0) return ret; adcMajor=ret;
华南理工MSE嵌入式课件
驱动程序申请中断int request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *), unsigned long irq_flags, const char * devname, void *dev_id); irq: 要申请的中断号; handler: 中断处理函数指针; irq_flags: 中断管理掩码; devname:设备名称; dev_id:设备相关的私用存储区,用于标示自身 例子中的程序: ret = request_irq(IRQ_ADC_DONE, adcdone_int_handler, SA_INTERRUPT, DEVICE_NAME, NULL);
华南理工MSE嵌入式课件
设备注销void __exit s3c2410_adc_exit(void) { #ifdef CONFIG_DEVFS_FS …… #endif unregister_chrdev(adcMajor, DEVICE_NAME); //释放中断 free_irq(IRQ_ADC_DONE,
NULL); } module_exit(s3c2410_adc_exit);
…… 此处隐藏:1941字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [说明书]浅谈视觉传达设计中的色彩艺术
- [说明书]数据库原理-实验8-查询优化
- [说明书]临时用电施工组织设计
- [说明书]反假币考试试题第二套(人民币)
- [说明书]《建设工程监理规范》-2014.3.1实施
- [说明书]筋出槽,骨错缝病机诠释
- [说明书]百度预计来路对网站权重有多大影响
- [说明书]房屋面积测绘细则
- [说明书]计算机控制技术填空题汇总
- [说明书]乡镇卫生院(社区中心)死亡医学证明管
- [说明书]2013尾矿工实操试题
- [说明书]2015事业单位面试备考:贵州省事业单位
- [说明书](目录)2017-2022年半导体材料市场发
- [说明书]浙江省制造业发展“十三五”规划
- [说明书]干部选拔任用工作情况的自查报告
- [说明书]《发电厂电气部分》课后部分问答题整理
- [说明书]中国建立政府成本会计制度的思考
- [说明书]中国文化输出的现状及挑战-100分
- [说明书]通信原理实验指导(13-9)
- [说明书]HSF培训试卷(有害物质培训考试试题)
- 高中地理必修一:2.3《大气环境之六_气
- 新人教版八年级数学上期末总复习精品优
- WEB应用托管平台系统架构
- 《应用文写作》期末试卷
- 2017年秋九年级数学上册24.3正多边形和
- _空心村_形态特征与生成机理分析_以河
- 北师大版生物七年级下册12章2节感受器
- 社区卫生服务中心主任职责
- 广东省2014届广州二模材料作文“求道”
- 完整户口本英文翻译模板
- 2015年液化天然气LNG市场调研及发展趋
- 农村学校教育发展新
- 2014年注册税务师税法(Ⅱ)考试试题及答
- 东方大学俄语新版第5册第-7课课文翻译
- 路基路面工程课程设计1
- 219亩项目2011营销策略
- 第1篇 贸易术语-EXW、FCA、FAS
- 年会或大型活动防疫应急预案
- 改善提案(合理化建议)
- 初三英语第四单元ppt




