- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
驱动程序介绍 设备驱动1
驱动分类
——字符设备驱动
字符设备:字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常实现open,close,read,write系统调用。
——块设备驱动
块设备:——在大部分的unix系统,块设备不能按字节处理数据,只能一次传送一个活多个长度是512字节(或一个更大的2次幂的数)的整块数据。
——而linux则允许块设备传送任意数目的字节。因此,块和字符设备的区别仅仅是驱动的与内核的接口不同。
——网络接口驱动
网络接口:任何网络事务都通过一个接口来进行,一个接口通常是一个硬件设备(eth0),但是它也可以是一个纯粹的软件设备,比如回环接口(lo)。一个网络接口负责发送和接收数据报文。
字符设备与块设备的区别:块设备是可以进行随机访问的,而字符设备不能。在linux系统中,块设备也可以进行字节访问。
驱动程序安装
——模块方式
——直接编译进内核:修改Kconfig、修改Makefile,即可。
将要编译进内核的代码(比如hello.c)cp进内核源码树的/kernel/drivers/char。在char目录下改写Kconfig。然后再make menuconfig的时候便能看见hello world项(Kconfig是用来在menuconfig中增加菜单的,menuconfig配置后的结果保存在.config中);再修改/char目录下的Makefile添加obj-$(CONFIG_HELLO_WORLD) +=hello.o(Makefile根据配置去选择CONFIG_HELLO_WORLD的值)。如此之后便能编译内核了(进入源码树编译)。编译好的内核位于arch/arm/boot/uImage
驱动程序使用
A:linux用户程序通过设备文件(又名:设备节点)来使用驱动程序操作字符设备和块设备
Q:设备(字符、块)文件在何处?——在/dev/目录下
字符设备驱动程序 1.设备号 2.创建设备文件 3.设备注册 4.重要数据结构 5.设备操作
主次设备号
字符设备通过字符设备文件来存取。字符设备文件由使用ls –l的输出的第一列的“c”标识。如果使用ls –l命令,会看到在设备文件项中有2个数(由一个逗号分隔)这些数字就是设备文件的主次设备编号(举例说明,进入/dev/目录,ls –l)
Q:内核中如何描述设备号?
A:dev_t 其实质为unsigned int 32位整数,其中高12位(4K)为主设备号,低20位(64K)为次设备号
Q:如何从dev_t中分解出主设备号?
A:MAJOR(dev_t dev)
Q:如何从dev_t中分解出此设备号?A:MINOR(dev_t dev)
设备号
每个设备文件对应有自己的设备号
驱动程序也有自己的设备号
如果两者的设备号对应相同,那么设备文件便和设备驱动建立关联
设备号作用
——主设备号用来标识与设备文件相连的驱动程序。次编号被驱动程序用来辨别操作的是哪个设备。
主设备号用来反映设备类型
此设备号用来区分同类型的设备
分配主设备号
Linux内核如何给设备分配主设备号?——静态申请和动态分配两种方法
静态申请
——方法:1.根据documentation/devices.txt,确定一个没有使用的主设备号
2.使用register_chrdev_region函数注册设备号
——优点:简单
——缺点:一旦驱动被广泛使用,这个随机选定的主设备号可能会导致设备号冲突,而使驱动程序无法注册。
int register_chrdev_region(dev_t from, unsigned count, const char *name)
功能——申请使用从from开始的count个设备号(主设备号不变,次设备号增加)
参数——from:希望申请使用的设备号
——count:希望申请使用设备号数目
——name:设备名(体现在/proc/devices)
动态分配(让内核自动来分)
——方法:使用alloc_chrdev_region分配设备号
——有点:简单,易于驱动推广(因为内核知道哪些驱动有没使用)
——缺点:无法在安装驱动前创建设备文件(因为安装前还没有分配到主设备号)
——解决办法:安装驱动后,从/proc/devices中查询设备号
Intalloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char*name)
——功能:请求内核动态分配count个设备号,且次设备号从baseminor开始
——参数:dev:分配到的设备号
Baseminor:起始设备号
Count:需要分配的设备号数目
Nam
您可能关注的文档
最近下载
- 初中物理(粤沪版)公式大全最新版2016.doc VIP
- 2024年山西晋城市人民医院招聘笔试参考题库含答案详解.pdf
- 2025年第六届全国国家版图知识竞赛题库及答案(超全题库).doc
- 2025年时事政治热点题库及完整答案(历年真题).docx VIP
- 年产2.3亿片阿司匹林片剂生产车间工艺设计.doc
- HOLLiAS MACS V6.5.2用户操作手册(火电版).pdf
- 宜昌市西陵区社工招聘笔试真题 .pdf
- 四川超高层商务楼脚手架专项施工方案(三排落地式脚手架).doc VIP
- NexION1000-2000系列简易操作指南.doc VIP
- 肿瘤专科护士理论知识考试题库600题(含答案).docx
文档评论(0)