网站大量收购独家精品文档,联系QQ:2885784924
  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

wuailuo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档