cpufreq之例項分析

2021-07-16 18:05:50 字數 2171 閱讀 5301

我們看乙個註冊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...