在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux clock子系統是什么

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-09-27 14:25 ? 次閱讀

clock子系統

Linux時鐘子系統由CCF(common clock framework)框架管理, CCF向上給用戶提供了通用的時鐘接口,向下給驅動開發者提供硬件操作的接口 。各結構體關系如下:

CCF框架比較簡單,只有這幾個結構體。CCF框架分為了consumer、ccf和provider三部分。

consumer

時鐘的使用者,clock子系統向consumer的提供通用的時鐘API接口,使其可以屏蔽底層硬件差異。提供給consumer操作的API如下:

struct clk *clk_get(struct device *dev, const char *id);
struct clk *devm_clk_get(struct device *dev, const char *id);
int clk_enable(struct clk *clk);//使能時鐘,不會睡眠
void clk_disable(struct clk *clk);//使能時鐘,不會睡眠
unsigned long clk_get_rate(struct clk *clk);
void clk_put(struct clk *clk);
long clk_round_rate(struct clk *clk, unsigned long rate);
int clk_set_rate(struct clk *clk, unsigned long rate);
int clk_set_parent(struct clk *clk, struct clk *parent);
struct clk *clk_get_parent(struct clk *clk);
int clk_prepare(struct clk *clk);
void clk_unprepare(struct clk *clk);
int clk_prepare_enable(struct clk *clk) //使能時鐘,可能會睡眠
void clk_disable_unprepare(struct clk *clk) //禁止時鐘,可能會睡眠
unsigned long clk_get_rate(struct clk *clk) //獲取時鐘頻率

consumer在使用這些API時,必須先調用devm_clk_get()clk_get()獲取一個struct clk *指針句柄,后續都通過傳入該句柄來操作,struct clk相當于實例化一個時鐘。

ccf

clock子系統的核心,用一個struct clk_core結構體表示,每個注冊設備都對應一個struct clk_core。

provider(時鐘的提供者)

struct clk_hw:表示一個具體的硬件時鐘。

struct clk_init_data:struct clk_hw結構體成員,用于表示該時鐘下的初始化數據,如時鐘名字name、操作函數ops等。

// include/linux/clk-provider.h
struct clk_hw{
 struct clk_core *core;
 struct clk *clk;
 const struct clk_init_data *init;
}

struct clk_init_data{
 const char *name;     //時鐘名字
 const struct clk_ops *ops;   //時鐘硬件操作函數集合
 const char *const *parent_names; //父時鐘名字
 const struct clk_parent_data *parent_data;
 const struct clk_hw **parent_hws;
 u8 num_parents;
 unsigned long flags;
}

struct clk_ops:時鐘硬件操作的函數集合,定義了操作硬件的回調函數,consumer在調用clk_set_rate()等API時會調用到struct clk_ops具體指向的函數,這個需要芯片廠商開發clock驅動時去實現。

//include/linux/clk-provider.h

struct clk_ops {
 int  (*prepare)(struct clk_hw *hw);
 void  (*unprepare)(struct clk_hw *hw);
 int  (*is_prepared)(struct clk_hw *hw);
 void  (*unprepare_unused)(struct clk_hw *hw);
 int  (*enable)(struct clk_hw *hw);
 void  (*disable)(struct clk_hw *hw);
 int  (*is_enabled)(struct clk_hw *hw);
 void  (*disable_unused)(struct clk_hw *hw);
 int  (*save_context)(struct clk_hw *hw);
 void  (*restore_context)(struct clk_hw *hw);
 unsigned long (*recalc_rate)(struct clk_hw *hw,
     unsigned long parent_rate);
 long  (*round_rate)(struct clk_hw *hw, unsigned long rate,
     unsigned long *parent_rate);
 int  (*determine_rate)(struct clk_hw *hw,
       struct clk_rate_request *req);
 int  (*set_parent)(struct clk_hw *hw, u8 index);
 u8  (*get_parent)(struct clk_hw *hw);
 int  (*set_rate)(struct clk_hw *hw, unsigned long rate,
        unsigned long parent_rate);
 int  (*set_rate_and_parent)(struct clk_hw *hw,
        unsigned long rate,
        unsigned long parent_rate, u8 index);
 unsigned long (*recalc_accuracy)(struct clk_hw *hw,
        unsigned long parent_accuracy);
 int  (*get_phase)(struct clk_hw *hw);
 int  (*set_phase)(struct clk_hw *hw, int degrees);
 int  (*get_duty_cycle)(struct clk_hw *hw,
       struct clk_duty *duty);
 int  (*set_duty_cycle)(struct clk_hw *hw,
       struct clk_duty *duty);
 int  (*init)(struct clk_hw *hw);
 void  (*terminate)(struct clk_hw *hw);
 void  (*debug_init)(struct clk_hw *hw, struct dentry *dentry);
};

struct clk_ops中每個函數功能在include/linux/clk-provider.h都有具體的說明,在開發clock驅動時,這些函數并不需要全部實現。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8598

    瀏覽量

    151166
  • Linux
    +關注

    關注

    87

    文章

    11304

    瀏覽量

    209523
  • 子系統
    +關注

    關注

    0

    文章

    109

    瀏覽量

    12402
收藏 人收藏

    評論

    相關推薦

    Linux下輸入子系統上報觸摸屏坐標

    ??在 Linux 中,輸入子系統是由輸入子系統設備驅動層、輸入子系統核心層(Input Core)和輸入子系統事件處理層(Event Ha
    的頭像 發表于 09-25 08:56 ?2500次閱讀
    <b class='flag-5'>Linux</b>下輸入<b class='flag-5'>子系統</b>上報觸摸屏坐標

    Linux clock子系統及驅動實例

    Linux驅動中,操作時鐘只需要簡單調用內核提供的通用接口即可,clock驅動通常是由芯片廠商開發的,在Linux啟動時clock驅動就已經初始化完成。
    發表于 05-31 16:10 ?821次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>clock</b><b class='flag-5'>子系統</b>及驅動實例

    Linux reset子系統及驅動實例

    上篇講了Linux clock驅動,今天說說Linux的reset驅動。
    發表于 05-31 16:16 ?1141次閱讀
    <b class='flag-5'>Linux</b> reset<b class='flag-5'>子系統</b>及驅動實例

    Linux LED子系統詳解

    Linux LED子系統詳解
    的頭像 發表于 06-10 10:37 ?1554次閱讀
    <b class='flag-5'>Linux</b> LED<b class='flag-5'>子系統</b>詳解

    如何使用Linux內核中的input子系統

    的 input 子系統下提供的 API 函數接口,完成設備的注冊即可。在本章節中我們來學習一下如何使用 Linux內核中的 input 子系統。
    發表于 12-29 07:20

    基于Linux內核輸入子系統的驅動研究

    Linux因其完全開放的特性和穩定優良的性能深受歡迎,當推出了內核輸入子系統后,更方便了嵌入式領域的驅動開放。介紹了Linux的設備驅動基礎,詳細闡述了基于Linux內核輸入
    發表于 09-12 16:38 ?23次下載

    Linux內核輸入子系統的驅動研究

    Linux內核輸入子系統的驅動研究
    發表于 10-31 14:41 ?14次下載
    <b class='flag-5'>Linux</b>內核輸入<b class='flag-5'>子系統</b>的驅動研究

    Linux時間子系統之一:clock source(時鐘源)

    clock source用于為linux內核提供一個時間基線,如果你用linux的date命令獲取當前時間,內核會讀取當前的clock source,轉換并返回合適的時間單位給用戶空間
    發表于 05-10 14:36 ?1966次閱讀

    詳細了解Linux設備模型中的input子系統

    linux輸入子系統linux input subsystem)從上到下由三層實現,分別為:輸入子系統事件處理層(EventHandler)、輸入
    發表于 05-12 09:04 ?1052次閱讀
    詳細了解<b class='flag-5'>Linux</b>設備模型中的input<b class='flag-5'>子系統</b>

    Windows 子系統助力 Linux 2.0

    Windows 子系統助力 Linux 2.0
    的頭像 發表于 01-04 11:17 ?656次閱讀

    Linux系統中NFC子系統架構分析

    目前在Linux系統中,每個廠家都使用不同的方式實現NFC驅動,然后自己在應用層上面做適配。但是Linux也已經推出NFC子系統,很多廠家也逐步在統一。
    發表于 01-04 14:01 ?2071次閱讀

    PTP Clock Manager for Linux Message Log 手冊

    PTP Clock Manager for Linux Message Log 手冊
    發表于 01-30 18:55 ?0次下載
    PTP <b class='flag-5'>Clock</b> Manager for <b class='flag-5'>Linux</b> Message Log 手冊

    PTP Clock Manager for Linux Message Log 手冊

    PTP Clock Manager for Linux Message Log 手冊
    發表于 07-03 20:29 ?2次下載
    PTP <b class='flag-5'>Clock</b> Manager for <b class='flag-5'>Linux</b> Message Log 手冊

    Linux reset子系統有什么功能

    Linux reset子系統 reset子系統非常簡單,與clock子系統非常類似,但在驅動實現上,reset驅動更簡單。 因為
    的頭像 發表于 09-27 14:06 ?768次閱讀
    <b class='flag-5'>Linux</b> reset<b class='flag-5'>子系統</b>有什么功能

    時鐘子系統clock驅動實例

    clock驅動實例 clock驅動在時鐘子系統中屬于provider,provider是時鐘的提供者,即具體的clock驅動。 clock
    的頭像 發表于 09-27 14:39 ?805次閱讀
    時鐘<b class='flag-5'>子系統</b>中<b class='flag-5'>clock</b>驅動實例
    主站蜘蛛池模板: 天堂成人网| 亚洲欧美视频| 日本在线不卡免| 国产成年女一区二区三区| 天堂网在线资源| 一区二区中文字幕| 色播久久| 亚洲午夜精品久久久久久人妖| riav久久中文一区二区| 亚洲人成电影综合网站色| 黄色一级一毛片| 狠狠操狠狠| 一级做a爱片在线播放| 狠狠干奇米| 国产免费小视频| 性大特级毛片视频| ww欧洲ww在线视频看| 欧美最猛黑人xxxx黑人猛交69| 性色在线播放| www天堂网| 一区二区三区四区在线观看视频 | 欧美日韩啪啪| 天天操人人干| 最新地址四虎www4hutv| 国产一级特黄aa大片在线| 456影院第一| 色天使色护士 在线视频观看| 午夜视频在线看| 美女扒开腿让男人桶尿口| 激五月| 亚洲五月六月丁香激情| 日韩在线免费看网站| 午夜寂寞视频在线观看| 久久99久久精品国产99热| 国模私拍一区二区| 男人操女人视频网站| 欧美区在线播放| 国产理论最新国产精品视频| 色中涩| 人人干干人人| 网女色|