我們看乙個註冊cpufreq_register_driver 的例子.先看makefile。只要定義了 config_x86_cpufreq_nforce2。就會build 出cpufreq-nforce2.o,我們就以它為例
42 obj-$(config_x86_cpufreq_nforce2) += cpufreq-nforce2.o
果然在init函式中呼叫cpufreq_register_driver
416 static int __init nforce2_init(void)
417
425
426 return cpufreq_register_driver(&nforce2_driver);
427 }
我們來看看nforce2_driver
370 static struct cpufreq_driver nforce2_driver = ;
在使用中會呼叫__cpufreq_driver_target 來設定頻率。這個函式target方法或者target_index 來將freq設定到cpu的暫存器中。對這點不明白可以參考前面的博文.
在本例中實現了target方法.
在呼叫target之前會呼叫init方法,init方法就給出了cpu 這裡支援的最大和最小頻率。如358行359所示.
309 static int nforce2_cpu_init(struct cpufreq_policy *policy)
310
其次看看target是如何設定freq的
252 static int nforce2_target(struct cpufreq_policy *policy,
253 unsigned int target_freq, unsigned int relation)
254
在262上所處 target_fsb = target_freq / (fid * 100);
可以看到是通過nforce2_set_fsb(target_fsb)來設定的頻率的。
169 static int nforce2_set_fsb(unsigned int fsb)
170
180
181 tfsb = nforce2_fsb_read(0);
182 if (!tfsb)
186
187 /* first write? then set actual value */
188 pci_read_config_byte(nforce2_dev, nforce2_pllenable, (u8 *)&temp);
189 if (!temp)
197
198 /* enable write access */
199 temp = 0x01;
200 pci_write_config_byte(nforce2_dev, nforce2_pllenable, (u8)temp);
201
202 diff = tfsb - fsb;
203
204 if (!diff)
205 return 0;
206
207 while ((tfsb != fsb) && (tfsb <= max_fsb) && (tfsb >= min_fsb))
223
224 temp = 0x40;
225 pci_write_config_byte(nforce2_dev, nforce2_plladr, (u8)temp);
226
227 return 0;
228 }
229
從214行可以看出在這個例子中是將通過nforce2_calc_pll將freq轉成成pll 通過呼叫nforce2_write_pll來設定到pll暫存器中的
116 static void nforce2_write_pll(int pll)
117
哈哈,125行終於看見真的是在寫暫存器了吧
wml入門之例項篇
先跑個例子,這個例子有點長,希望大家能針對顯示的不同內容去琢磨和理解這些標籤的作用。html tutorial xml tutorial wap tutorial you selected name 其中有兩個card標籤,也就是說會有兩個介面的,第乙個介面如何跳轉到第二個介面呢,靠 其中card2...
Vue系列之例項(二)
entry在main.js中會有乙個vue的例項,每個vue應用都是通過vue函式建立乙個vue例項開始的 new vue 其中,你可以配置一些選項,經常在業務系統的入口檔案中用到的有 el 提供乙個在頁面上已存在的dom元素作為vue例項的掛載目標 el id router 路由資訊,後期單獨介紹...
cls 之例項化物件
今天,在看torchtext的時候,發現了個問題。cls 居然可以作為函式來使用。一開始想不明白,網上查詢加上自己的小實驗算是搞明白了。train data none if train is none else cls os.path.join path,train exts,fields,kwar...