嵌入式linux学习(一)——linux驱动入门知识

2019-07-13 02:48发布

一、Linux驱动介绍 1、Linux驱动框架如下:
在Linux中设备无关软件的大部分功能由文件系统去完成,执行使用于所有设备的常用I/O功能,向用户进程提供统一的接口。 当用户进程发出I/O请求时,Linux把请求的处理权限放在文件系统,文件系统通过设备驱动程序提供的接口再把任务下放到驱动程序,驱动程序根据需要对设备控制器进行操作,设备控制器再去控制设备自身。这样通过逐层隔离,Linux对用户进程基本上屏蔽掉了设备的各种硬件特性。 在Linux中,设备驱动程序应完成的主要功能为:
 对设备进行初始化;  设备使用完成后对设备进行相应清理工作;  从设备接收数据并将之送回内核;  将数据从内核传送至设备;  检测和处理设备出现的错误。
通常Linux驱动程序接口分为如下四层:
 应用程序进程与内核的接口;  内核与文件系统的接口;  文件系统与设备驱动程序的接口;  设备驱动程序与硬件设备的接口。
Linux内核需要访问两类主要设备:字符设备和块设备。 字符设备与块设备的区别: 字符设备是最简单的,如鼠标、键盘、甚至自己设计的I/O卡等。块设备的读写一般要缓存支持,并可随机存取(字符设备则不需要),它主要包括硬盘、光驱等存贮设备。两者的主要差异是:与字符设备有关的系统调用几乎直接和驱动程序的内部功能结合在一起。而读写块设备则主要和快速缓冲存储区打交道。只有需要完成实际的输入/输出时,才用到块设备驱动程序。 Linux设备号: Linux的设备由一个主设备号(major number)和一个次设备号(minor number)标识。主设备号唯一标识了设备类型,即设备驱动程序类型,它是块设备表或字符设备表中设备表项的索引。次设备号仅由设备驱动程序解释,用于识别同类设备中,I/O请求所涉及到的那个设备。 2、Linux驱动简介 当引导系统时,内核调用每一个驱动程序的初始化函数。它的任务之一是将这一设备驱动程序使用的主设备号通知内核;同时,初始化函数还将驱动程序中的函数地址结构的指针送给内核。
内核中有两张表。一张表用于字符设备驱动程序,另一张用于块设备驱动程序。这两张表用来保存指向file_operations结构的指针,设备驱动程序内部的函数地址就保存在这一结构中。内核用主设备号作为索引访问file_operations结构,因而能访问驱动程序内的子程序。 对于字符设备来说,file_operations{}是唯一的函数接口。