海思SDK驱动部分.doc

海思SDK驱动部分.doc

ID:55897496

大小:115.00 KB

页数:10页

时间:2020-06-13

海思SDK驱动部分.doc_第1页
海思SDK驱动部分.doc_第2页
海思SDK驱动部分.doc_第3页
海思SDK驱动部分.doc_第4页
海思SDK驱动部分.doc_第5页
资源描述:

《海思SDK驱动部分.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、1,linux驱动程序介绍1.1linux驱动程序在系统中的角色Linux分为用户态和内核态,一般应用程序是在用户态执行,他们通过一系列的系统调用同内核态进行交互。驱动程序是内核与硬件的接口,它把系统调用映射到具体设备对于实际硬件的特定操作上,关系如下图所通过这种方法,应用程序就可以像操作普通文件一样操作硬件设备,用户程序只需要关心这个抽象出来的文件,而一切同硬件打交道的工作都交给了驱动程序。1.2linux驱动的类型linux系统将设备分为3类:字符设备、块设备、网络设备,摄像机常用的外围设备(如I2C,串口,SPI

2、,GPIO,PWM等)均属于字符设备,tf卡驱动属于块设备,网卡相关驱动属于网络设备。字符设备与块设备的区别:1、字符设备是面向流的,最小访问单位是字节;而块设备是面向块的,最小访问单位是512字节或2的更高次幂。2、字符设备只能顺序按字节访问,而块设备可随机访问。3、块设备上可容纳文件系统,访问形式上,字符设备通过设备节点访问,而块设备虽然也可通过设备节点访问,但一般是通过文件系统来访问数据的。而网络设备没有设备节点,是因为网络设备是面向报文的,很难实现相关read、write等文件读写函数。所以驱动的实现也与字符设

3、备和块设备不同。1.3linux驱动的一些重要概念设备号Linux把所有设备都当作文件,为了管理这些设备,系统为它们各自都编了号,而每个设备号又分为主设备号和次设备号。主设备号用来区分不同类型的设备,而次设备号用来区分同一类型内的多个设备(及其设备分区)。在建立字符驱动时需要做的第一件事是获取设备号。设备号的分配方式一般有2种,静态分配和动态分配,静态分配设备号,就是驱动程序开发者,静态地指定一个设备号。对于一部分常用的设备,linux内核开发者已经为其分配了设备号。这些设备号可以在内核源码documentation/

4、devices.txt文件中找到。如果只有开发者自己使用这些设备驱动程序,那么其可以选择一个尚未使用的设备号。当添加新硬件时,很可能造成设备号冲突,影响设备的使用。为了解决手动分配设备号存在冲突的问题,内核开发者提出动态分配设备号的方法。使用该方法驱动程序在加载的时候,通过linux内核提供的专门的函数动态获取设备号。intalloc_chrdev_region(dev_t*dev,  unsignedbaseminor,  unsignedcount,  constchar*name)设备节点linux系统中对所有设

5、备的访问都是基于文件的形式。对于每一种设备,在加载驱动程序的时候都会在/dev目录下创建一个文件,这个文件就是设备节点。对于每一个设备节点,在实际运行时,linux系统通过VFS(虚拟文件系统)来完成将文件的各种系统调用与具体的驱动程序函数之间的映射。设备节点可以通过mknod命令在系统启动的时候手动创建,也可以通过udev自动创建。在驱动用加入对udev的支持主要做的就是:在驱动初始化的代码里调用内核提供的API向内核注册驱动信息class_create       :    创建class    class_dev

6、ice_create   :    创建device驱动加载时会在/sys/class目录下生成与该模块相关的信息,同时用户空间中的udev会自动响应device_create(…)函数,去/sysfs下寻找对应的类从而创建设备节点。驱动初始化时,需要完成以下工作: 1,通过alloc_chrdev_region()及相关函数分配主/次设备号。 2,使用device_create()创建/dev和/sys节点。 3,使用cdev_init()和cdev_add()将自身注册为字符驱动程序。混杂设备考虑到有的系统包含很多

7、简单字符设备驱动,单独为这些设备分配设备号比较浪费资源,同时工作量也很大,linux系统针对这些情况推出了一种叫混杂设备模型的驱动框架(miscellaneous)。混杂设备主要有2个特征:1)所有的misc设备被分配同一个主设备号MISC_MAJOR(10),但是可以选择一个单独的次设备号。如果一个字符设备驱动要驱动多个设备,那么它就不应该用misc设备来实现;2)混杂设备驱动初始化时,只需要执行简单的一个注册函数,即可自动完成设备号分配,设备节点创建,向内核注册等工作,极大的简化了驱动初始化流程。硬件IO操作IO端

8、口与IO内存x86体系和ARM体系的寻址方式是有差别的:在x86下,为了能够满足CPU高速地运行,内存与CPU之间通过北桥相连并通过地址方式访问,而外设通过南桥与CPU相连并通过端口访问。因为这两种访问方式的不同,linux分出了两种不同的访问操作:以地址方式访问硬件——使用IO内存操作。以端口方式访问硬件——使用IO端口操作。在

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。