- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
驱动程序介绍 设备驱动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
您可能关注的文档
最近下载
- 小学数学新人教版二年级上册一 第1课时 分类与整理(1)教学课件(2025秋).pptx VIP
- 急性心房颤动中国急诊管理指南(2024).docx VIP
- 神通数据库理论练习试题附答案.doc VIP
- TPM管理培训课件(88).pptx VIP
- 电子及通讯设备制造业遭受美国337调查知识产权贸易壁垒实证分析.pptx VIP
- 《站点工程勘察与设计》课件 1.4.2 站点工程 实施阶段.pptx VIP
- 人力资源共享服务中心(HRSSC)建设方案.pptx VIP
- 《数据库性能调优经验分享》课件.ppt VIP
- 骨科护士出科总结.pptx VIP
- 中职 高教版《数字影音编辑与合成》教案.docx VIP
文档评论(0)