- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
海思SDK驱动部分教程
1,linux驱动程序介绍
1.1 linux驱动程序在系统中的角色
Linux分为用户态和内核态,一般应用程序是在用户态执行,他们通过一系列的系统调用同内核态进行交互。驱动程序是内核与硬件的接口,它把系统调用映射到具体设备对于实际硬件的特定操作上,关系如下图所
通过这种方法,应用程序就可以像操作普通文件一样操作硬件设备,用户程序只需要关心这个抽象出来的文件,而一切同硬件打交道的工作都交给了驱动程序。
1.2 linux驱动的类型
linux系统将设备分为3类:字符设备、块设备、网络设备,摄像机常用的外围设备(如I2C,串口,SPI,GPIO,PWM等)均属于字符设备,tf卡驱动属于块设备,网卡相关驱动属于网络设备。
字符设备与块设备的区别:1、字符设备是面向流的,最小访问单位是字节;而块设备是面向块的,最小访问单位是512字节或2的更高次幂。2、字符设备只能顺序按字节访问,而块设备可随机访问。3、块设备上可容纳文件系统,访问形式上,字符设备通过设备节点访问,而块设备虽然也可通过设备节点访问,但一般是通过文件系统来访问数据的。
而网络设备没有设备节点,是因为网络设备是面向报文的,很难实现相关read、write等文件读写函数。所以驱动的实现也与字符设备和块设备不同。
1.3 linux驱动的一些重要概念
设备号
HYPERLINK /base/linux \o Linux知识库 \t _blank Linux把所有设备都当作文件,为了管理这些设备,系统为它们各自都编了号,而每个 HYPERLINK /archives/tag/%e8%ae%be%e5%a4%87%e5%8f%b7 \o 查看 设备号 中的全部文章 \t _blank 设备号又分为 HYPERLINK /archives/tag/%e4%b8%bb%e8%ae%be%e5%a4%87%e5%8f%b7 \o 查看 主设备号 中的全部文章 \t _blank 主设备号和 HYPERLINK /archives/tag/%e6%ac%a1%e8%ae%be%e5%a4%87%e5%8f%b7 \o 查看 次设备号 中的全部文章 \t _blank 次设备号。主设备号用来区分不同类型的设备,而次设备号用来区分同一类型内的多个设备(及其设备分区)。
在建立字符驱动时需要做的第一件事是获取设备号。设备号的分配方式一般有2种,静态分配和动态分配,静态分配设备号,就是驱动程序开发者,静态地指定一个设备号。对于一部分常用的设备,linux内核开发者已经为其分配了设备号。这些设备号可以在内核源码documentation/devices.txt文件中找到。如果只有开发者自己使用这些设备驱动程序,那么其可以选择一个尚未使用的设备号。当添加新硬件时,很可能造成设备号冲突,影响设备的使用。为了解决手动分配设备号存在冲突的问题,内核开发者提出动态分配设备号的方法。使用该方法驱动程序在加载的时候,通过linux内核提供的专门的函数动态获取设备号。
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)
设备节点
linux系统中对所有设备的访问都是基于文件的形式。对于每一种设备,在加载驱动程序的时候都会在/dev目录下创建一个文件,这个文件就是设备节点。对于每一个设备节点,在实际运行时, linux系统通过VFS(虚拟文件系统)来完成将文件的各种系统调用与具体的驱动程序函数之间的映射。
设备节点可以通过mknod命令在系统启动的时候手动创建,也可以通过udev自动创建。在驱动用加入对udev的支持主要做的就是:在驱动初始化的代码里调用内核提供的API向内核注册驱动信息
class_create???????:????创建class???? class_device_create??? :????创建device
驱动加载时会在/sys/class目录下生成与该模块相关的信息,同时用户空间中的udev会自动响应 device_create(…)函数,去/sysfs下寻找对应的类从而创建设备节点。
驱动初始化时,需要完成以下工作:
? 1,通过alloc_chrdev_region()及相关函数分配主/次设备号。
? 2,使用device_create()创建/dev和/sys节点。
? 3,使用cdev_init()和cdev_add()将自身注册为字符驱动程序。
混杂设备
考虑到有的系统包含很多简单字符设备驱动,单独为这些设备分配设备号比较浪费资源,同时工作量也很大,linux系统针对这些情况推出了一种叫混杂设备模型的驱动框
您可能关注的文档
- 浙江省温州市十校联合体2015-2016学年高二通用技术下学期期中联考试题教程.doc
- 浙江省瑞安市飞云中学2015-2016学年八年级语文5月月考试题新人教版(新)教程.doc
- 浙江省绍兴市浣江教育集团2017届九年级上学期期中考试语文试题教程.doc
- 浙江省舟山市第一初级中学2016届九年级上学期期中考试科学试卷2016教程.doc
- 浙江高中信息技术知识点教程.doc
- 浙江近代工业教程.doc
- 2014.5.4胰十二指肠术中配合及操作白雪要点.ppt
- 浦东恒高一对一沪教版高一数学班第一讲集合及其表示法教案——恒高名师一对一教程.doc
- 浦东恒高一对一沪教版八年级下册物理第二讲机械和功教案教程.doc
- 浦钢第一批搬迁起重机技术协议教程.doc
最近下载
- 鲁教湘教版(2024)新教材小学四年级英语上册Unit 1 第二课时教学课件.pptx VIP
- 教师资格考试小学科目二练习题及答案.pdf VIP
- 2024年联通智家工程师(初级)认证理论备考试题库资料(附答案).pdf VIP
- 《形状补间动画创建》课件.pptx VIP
- 2025年部编人教版(统编新教材)初中语文八年级上册教学计划及进度表.docx
- 质量环境职业健康安全三合一体系程序文件模板.pdf VIP
- (高清版)T 19964-2024 光伏发电站接入电力系统技术规定.pdf VIP
- 2024年秋季新人教版七年级上册道德与法治全册教案(2024年新教材).pdf
- 慢性阻塞性肺疾病健康教育培训课件.pptx VIP
- 沥青路面乳化沥青冷厂拌再生施工技术.docx VIP
文档评论(0)