?Wsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/cpu-freq/coremodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Simplified)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/zh_CN/cpu-freq/coremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/it_IT/cpu-freq/coremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/ja_JP/cpu-freq/coremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/ko_KR/cpu-freq/coremodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/sp_SP/cpu-freq/coremodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Traditional)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhN/var/lib/git/docbuild/linux/Documentation/translations/zh_TW/cpu-freq/core.rsthKubhwarning)}(hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。h]h paragraph)}(hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。h]hX1此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_TW/disclaimer-zh_TW.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubhnote)}(h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<2023002089@link.tyut.edu.cn>。h]h)}(h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<2023002089@link.tyut.edu.cn>。h](h如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<}(hhhhhNhNubh reference)}(h2023002089@link.tyut.edu.cnh]h2023002089@link.tyut.edu.cn}(hhhhhNhNubah}(h]h ]h"]h$]h&]refuri"mailto:2023002089@link.tyut.edu.cnuh1hhhubh>。}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjhhhKubh field_body)}(h Documentation/cpu-freq/core.rst h]h)}(hDocumentation/cpu-freq/core.rsth]hDocumentation/cpu-freq/core.rst}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hhh](j )}(h翻譯h]h翻譯}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj;hhhKubj)}(h-司延騰 Yanteng Si h]h)}(h,司延騰 Yanteng Si h](h司延騰 Yanteng Si <}(hjPhhhNhNubh)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hjXhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1hhjPubh>}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjLubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hhh](j )}(h校譯h]h校譯}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~hhhKubj)}(h.唐藝舟 Tang Yizhou h]h)}(h-唐藝舟 Tang Yizhou h](h唐藝舟 Tang Yizhou <}(hjhhhNhNubh)}(htangyeechou@gmail.comh]htangyeechou@gmail.com}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:tangyeechou@gmail.comuh1hhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhhhK hjhhubeh}(h]h ]h"]h$]h&]uh1jhhhhhhhKubhsection)}(hhh](htitle)}(h/CPUFreq核心和CPUFreq通知器的通用說明h]h/CPUFreq核心和CPUFreq通知器的通用說明}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubhdefinition_list)}(hhh]hdefinition_list_item)}(h作者: - Dominik Brodowski - David Kimdon - Rafael J. Wysocki - Viresh Kumar h](hterm)}(h作者:h]h作者:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubh definition)}(hhh]h bullet_list)}(hhh](h list_item)}(h#Dominik Brodowski h]h)}(hjh](hDominik Brodowski <}(hjhhhNhNubh)}(hlinux@brodo.deh]hlinux@brodo.de}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:linux@brodo.deuh1hhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h!David Kimdon h]h)}(hj0h](hDavid Kimdon <}(hj2hhhNhNubh)}(hdwhedon@debian.orgh]hdwhedon@debian.org}(hj9hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:dwhedon@debian.orguh1hhj2ubh>}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj.ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h.Rafael J. Wysocki h]h)}(hj[h](hRafael J. Wysocki <}(hj]hhhNhNubh)}(hrafael.j.wysocki@intel.comh]hrafael.j.wysocki@intel.com}(hjdhhhNhNubah}(h]h ]h"]h$]h&]refuri!mailto:rafael.j.wysocki@intel.comuh1hhj]ubh>}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjYubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h'Viresh Kumar h]h)}(h&Viresh Kumar h](hViresh Kumar <}(hjhhhNhNubh)}(hviresh.kumar@linaro.orgh]hviresh.kumar@linaro.org}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:viresh.kumar@linaro.orguh1hhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhNhNubh)}(hz目錄: 1. CPUFreq核心和接口 2. CPUFreq通知器 3. 含有Operating Performance Point (OPP)的CPUFreq表的生成h]hz目錄: 1. CPUFreq核心和接口 2. CPUFreq通知器 3. 含有Operating Performance Point (OPP)的CPUFreq表的生成}hjsbah}(h]h ]h"]h$]h&]hhuh1hhjhhhhhKubj)}(hhh](j)}(h1. CPUFreq核心和接口h]h1. CPUFreq核心和接口}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(hXcpufreq核心代碼位於drivers/cpufreq/cpufreq.c中。這些cpufreq代碼爲CPUFreq架構的驅 動程序(那些執行硬件頻率切換的代碼)以及 "通知器" 提供了一個標準化的接口。 包括設備驅動程序;需要了解策略變化(如 ACPI 熱量管理),或所有頻率變化(如計時代碼), 甚至需要強制限制爲指定頻率(如 ARM 架構上的 LCD 驅動程序)的其它內核組件。 此外,內核 "常數" loops_per_jiffy 會根據頻率變化而更新。h]hX cpufreq核心代碼位於drivers/cpufreq/cpufreq.c中。這些cpufreq代碼爲CPUFreq架構的驅 動程序(那些執行硬件頻率切換的代碼)以及 “通知器” 提供了一個標準化的接口。 包括設備驅動程序;需要了解策略變化(如 ACPI 熱量管理),或所有頻率變化(如計時代碼), 甚至需要強制限制爲指定頻率(如 ARM 架構上的 LCD 驅動程序)的其它內核組件。 此外,內核 “常數” loops_per_jiffy 會根據頻率變化而更新。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjhhubh)}(hX%cpufreq策略的引用計數由 cpufreq_cpu_get 和 cpufreq_cpu_put 來完成,以確保 cpufreq 驅 動程序被正確地註冊到核心中,並且驅動程序在 cpufreq_put_cpu 被調用之前不會被卸載。這也保證 了每個CPU核的cpufreq 策略在使用期間不會被釋放。h]hX%cpufreq策略的引用計數由 cpufreq_cpu_get 和 cpufreq_cpu_put 來完成,以確保 cpufreq 驅 動程序被正確地註冊到核心中,並且驅動程序在 cpufreq_put_cpu 被調用之前不會被卸載。這也保證 了每個CPU核的cpufreq 策略在使用期間不會被釋放。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjhhubeh}(h]cpufreqah ]h"]1. cpufreq核心和接口ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h2. CPUFreq 通知器h]h2. CPUFreq 通知器}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhK,ubh)}(h{CPUFreq通知器遵循標準的內核通知器接口。 關於通知器的細節請參閱 linux/include/linux/notifier.h。h]h{CPUFreq通知器遵循標準的內核通知器接口。 關於通知器的細節請參閱 linux/include/linux/notifier.h。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hj hhubh)}(hO這裏有兩個不同的CPUfreq通知器 - 策略通知器和轉換通知器。h]hO這裏有兩個不同的CPUfreq通知器 - 策略通知器和轉換通知器。}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hj hhubj)}(hhh](j)}(h2.1 CPUFreq策略通知器h]h2.1 CPUFreq策略通知器}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:hhhhhK5ubh)}(h6當創建或移除策略時,這些都會被通知。h]h6當創建或移除策略時,這些都會被通知。}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hj:hhubh)}(h階段是在通知器的第二個參數中指定的。當第一次創建策略時,階段是CPUFREQ_CREATE_POLICY,當 策略被移除時,階段是CPUFREQ_REMOVE_POLICY。h]h階段是在通知器的第二個參數中指定的。當第一次創建策略時,階段是CPUFREQ_CREATE_POLICY,當 策略被移除時,階段是CPUFREQ_REMOVE_POLICY。}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hj:hhubh)}(h第三個參數 ``void *pointer`` 指向一個結構體cpufreq_policy,其包括min,max(新策略的下限和 上限(單位爲kHz))這幾個值。h](h第三個參數 }(hjghhhNhNubhliteral)}(h``void *pointer``h]h void *pointer}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1johjgubhx 指向一個結構體cpufreq_policy,其包括min,max(新策略的下限和 上限(單位爲kHz))這幾個值。}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKfreq_table = freq_table; /* Do other things */ } .. note:: 該函數只有在CONFIG_PM_OPP之外還啓用了CONFIG_CPU_FREQ時纔可用。 h](j)}(hdev_pm_opp_init_cpufreq_table -h]hdev_pm_opp_init_cpufreq_table -}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKjhjubj)}(hhh](h)}(h這個函數提供了一個隨時可用的轉換例程,用來將OPP層關於可用頻率的內部信息翻譯成一種 cpufreq易於處理的格式。h]h這個函數提供了一個隨時可用的轉換例程,用來將OPP層關於可用頻率的內部信息翻譯成一種 cpufreq易於處理的格式。}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhj(ubh)}(h-不要在中斷上下文中使用此函數。h]h)}(hj;h]h-不要在中斷上下文中使用此函數。}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hj9ubah}(h]h ]h"]h$]h&]uh1hhj(ubh)}(h例如::h]h例如:}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hj(ubh literal_block)}(hsoc_pm_init() { /* Do things */ r = dev_pm_opp_init_cpufreq_table(dev, &freq_table); if (!r) policy->freq_table = freq_table; /* Do other things */ }h]hsoc_pm_init() { /* Do things */ r = dev_pm_opp_init_cpufreq_table(dev, &freq_table); if (!r) policy->freq_table = freq_table; /* Do other things */ }}hj`sbah}(h]h ]h"]h$]h&]hhuh1j^hhhK_hj(ubh)}(hO該函數只有在CONFIG_PM_OPP之外還啓用了CONFIG_CPU_FREQ時纔可用。h]h)}(hjph]hO該函數只有在CONFIG_PM_OPP之外還啓用了CONFIG_CPU_FREQ時纔可用。}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKjhjnubah}(h]h ]h"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKjhjubj)}(hQdev_pm_opp_free_cpufreq_table 釋放dev_pm_opp_init_cpufreq_table分配的表。 h](j)}(hdev_pm_opp_free_cpufreq_tableh]hdev_pm_opp_free_cpufreq_table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKmhjubj)}(hhh]h)}(h2釋放dev_pm_opp_init_cpufreq_table分配的表。h]h2釋放dev_pm_opp_init_cpufreq_table分配的表。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKmhjhhubeh}(h]h ]h"]h$]h&]uh1jhjhhhNhNubeh}(h]'operating-performance-point-opp-cpufreqah ]h"]@3. 含有operating performance point (opp)的cpufreq表的生成ah$]h&]uh1jhjhhhhhKRubeh}(h]cpufreqcpufreqah ]h"]/cpufreq核心和cpufreq通知器的通用說明ah$]h&]uh1jhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN generatorN datestampN source_linkN source_urlN toc_backlinksjfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjj jjjjjjjjju nametypes}(jj jjjjuh}(jjjjjj jj:jjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]transform_messages] transformerN include_log]2Documentation/translations/zh_TW/cpu-freq/core.rst(NNNNta decorationNhhub.