日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

platform基础介绍

發布時間:2024/3/24 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 platform基础介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(1)什么是platform

paltform是一種虛擬的總線,用于管理外設資源內存資源中斷資源。

在硬件上有USB-BUS總線,PCI-BUS總線,這是在物理設備上實際存在的總線。

USB-BUS管理USB設備,PCI總線管理PCI設備。

但是在實際中,一些設備不屬于這些總線,一些SOC上面的控制器或者設備。

使用platform統一管理這些設備。

platform的一個優點就是將驅動和設備分開,提高驅動的移植性。

  • 回顧傳統的字符設備,是沒有將驅動和設備分開的概念。
  • platform將驅動和設備分開為三部分,就提高了設備和驅動的可移植性。

    platform_device platform_driver platform_bus

    platform_device是基于底層的模塊抽象出的,用于表示設備,就是我們的外設,描述外設的資源,占用的io資源,irq資源

    驅動用來實現驅動設備的代碼

    總線可以看做是一個管理單元,用于管理設備和驅動的匹配,提供設備和驅動的匹配函數。

    如何進行匹配的,哪一個platform_device和platform_driver進行匹配呢,是按照上面方式匹配的。也是platform_bus完成的工作。這個總線在系統啟動的時候就會進行初始化,這樣才能完成設備和驅動的匹配。

  • 先分析platform啟動的過程。
  • 系統啟動的時候會啟動一個start_kernel()函數,

    start_kernel執行一系列的初始化函數,然后調用rest_init(void)

    rest_init會啟動一個內核線程執行kernel_init函數繼續初始化

    最后會調用到do_basic_setup函數,也是一些的初始化

    調用driver_init函數

    在driver_init函數中調用paltform_bus_init函數

    在platform_bus_init函數里面完成了platform虛擬設備的初始化。

    主要的代碼是上面的兩句

    1.device_register是注冊一個設備,參數是一個結構體指針,定義如下

    是一個device結構體,是設備的最基本的單元。是所有設備的基類。

    device是一個面向對象的思想,當然還有不同的設備,當想定義不同的設備的時候,就繼承這個結構體,然后添加一些不同的成員。

    device_register是注冊一個設備,注冊到內核里面。

  • 接下來bus_register是注冊一個總線,參數是一個不是bustype是一個結構體指針,定義如下名字,屬性,熱插拔,電源管理
  • ?

    這個結構體就是描述一個虛擬總線,所以,這個結構體就是對里面platform總線的描述

    其它的不管,但是match這個函數需要先提一下。platform_bus有兩個功能,一個是管理設備和驅動,一個是實現設備和驅動的匹配。

    platform_match函數就是完成設備和驅動匹配的函數。

    上面就是總線的一個注冊。

    注冊完設備和總線以后,platform總線就注冊到內核里面了。接下來就可以使用platform總線架構管理設備和驅動了。

  • 接下來講解一些platform_device和platform_driver
  • platform_device中有一個platform_device結構體,是用來描述設備的結構體

    platform_driver中有一個platform_driver結構體,是用來描述設備的驅動的

    先看一下platform_device結構體

    名字

    id是第幾個設備

    device是描述設備的一個基類,是最核心的類

    num_resourcez資源的數量

    *resource就是來描述設備的資源

  • 先介紹一些resource結構體
  • 要描述一個設備,都需要哪些呢

    start 資源的起始地址end資源的結束地址

    名字,設備的名字

    資源,io資源,中斷資源,內存資源

    flag表示的是什么樣子的資源

    下面又是一個resource結構體,分被指向父節點,兄弟節點和子節點

    這個結構體就是系統里面管理resource的一種方式

    (4)繼續回到platform_device這個結構體

    下面就是id_entry,匹配的時候會用到。

    mfd_cell是用戶多功能卡,多功能設備的實現

    (6)接下來看一下platform_driver這個結構體

    ?

    里面主要的就是probe函數和remove函數

    原來驅動中的init函數放到probe函數里面執行

    原來驅動中的exit函數放到remove函數里面執行

    下面的shutdown suspend resume是電源管理相關的函數,設備的關閉,暫停和和恢復的動作,是可選的。

    probe和remove需要自己實現

    后面是一個device_driver表示一個驅動,是驅動的一個基類,和device一樣,任何的驅動都繼承這個基類。為什么要這樣用呢,因為C語言里面沒有繼承,只能通過結構體來實現繼承的操作

    結構體后面一個id_table,在匹配的時候會用到這個成員。

    匹配的操作,之后會講到。

    上面就是platform基本的結構體。

  • 了解這些結構體以后。線面看如何把設備和驅動注冊到系統里面
  • 就是注冊到platform虛擬總線上面。

    總線管理設備和驅動。

    當我們要寫一個platform_device的時候,我們需要初始化platform_device里面的結構體,當初始化完platform_device里面的結構體的時候,我們向platform總線注冊platfrom_device

    同樣的,我們編寫一個platform_driver的時候,需要初始化相關的結構體,實現里面的函數,然后向platform_bus注冊。

    這樣才能完成設備和驅動的匹配。

    那這些注冊函數都是在哪呢?都在platform.c里面,這個文件實現了所有的platfrom的操作。

  • 怎么把一個platform設備注冊到platform總線上面呢
  • ?

    ?

    平臺設備的注冊函數,參數是platform結構體,這個結構習需要在編寫platform_device的時候初始化結構體,為他賦值。然后調用這個函數把platform設備注冊到內核里面。

    可以看到里面包含兩個函數,一個是device_initiallize函數,里面的參數是一個dev,就是device這個結構體(設備的基類)。

    然后調用platform_device_add這個函數

    首先初始化的時候會將設備的父類初始化為platform_bus,

    這個就是platform初始化的時候表示虛擬總線的設備,可以說明都是掛載在platform總線,所有的父設備都是platform_bus這個設備

    接下來是設置設備的總線的類型為platform。這兩步指定完了以后,就相當設備掛接到虛擬總線上了。

    之后是對資源的初始化,最后調用device_add將設備注冊到內核里面。

    這就是如何注冊一個平臺設備。

    (9)注冊完平臺設備以后就是注冊一個平臺驅動

    和注冊平臺設備一樣,首先在platfrom_driver里面也是需要定義一個platform_driver結構體來,完成相應的函數,初始化完成以后吧結構體作為參數放到這個函數里面

    首先把驅動的總線類型甚至為platfrom,間接的掛載到platform總線上面.

    然后調用driver_register函數將platfrom設備注冊到內核里面。

    總結:上面主要介紹了platform的概念,platform相比于傳統設備驅動的優點,platform框架中使用的一些基本的結構體,內核啟動的時候對platfrom的初始化。以及注冊platfrom設備和platfrom驅動的函數。這些是一些基礎的概念,

    下面詳細分析平臺驅動的初始化函數,平臺驅動的初始化函數是如何調用到的。以及平臺驅動如何匹配的,平臺驅動的初始化代碼在哪里。

    ?

    ?

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的platform基础介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。