~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/translations/zh_TW/cpu-freq/cpu-drivers.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/translations/zh_TW/cpu-freq/cpu-drivers.rst (Version linux-6.12-rc7) and /Documentation/translations/zh_TW/cpu-freq/cpu-drivers.rst (Version linux-5.0.21)


  1 .. SPDX-License-Identifier: GPL-2.0               
  2                                                   
  3 .. include:: ../disclaimer-zh_TW.rst              
  4                                                   
  5 :Original: Documentation/cpu-freq/cpu-drivers.    
  6                                                   
  7 :翻譯:                                          
  8                                                   
  9  司延騰 Yanteng Si <siyanteng@loongson.cn>      
 10                                                   
 11 :校譯:                                          
 12                                                   
 13  唐藝舟 Tang Yizhou <tangyeechou@gmail.com>     
 14                                                   
 15 =======================================           
 16 如何實現一個新的CPUFreq處理器驅動    
 17 =======================================           
 18                                                   
 19 作者:                                           
 20                                                   
 21                                                   
 22         - Dominik Brodowski  <linux@brodo.de>      
 23         - Rafael J. Wysocki <rafael.j.wysocki@i    
 24         - Viresh Kumar <viresh.kumar@linaro.org    
 25                                                   
 26 .. Contents                                       
 27                                                   
 28    1.   怎麼做?                              
 29    1.1  初始化                                 
 30    1.2  Per-CPU 初始化                         
 31    1.3  驗證                                    
 32    1.4  target/target_index 或 setpolicy?        
 33    1.5  target/target_index                       
 34    1.6  setpolicy                                 
 35    1.7  get_intermediate 與 target_intermedia    
 36    2.   頻率表助手                           
 37                                                   
 38                                                   
 39                                                   
 40 1. 怎麼做?                                   
 41 ===========                                       
 42                                                   
 43 如果,你剛剛得到了一個全新的CPU/    
 44 支持?很好,這裏有一些至關重要    
 45                                                   
 46                                                   
 47 1.1 初始化                                     
 48 ----------                                        
 49                                                   
 50 首先,在 __initcall level 7 (module_init()    
 51 運行在正確的CPU和正確的芯片組上    
 52 CPUfreq核心層註冊一個cpufreq_driver結    
 53                                                   
 54 結構體cpufreq_driver應該包含什麼成    
 55                                                   
 56  .name - 驅動的名字。                       
 57                                                   
 58  .init - 一個指向per-policy初始化函數    
 59                                                   
 60  .verify - 一個指向"verification"函數的    
 61                                                   
 62  .setpolicy 或 .fast_switch 或 .target 或 .    
 63  下文。                                        
 64                                                   
 65 其它可選成員                                
 66                                                   
 67  .flags - 給cpufreq核心的提示。            
 68                                                   
 69  .driver_data - cpufreq驅動程序的特有    
 70                                                   
 71  .get_intermediate 和 target_intermediate -     
 72  的頻率。                                     
 73                                                   
 74  .get - 返回CPU的當前頻率。               
 75                                                   
 76  .bios_limit - 返回HW/BIOS對CPU的最大頻    
 77                                                   
 78  .exit - 一個指向per-policy清理函數的    
 79  階段被調用。                               
 80                                                   
 81  .suspend - 一個指向per-policy暫停函數    
 82  後被調用。                                  
 83                                                   
 84  .resume - 一個指向per-policy恢復函數    
 85  調用。                                        
 86                                                   
 87  .ready - 一個指向per-policy準備函數    
 88                                                   
 89  .attr - 一個指向NULL結尾的"struct freq    
 90  sysfs。                                         
 91                                                   
 92  .boost_enabled - 如果設置,則啓用提    
 93                                                   
 94  .set_boost - 一個指向per-policy函數的    
 95                                                   
 96                                                   
 97 1.2 Per-CPU 初始化                             
 98 ------------------                                
 99                                                   
100 每當一個新的CPU被註冊到設備模型    
101 略不存在,則會調用per-policy的初始    
102 只爲某個策略調用一次,而不是對    
103 *policy`` 作爲參數。現在該怎麼做呢    
104                                                   
105 如果有必要,請在你的CPU上激活CPUf    
106                                                   
107 然後,驅動程序必須填寫以下值:       
108                                                   
109 +-----------------------------------+---------    
110 |policy->cpuinfo.min_freq和         | 該CPU    
111 |policy->cpuinfo.max_freq           |             
112 |                                   |             
113 +-----------------------------------+---------    
114 |policy->cpuinfo.transition_latency | CPU在    
115 |                                   | 納秒    
116 |                                   | CPUFREQ_    
117 |                                   |             
118 +-----------------------------------+---------    
119 |policy->cur                        | 該CPU    
120 |                                   |             
121 +-----------------------------------+---------    
122 |policy->min,                       | 必須    
123 |policy->max,                       | 會用    
124 |policy->policy and, if necessary,  | cpufreq_    
125 |policy->governor                   | 之一    
126 |                                   | cpufreq_    
127 |                                   |             
128 +-----------------------------------+---------    
129 |policy->cpus                       | 該polic    
130 |                                   | (即與    
131 |                                   | 掩碼(    
132 |                                   | 更新    
133 |                                   |             
134 +-----------------------------------+---------    
135                                                   
136 對於設置其中的一些值(cpuinfo.min[max    
137 助。關於它們的更多信息,請參見    
138                                                   
139                                                   
140 1.3 驗證                                        
141 --------                                          
142                                                   
143 當用戶決定設置一個新的策略(由"po    
144 以便糾正不兼容的值。爲了驗證這    
145 *policy``, ``unsigned int min_freq``, ``unsign    
146 關於頻率表輔助函數的詳細內容請    
147                                                   
148 您需要確保至少有一個有效頻率(    
149 要,先增大policy->max,只有在沒有    
150                                                   
151                                                   
152 1.4 target 或 target_index 或 setpolicy 或     
153 ----------------------------------------------    
154                                                   
155 大多數cpufreq驅動甚至大多數CPU頻率    
156 可以使用->target(),->target_index()或->    
157                                                   
158 有些具有硬件調頻能力的處理器可    
159                                                   
160                                                   
161 1.5. target/target_index                          
162 ------------------------                          
163                                                   
164 target_index調用有兩個參數: ``struct     
165 索引(用於索引頻率表項)。               
166                                                   
167 當調用這裏時,CPUfreq驅動必須設置    
168                                                   
169 在發生錯誤的情況下總是應該恢復    
170 中間頻率。                                   
171                                                   
172 已棄用                                         
173 ----------                                        
174 target調用有三個參數。``struct cpufreq    
175 unsigned int relation.                            
176                                                   
177 CPUfreq驅動在調用這裏時必須設置新    
178                                                   
179 - 儘量貼近"目標頻率"。                   
180 - policy->min <= new_freq <= policy->max (這    
181 - 如果 relation==CPUFREQ_REL_L,嘗試選    
182   最低,但不能低於")                      
183 - 如果 relation==CPUFREQ_REL_H,嘗試選    
184   最高,但不能高於")                      
185                                                   
186 這裏,頻率表輔助函數可能會幫助    
187                                                   
188 1.6. fast_switch                                  
189 ----------------                                  
190                                                   
191 這個函數用於從調度器的上下文進    
192 個回調必須經過高度優化,以儘可    
193                                                   
194 這個函數有兩個參數: ``struct cpufre    
195                                                   
196                                                   
197 1.7 setpolicy                                     
198 -------------                                     
199                                                   
200 setpolicy調用只需要一個 ``struct cpufre    
201 率切換的下限設置爲policy->min,上    
202 CPUFREQ_POLICY_PERFORMANCE時選擇面向性    
203 也可以查看drivers/cpufreq/longrun.c中的    
204                                                   
205 1.8 get_intermediate 和 target_intermediate      
206 --------------------------------------------      
207                                                   
208 僅適用於未設置 target_index() 和 CPUFR    
209                                                   
210 get_intermediate應該返回一個平臺想要    
211 該頻率,然後再跳轉到'index'對應的    
212 target_intermediate()或target_index()中處    
213                                                   
214 在驅動程序不想爲某個目標頻率切    
215 在這種情況下,cpufreq核心將直接調    
216                                                   
217 注意:->target_index()應該在發生失敗    
218 因爲cpufreq核心會爲此發送通知。       
219                                                   
220                                                   
221 2. 頻率表輔助函數                          
222 =================                                 
223                                                   
224 由於大多數支持cpufreq的處理器只允    
225 程序的一些工作。這樣的"頻率表"    
226 含驅動程序的專用值,"frequency"成    
227 cpufreq_frequency_table條目,頻率設置    
228 CPUFREQ_ENTRY_INVALID。這些條目不需要    
229 因爲搜索最佳匹配會更快。              
230                                                   
231 如果在policy->freq_table字段中包含一    
232                                                   
233 cpufreq_frequency_table_verify()保證至少    
234 準則都被滿足。這對->verify調用很    
235                                                   
236 cpufreq_frequency_table_target()是對應於->    
237 回包含CPU要設置的頻率的頻率表條    
238                                                   
239 以下宏可以作爲cpufreq_frequency_table    
240                                                   
241 cpufreq_for_each_entry(pos, table) - 遍歷頻    
242                                                   
243 cpufreq_for_each_valid_entry(pos, table) - 該    
244 使用參數"pos" -- 一個 ``cpufreq_frequenc    
245 的 ``cpufreq_frequency_table *`` 。             
246                                                   
247 例如::                                          
248                                                   
249         struct cpufreq_frequency_table *pos, *    
250                                                   
251         cpufreq_for_each_entry(pos, driver_fre    
252                 /* Do something with pos */       
253                 pos->frequency = ...              
254         }                                         
255                                                   
256 如果你需要在driver_freq_table中處理po    
257 cpufreq_for_each_entry_idx() 和 cpufreq_for_e    
258                                                   
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php