\Tsphinx.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 (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget!/translations/zh_TW/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 (Simplified)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_CN/cpu-freq/core.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h Documentation/cpu-freq/core.rst h]h)}(hDocumentation/cpu-freq/core.rsth]hDocumentation/cpu-freq/core.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h-司延腾 Yanteng Si h]h)}(h,司延腾 Yanteng Si h](h司延腾 Yanteng Si <}(hj hhhNhNubh reference)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1j(hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h校译h]h校译}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhhhKubh)}(h.唐艺舟 Tang Yizhou h]h)}(h-唐艺舟 Tang Yizhou h](h唐艺舟 Tang Yizhou <}(hjehhhNhNubj))}(htangyeechou@gmail.comh]htangyeechou@gmail.com}(hjmhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:tangyeechou@gmail.comuh1j(hjeubh>}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjaubah}(h]h ]h"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(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 <}(hjhhhNhNubj))}(hlinux@brodo.deh]hlinux@brodo.de}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:linux@brodo.deuh1j(hjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h!David Kimdon h]h)}(hjh](hDavid Kimdon <}(hjhhhNhNubj))}(hdwhedon@debian.orgh]hdwhedon@debian.org}(hj hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:dwhedon@debian.orguh1j(hjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h.Rafael J. Wysocki h]h)}(hj-h](hRafael J. Wysocki <}(hj/hhhNhNubj))}(hrafael.j.wysocki@intel.comh]hrafael.j.wysocki@intel.com}(hj6hhhNhNubah}(h]h ]h"]h$]h&]refuri!mailto:rafael.j.wysocki@intel.comuh1j(hj/ubh>}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj+ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h'Viresh Kumar h]h)}(h&Viresh Kumar h](hViresh Kumar <}(hjZhhhNhNubj))}(hviresh.kumar@linaro.orgh]hviresh.kumar@linaro.org}(hjbhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:viresh.kumar@linaro.orguh1j(hjZubh>}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjVubah}(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&]uh1jhjhhhhhK,ubh)}(h{CPUFreq通知器遵循标准的内核通知器接口。 关于通知器的细节请参阅 linux/include/linux/notifier.h。h]h{CPUFreq通知器遵循标准的内核通知器接口。 关于通知器的细节请参阅 linux/include/linux/notifier.h。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hjhhubh)}(hO这里有两个不同的CPUfreq通知器 - 策略通知器和转换通知器。h]hO这里有两个不同的CPUfreq通知器 - 策略通知器和转换通知器。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjhhubj)}(hhh](j)}(h2.1 CPUFreq策略通知器h]h2.1 CPUFreq策略通知器}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhK5ubh)}(h6当创建或移除策略时,这些都会被通知。h]h6当创建或移除策略时,这些都会被通知。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hj hhubh)}(h阶段是在通知器的第二个参数中指定的。当第一次创建策略时,阶段是CPUFREQ_CREATE_POLICY,当 策略被移除时,阶段是CPUFREQ_REMOVE_POLICY。h]h阶段是在通知器的第二个参数中指定的。当第一次创建策略时,阶段是CPUFREQ_CREATE_POLICY,当 策略被移除时,阶段是CPUFREQ_REMOVE_POLICY。}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hj hhubh)}(h第三个参数 ``void *pointer`` 指向一个结构体cpufreq_policy,其包括min,max(新策略的下限和 上限(单位为kHz))这几个值。h](h第三个参数 }(hj9hhhNhNubhliteral)}(h``void *pointer``h]h void *pointer}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jAhj9ubhx 指向一个结构体cpufreq_policy,其包括min,max(新策略的下限和 上限(单位为kHz))这几个值。}(hj9hhhNhNubeh}(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易于处理的格式。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjubhwarning)}(h-不要在中断上下文中使用此函数。h]h)}(hjh]h-不要在中断上下文中使用此函数。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hj ubah}(h]h ]h"]h$]h&]uh1j hjubh)}(h例如::h]h例如:}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hjubh 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 */ }}hj4sbah}(h]h ]h"]h$]h&]hhuh1j2hhhK_hjubh)}(hO该函数只有在CONFIG_PM_OPP之外还启用了CONFIG_CPU_FREQ时才可用。h]h)}(hjDh]hO该函数只有在CONFIG_PM_OPP之外还启用了CONFIG_CPU_FREQ时才可用。}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKjhjBubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhKjhjubj)}(hPdev_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}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKlhjeubj)}(hhh]h)}(h2释放dev_pm_opp_init_cpufreq_table分配的表。h]h2释放dev_pm_opp_init_cpufreq_table分配的表。}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhjwubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhhhKlhjhhubeh}(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}(jjjjjjj`j]jjjju nametypes}(jjjj`jjuh}(jjjjjjj]j jjcjju 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_CN/cpu-freq/core.rst(NNNNta decorationNhhub.