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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

linux

linux内核 频率,Linux内核中CPU主频和电压调整 (三)

發(fā)布時(shí)間:2023/12/10 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内核 频率,Linux内核中CPU主频和电压调整 (三) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如何開(kāi)發(fā)一個(gè)新的CPUFreq driver

初始化

首先,在一個(gè) __initcall level 7后者以后的函數(shù)中檢查內(nèi)核是否運(yùn)行在正確的CPU和正確的芯片組上面。

如果正確,則通過(guò)cpufreq_register_driver() 函數(shù), 注冊(cè)一個(gè)cpufreq_driver結(jié)構(gòu)體。

cpufreq_driver結(jié)構(gòu)體中必須包含:

cpufreq_driver.name:????? 驅(qū)動(dòng)名稱

cpufreq_driver.owner:???? THIS_MODULE

cpufreq_driver.init:??????????指向per-CPU初始化函數(shù)的指針

cpufreq_driver.verify:?????? 指向”verification“函數(shù)的指針

cpufreq_driver.setpolicy / cpufreq_driver.target:????? 詳見(jiàn)后面差異性介紹

還可以選擇性包含:

cpufreq_driver.exit:?????????? 指向per-CPU清理函數(shù)的指針

cpufreq_driver.resume:??指向per-CPU resume函數(shù)的指針。

此函數(shù)在中斷失能的情況下被調(diào)用。并且在 pre-suspend 主頻率或policy被恢復(fù)成->target 或者->setpolicy前調(diào)用。

cpufreq_driver.attr:??????????? 指向一個(gè)以NULL結(jié)尾的列表指針,該列表中的成員類型為 freq_attr結(jié)構(gòu)體。通過(guò)此參數(shù),允許用戶導(dǎo)出屬性到sysfs中。

Per-CPU初始化

當(dāng)一個(gè)新的CPU無(wú)論何時(shí)被注冊(cè)到設(shè)備模型中時(shí),或者在cpufreq驅(qū)動(dòng)注冊(cè)自己后, per-CPU初始化函數(shù) cpufreq_driver.init被調(diào)用。

該函數(shù)接受一個(gè)cpufreq_policy結(jié)構(gòu)體作為參數(shù)。

如果必要,針對(duì)用戶CPU類型,使能 CPUfreq支持。

policy->cpuinfo.min_freq / policy->cpuinfo.max_freq:??CPU所支持的最小/最大頻率。(單位: 千赫茲)

policy->cpuinfo.transition_latency????CPU在不同頻率之間切換時(shí)所需要的時(shí)間。(單位:納秒)

policy->cur:???CPU的當(dāng)前工作頻率

policy->min / policy->max

policy->policy? /? policy->governor:???? 必須包含針對(duì)該CPU的”缺省policy“。隨后,cpufreq_driver.verify/cpufreq_driver.setpolicy或

cpufreq_driver.target函數(shù)被調(diào)用時(shí)將使用這些定義值。

Verify / 驗(yàn)證

當(dāng)用戶決定使用一個(gè)新的policy(包含了policy, governor, min,max等值)時(shí), 該policy必須被驗(yàn)證。

如此,不合適的值將被更正。為了驗(yàn)證這些定義值, 一個(gè)頻率表輔助函數(shù)被使用。

必須確保至少有一個(gè)有效的工作頻率(該頻率位于policy->min 和 policy->max 之間)。

如果必要,首先增大policy->max; 如果沒(méi)有其他辦法,才能選擇降低 policy->min。

target 或 setpolicy

絕大多數(shù)cpufreq驅(qū)動(dòng),甚至大多數(shù)cpu倍頻算法僅僅允許處理器被設(shè)置在一個(gè)頻率上。

此種情況下,需要使用 ->target 調(diào)用。

某些具有處理器調(diào)頻能力的處理器,能夠在一定的頻率范圍內(nèi)切換頻率。

此種情況下,需要使用->setpolicy 調(diào)用。

target

target調(diào)用有三個(gè)參數(shù):

struct cpufreq_policy *policy

unsigned int target_frequency

unsigned int relation

CPUFreq驅(qū)動(dòng)必須在被調(diào)用的時(shí)候設(shè)置新的處理器頻率。 實(shí)際頻率必須根據(jù)如下規(guī)則來(lái)確定:

1) 盡量靠近 ”target_freq“頻率

2)必須滿足條件?? policy->min?? <=? new_freq? <=? policy->max

3)? 如果? relation == CPUFREQ_REL_L,? 嘗試選擇高于或等于 target_freq的新頻率

4) 如果? relation== CPUFREQ_REL_H,? 嘗試選擇低于或等于target_freq的新頻率

setpolicy

setpolicy函數(shù)僅僅只有一個(gè)參數(shù)。

struct cpufreq_policy*policy

需要設(shè)置處理器低頻限到 policy->min, 需要設(shè)置處理器高頻限到 policy->max

Frequency Table Helpers

大多數(shù)的處理器都僅支持設(shè)置成幾個(gè)特定的頻率。因此,一張頻率表被用來(lái)輔助驅(qū)動(dòng)開(kāi)發(fā)。

通過(guò)調(diào)用函數(shù)

cpufreq_frequency_table_cpuinfo(struct?cpufreq_policy?*policy,

span?style="font-size:14px;">???????????????????????????????????struct?cpufreq_frequency_table?*table);cpuinfo->min_freq 被設(shè)置為 policy->min,? cpuinfo->max_freq 被設(shè)置成 policy->max。

下述函數(shù)用來(lái)驗(yàn)證處理器頻率設(shè)定。

int?cpufreq_frequency_table_verify(struct?cpufreq_policy?*policy,

struct?cpufreq_frequency_table?*table);

針對(duì) ->target 情況,? 對(duì)應(yīng)的函數(shù)為

int?cpufreq_frequency_table_target(struct?cpufreq_policy?*policy,

struct?cpufreq_frequency_table?*table,

unsigned?int?target_freq,

unsigned?int?relation,

unsigned?int?*index);

總結(jié)

以上是生活随笔為你收集整理的linux内核 频率,Linux内核中CPU主频和电压调整 (三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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