1.驱动程序:操作系统通过各种驱动程序来驾驭硬件设备。

驱动程序没有主函数,也不会主动执行,应用程序来调用执行驱动程序。驱动程序是内核的一部分

2.系统调用

操作系统向应用层提供的一组接口函数,应用层通过这组接口函数可以访问系统提供的特殊的功能。 API

对于ARM架构的CPU,系统调用函数会执行swi指令,引起异常,执行异常处理程序

异常处理程序判断是哪个系统调用引起的异常,分析该函数调用的参数,进而找到对应的驱动程序(通过设备节点对应的设备号)

设备节点文件是链接应用程序和驱动程序的纽带。应用程序把所有的外设都当成是文件,对外设的操作,就是对设备节点文件的操作。

主设备号: 用来区别不同类型的设备

次设备号:区别通类型的设备中不同的个体

1> 驱动程序操作步骤:

注册---》初始化---》打开---》操作---》关闭---》卸载

2.设备分为:字符设备,块设备,网络设备。

3.字符设备:通过设备文件节点访问。

设备的注册方式有:

杂项注册:

>主设备号固定为10。

>次设备号范围是0~254。

>当次设备号为255时,是由内核自动分配。

>自动创建设备节点文件。

2.6申请主设备号,次设备号也要指定

经典:只申请主设备号,次设备号任意

————————————————

平台总线

驱动程序模块特点:

1. 使用一个.c 编辑,最终生成一个模块

2. 移植性不太好,设备和驱动不是分离的

3. 不方便设备资源的统一管理

平台总线统一管理:

平台设备驱动模型特点(四点):

1. 分层思想:把一个设备驱动分成 设备层 和 驱动层 两个部分,增强可移植性 和 代码维护简单。

1)当加载驱动层时,平台总线会把驱动结构中的name成员取出和平台总线当前设备链表上全部设备的name成员进行逐个比较,如果发现相同,就把这个驱动和这个设备绑定上,然后驱动的探测函数会被调用。

2)当加载设备层时,平台总线会把设备结构中的name成员取出和平台总线当前驱动链表上全部驱动的name成员进行逐个比较,如果发现相同,就把这个驱动和这个设备绑定上,然后驱动的探测函数会被调用。

2. 资源统一由内核管理,安全可靠。

所有要使用的资源都是以下流程:

探测资源-->向内核申请资源--->内核审批后--->映射--->使用

这个工作是由探测函数来完成。

3. 很容易实现设备电源管理机制。

提供统一的API接口,只要实现相应的接口就可以了。

int (*suspend)(struct platform_device *, pm_message_t state); //挂起函数


int (*resume)(struct platform_device *); //恢复函数

4. 设备层的注册都放在一起,可以很方便的完成对外设功能的选择和管理。

现在都是平台总线移植。修改设备层,就可以完成整个驱动层的移植。