2015年6月23日火曜日

[備忘録]BeagleBone Blackのコアクロック変更

訳あって、BeagleBone Blackのコアクロックを強制的に落とすテストをすることになって、調べてみた件。

Linux起動時の最初の方でアーキテクチャ別/ボード別の初期化処理の中で初期化されているものと思って調べてみましたが、どうも該当する処理が見つからない。
初期化部分というよりはcpufreqというドライバの中で、そして「設定」というよりは「制御」されているということが分かりました。
いつも使っているWindowsでは、高負荷のときはクロックを上げ、低負荷では下げるということを当たり前のように捉えていましたが、組み込みLinuxでもそういうことをしているとは、すぐには考えが及びませんでした。

というわけで、cpufreqドライバと関係するソースを探してみるも、具体的にクロック速度を定義しているところが見つからない。

root@beaglebone:~# cat </sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
300000 600000 800000 1000000
root@beaglebone:~#

このように300MHz/600MHz/800MHz/1GHzがリストアップされるけれど、このリストはどこで定義されているのだろう?

答えは、device treeにありました(こういう時にもdtbを使うんだなぁ、と思いました)。

KERNEL/arch/arm/boot/dts/am335x-boneblack.dtsにdevice treeのソースがありましたので、これをちょっと書き換えてみたところ、指定したクロックの範囲内で動作させることができることが確認できました。

余談ですが、クロックを変更するのにPLLのレジスタを変更するだけでなく、コア電圧のレギュレータも変更しているのですね。なかなか面倒な世の中になったものです。

0 件のコメント:

コメントを投稿