- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linx设备驱动开发
Linux设备驱动开发 * 每个设备文件都都有其文件属性(c/b),表示是字符设备还是块设备。 每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们。设备文件的的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序。 * 一 Linux设备驱动程序分类 字符设备 块设备 网络设备 * 字符设备 字符设备是顺序读取和写入的。 块设备 面向大量数据传输或慢速设备,可节省CPU的等待时间。对块设备进行读写操作时,需要先开辟一段内存缓冲区。 两者的主要区别是在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就调用请求函数来进行实际的I/O操作。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。 * 二 Linux驱动程序的加载方式 驱动程序直接编译进内核 采用这种方式编译的驱动程序在内核启动时就已经在内存中,运行时不需要再自己加载驱动。 这需要修改config.in和makefile脚本。 驱动程序的模块加载 驱动程序以模块的形式存储在文件系统中,需要时动态载入内核。不用时节省内存,且独立于内核,升级方便。 在嵌入式系统中,主要在开发阶段采用这种方式。 * 三 Linux 2.4和2.6内核设备驱动的区别 在linux2.4内核以前,系统一直利用设备类型和设备的主次设备号管理设备; linux2.4后,引入了设备文件系统(devfs) Linux2.6内核中,引入udev设备文件系统; * 3.1 devfs设备文件系统 可以通过程序在设备初始化时在/dev目录下创建设备文件,卸载时删除。 设备驱动程序可以指定设备名,所有者和权限位 可以不需要为设备驱动程序分配主设备号以及处理次设备号,可以直接给register_chrdv()传递0主设备号以动态获取主设备号,并在devfs_register()中指定次设备号. * 3.1 devfs设备文件系统 驱动程序调用如下函数进行设备文件的创建和删除工作。 1 创建设备目录 devfs_handle_t devfs_mk_dir(devfs_handle_t dir , const char *name , void *info); 2创建设备文件 devfs_handle_t devfs_register(devfs_handle_t dir , const char *name , unsigned int flags , unsigned int major , unsigned int minor , umode_t mode , void *ops , void *info); 3注销设备文件 void devfs_unregister(devfs_handle_t dir); * 3.1 devfs设备文件系统 static int _init example(void) { int ret = -enodev ; int delay ; //注册字符型设备 ret = devfs_register_chrdev(MAJOR, “chardevice”,chadevice_ops); if(ret0){} else{} //注册devfs设备 dev_handle = devfs_register(null , “chardevice”,DEVFS_FL_DEFAULT, ,0,,chardevice_ops , null ); return ret; } //chardevice设备向系统注册的OPS结构: struct file_operations chardevice_ops={ open:open, read:read, write:write, loctl:ioctl, colse:release, } * 3.2嵌入式linux驱动程序常用的头文件 #include linux/config.h //内核编译的配置文件 #include linux/module.h //模块驱动程序的头文件 #include linux/kernel.h #include linux/fs.h #include linux/init.h #include linux/devfs_fs_kernel.h #include linux/miscdevice.h #include linux/delay.h #include linux/version.h * 3.3 file_oper
您可能关注的文档
- GPON技巧培训顾生华.ppt
- GWD第一套详细解答版绝密.doc
- hap配置及运行过程中遇到的问题及解决方案.doc
- HAY华为公司优秀研发员工的素质模型.doc
- Hffman编码与解码.doc
- GSTDJ6319B 8 16层间分配器安装使用说明书B2910579580AS Ver102 03.doc
- Hffman编码与解码实现文件压缩与解压.doc
- hffman编码与解码实现文件压缩与解压缩.doc
- Hffman编码及解码.doc
- g垫片造型.ppt
- Haier海尔413升风冷变频多门冰箱 BCD-413WGHFD1BSJU1(白)说明书用户手册.pdf
- Siemens西门子工业抽屉式断路器主回路后垂直连接 抽屉式断路器主回路后垂直连接使用手册.pdf
- Samsung三星智能佩戴设备 Galaxy Fit3安全手册.pdf
- Samsung三星滚筒洗衣机 AI神 黑钻热泵洗烘旗舰 WD18DB8995BZSC使用手册.pdf
- Sakura樱花消毒柜 保洁柜消毒柜 SCQ-130D6用户手册说明书.pdf
- Hifiman头领科技ARYA UNVEILED说明书用户手册.pdf
- Siemens西门子工业抽屉式主回路连接前置端子 支撑件 抽屉式主回路连接前置端子 支撑件使用手册.pdf
- Siemens西门子工业中性线的外部电流传感器 中性线的外部电流传感器使用手册.pdf
- Siemens西门子工业电子脱扣单元 电子脱扣单元使用手册.pdf
- Razer雷蛇Playstation 专用雷蛇战锤狂鲨极速版 RZ12-038203 用户指南 (简体中文)说明书用户手册.pdf
最近下载
- 腰椎的解剖及腰部的层次解剖ppt参考课件.ppt
- 知识产权助推新质生产力发展.pptx VIP
- NB∕T 10805-2021 水电工程溃坝洪水与非恒定流计算规范.pdf
- 2022年鄄城县工会系统招聘考试题库及答案解析.docx VIP
- 2024年医师定期考核必考题库及答案.pdf
- 2023年互联网信息审核员理论考试题库(含答案).pdf VIP
- 2024中考语文《西游记》历年真题专练(学生版+解析版).pdf VIP
- 高中音乐鉴赏测试题.doc VIP
- 人教三上数学《数学广角—集合》单元作业设计方案(13页).pdf VIP
- 省级政府和重点城市一体化政务服务能力调查评估报告2021年.pdf VIP
文档评论(0)