Bootstrap

linux驱动-platform子系统

目录

1.传统字符设备驱动框架的缺点

2.总线、设备、驱动

3.设备注册

4.驱动注册


1.传统字符设备驱动框架的缺点

        缺点:驱动可移植性差,原因是驱动里面包括了很多该芯片特有的消息,如果是其他平台,硬件信息会有差异,所以驱动无法直接使用。

2.总线、设备、驱动

        在Linux 2.6内核中,提出了"总线"、"设备"、"驱动"的架构,目的是让我们写出来的驱动通用性更强。

核心思想:

        将设备的信息从驱动中分离出来,我们需要在操作系统中,添加设备驱动两部分。

设备中包含是设备的信息(资源),驱动中包含的是操作设备函数接口。为了能让驱动最终能操作我们的硬件设备,我们在驱动中必须获取设备的信息(资源)。​

问题: 

        设备和驱动是分离的,那么驱动是如何获取具体设备信息的呢?

回答:​

        设备和驱动都会注册到总线上,当注册设备的时候,会去寻找同名的驱动,当注册驱动的时候也会去找同名的设备。相互查找。一旦匹配成功,操作系统就会自动调用驱动提供的probe函数。我们只需要在probe函数中,使用操作系统提供的通用API获取硬件的资源即可。

"总线" 理解:

        总线在操作系统中本质就是两个链表:挂载设备的链表挂载驱动的链表。在操作系统中总线种类可以分成两大类,平台总线边缘设备之间通信的总线

        平台总线:平台总线挂载都是控制器设备,用于CPU核与硬件控制器之间的通信。在Linux系统中用"platform bus"表示。

        边缘设备之间通信的总线:边缘设备之间通信的总线挂载是符合总线时序的外围设备,如:i2c , spi ,usb , uart 等。不同的边缘设备之间通信的总线,总线时序是不一样的,对于这些总线,Linux 内核是单独实现的。

基于总线写驱动思路:

  • 根据自己的设备,确定总线的类型
  • 根据总线的类型, 确定设备在总线上如何描述
  • 根据总线的类型, 确定驱动在总线上如何描述
  • 根据总线的类型,确定在总线上如何注册设备
  • 根据总线的类型,确定在总线上如何注册驱动
  • 根据总线的类型, 确定设备和驱动匹配原则

        设备和驱动匹配后,操作系统就会调用驱动提供的probe函数。在这个函数中,一般需要做两件事情:

       (1)获取匹配的硬件资源​

       (2)向上层提供硬件设备的操作函数接口(如:注册字符设备)

        

        

;