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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

设备树与驱动的关系_Linux CommonClock Framework分析之四 gpio clk gate驱动实现

發(fā)布時間:2025/3/15 linux 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设备树与驱动的关系_Linux CommonClock Framework分析之四 gpio clk gate驱动实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前面我們已經(jīng)完成了CCF子系統(tǒng)的分析,也說明了如何實現(xiàn)CCF驅(qū)動,本章為該專欄的最后一篇文章,

本章我們將實現(xiàn)一個虛擬的gpio clk gate驅(qū)動。本章大概分為如下幾個章節(jié):
一、 本次驅(qū)動開發(fā)涉及的知識點

二、clk provider driver的實現(xiàn)流程說明

三、gpio clk gate driver驅(qū)動設(shè)計

一、 本次驅(qū)動開發(fā)涉及的知識點

本次驅(qū)動實踐主要涉及如下幾個方面的知識點:

  • Platform device、platform drvier
  • Gpio 驅(qū)動使用
  • Clk provider驅(qū)動開發(fā)流程
  • 二、clk provider driver的實現(xiàn)流程說明

    關(guān)于clk provider driver的開發(fā)流程,在上一篇文章中已經(jīng)做了說明,此處再說明一下,主要實現(xiàn)

    流程包括如下兩步:

  • 完成clk的注冊,主要是調(diào)用clk_register接口,完成上述章節(jié)一所述的內(nèi)容;
  • 完成該clk provider的map,這種map機制可以理解為定義了clk consumer與clk_provider的映射關(guān)系,即該clk provider可以給哪些clk consumer提供時鐘(如針對非設(shè)備樹模式,則定義了clk consumer的設(shè)備名稱、clk consumer的時鐘使用名稱),而clk provider的map存在兩種方式:
  • 若linux不支持設(shè)備樹機制,則通過調(diào)用接口clk_register_clkdev,完成這種映射操作(即完成下圖中“非設(shè)備樹模式下clk_core的map”)。
  • 若linux支持設(shè)備樹機制,則通過調(diào)用接口of_clk_add_provider,完成map操作(即完成下圖中“設(shè)備樹模式下clk_core的map”)
  • 三、gpio clk gate driver驅(qū)動設(shè)計

    本次我們主要實現(xiàn)gpio clk gate driver,本次實現(xiàn)的平臺為ubuntu16.04,我們使用之前模擬的gpio chip driver,提供gpio index,從而通過gpio 的值實現(xiàn)gpio clk gate driver。。另外針對clk gate,僅需要提供enable、disable、is_enabled接口即可。

    相關(guān)數(shù)據(jù)結(jié)構(gòu)

    結(jié)構(gòu)體struct virt_gpio_clk_gate作為本次gpio clk gate driver的數(shù)據(jù)結(jié)構(gòu),主要包含clk provier device、gpio index描述信息;

    struct virt_gpio_clk_gate

    {

    struct gpio_desc *gpiod_clk_gate;

    struct clk_hw hw;

    };

    而結(jié)構(gòu)體gpio_clk_gate_platform_data主要用于傳遞platform device for clk provider的enable gpio index信息,因為此次我們使用ubuntu16.04進行驗證,因此使用該模式傳遞gpio 信息,包含gpio index、是否低有效等信息。

    struct gpio_clk_gate_platform_data

    {

    int enable_gpio_index;

    int active_low;

    };

    gpio clk provider driver實現(xiàn)

    Gpio clk provider driver的實現(xiàn)如下,主要完成clk provider device注冊、clk_ops的實現(xiàn)(enable、disable、is_enabled)等。如下即為clk provider driver的probe接口,主要調(diào)用clk_register完成clk provider的注冊、并調(diào)用of_clk_add_provider/clk_register_clkdev實現(xiàn)clk provider的map。

    該gpio clk gate provider 的clk_ops操作接口定義如下:

    gpio clk consumer driver實現(xiàn)

    該consumer driver驅(qū)動主要用于驗證gpio clk provider driver是否生效,我們在probe接口完成clk的enable操作;而在remove接口完成clk 的disable操作。接口實現(xiàn)如下:

    Virt gpio chip driver

    該驅(qū)動使用的是gpio driver子系統(tǒng)專欄中實現(xiàn)的虛擬gpio驅(qū)動,本處不再細述,想要了解的童鞋請參考之前的文章。

    測試驗證:

    • 加載virt gpio 驅(qū)動
  • insmod virt_gpio_dev.ko;
  • insmod virt_gpio.ko
    • 加載gpio clk gate 驅(qū)動
  • insmod gpio_clk_platform.ko
  • insmod gpio_clk_driver.ko
    • 加載clk consumer device驅(qū)動
  • insmod gpio_comsumer_device.ko
    • 查看當(dāng)前gpio的值:
    • 加載clk consumer driver驅(qū)動
  • insmod gpio_comsumer_driver.ko
    • 查看當(dāng)前gpio的值

    此時gpio已經(jīng)改變,clk已經(jīng)使能;

    • 卸載clk consumer driver驅(qū)動
  • insmod gpio_comsumer_driver.ko
    • 查看當(dāng)前gpio的值

    此時gpio已經(jīng)修改為0,clk 已經(jīng)關(guān)閉;

    以上就是本章的主要內(nèi)容,我們主要實現(xiàn)一個gpio clk gate provider driver,至此我們基本上已完成CCF子系統(tǒng)的學(xué)習(xí),本章的驅(qū)動代碼鏈接稍后給出。

    與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的设备树与驱动的关系_Linux CommonClock Framework分析之四 gpio clk gate驱动实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。