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接口,只要实现相应的接口就可以了。
4. 设备层的注册都放在一起,可以很方便的完成对外设功能的选择和管理。
现在都是平台总线移植。修改设备层,就可以完成整个驱动层的移植。