2017年5月18日木曜日

CentOS7でRaspberry Pi 3のvcgencmdを使う

vcgencmdコマンドはRaspberry Piでシステム内部情報が取得できるコマンドだが、
CentOS7の初期状態では使おうとしてもエラー(コマンドが見つからない)となってしまう。
何となく悔しいのでRaspbianだけではなくCentOS7で何とか利用できるようにしてみたい。


■本日の目標

・vcgencmdコマンドはCentOS7を載せたRaspberry Piで実行する


■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.3.1611 (Core)


■vcgencmdの場所

・ところでvcgencmdはどこにいるのだろうか・・・。
 それがわからないとどうにもならない。
 ・・・そもそも見つからなかったら・・・これでおしまいなのだが・・・。
 早速探してみる。
$ find / -name "vcgencmd"
/opt/vc/bin/vcgencmd


■試しにvcgencmdを動かしてみる

・vcgencmdが見つかったので、とりあえず電圧を計るコマンドで試してみる。
$ /opt/vc/bin/vcgencmd measure_volts core
/opt/vc/bin/vcgencmd: error while loading shared libraries: libvchiq_arm.so: cannot open shared object file: No such file or directory
動かないか・・・。
 エラーメッセージからすると、libvchiq_arm.soとやらが無いようだ。

 では、vcgencmdの利用ライブラリを確認しよう。
$ ldd /opt/vc/bin/vcgencmd
        linux-vdso.so.1 =>  (0x7ee61000)
        libvchiq_arm.so => not found
        libvcos.so => not found
        libpthread.so.0 => /lib/libpthread.so.0 (0x76f93000)
        libdl.so.2 => /lib/libdl.so.2 (0x76f7d000)
        librt.so.1 => /lib/librt.so.1 (0x76f66000)
        libc.so.6 => /lib/libc.so.6 (0x76e15000)
        /lib/ld-linux-armhf.so.3 (0x54b9d000)
確かに「libvchiq_arm.so」が無いようだ。

 ※lddコマンドとは「共有ライブラリへの依存関係を表示する」コマンドで、
  依存関係のあるライブラリの場所を確認することが可能。


■エラー解消

・次は、本当に「libvchiq_arm.so」が無いのか探してみよう。
$ find / -name "libvchiq_arm.so"
/opt/vc/lib/libvchiq_arm.so
/opt/vc/lib配下にあった。

 近所にあったけど参照されていなかったのね・・・。
 ・・・というわけで、共有ライブラリへパスを通して参照できるようにしてみよう。
 【変更前】
$ cat /etc/ld.so.conf
include ld.so.conf.d/*.conf

 【編集】
$ echo '/opt/vc/lib' >> /etc/ld.so.conf

 【変更後】
$ cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/opt/vc/lib

 【キャッシュ化】
$ ldconfig
※OSの仕組みとして、速度向上のためキャッシュファイルからライブラリパスを参照しているので、
  上記コマンドで設定ファイルの内容をキャッシュファイルに反映している。


■vcgencmdの起動確認

・先ほどと同じように、電圧を計るコマンドで確認する。
$ /opt/vc/bin/vcgencmd measure_volts core
volt=1.2000V
電圧が取れた!


■Path追加

・最後に「/opt/vc/bin」にパスを通して、Raspbianと同じように実行モジュール単体指定で起動できるようにする。
 一時的であれば、
$ export PATH=$PATH:/opt/vc/bin
で良いけど、
 恒久的にパスを通しておきたいので、「/etc/profile」の末尾にパスを追記する。
$ echo 'export PATH=$PATH:/opt/vc/bin' >> /etc/profile
(恒久対応の上記コマンドの内容は、次回セッションから有効なので注意)

 これでRaspbianと同じように「vcgencmd」だけで結果が取れるようになった。
$ vcgencmd measure_volts core
volt=1.2000V


■vcgencmdで取得できる主な情報

【ファームウェアのバージョン】
$ vcgencmd version
Feb 26 2017 20:30:04
Copyright (c) 2012 Broadcom
version 6e74add571c9691b108c68f29c3f45374cac24e6 (clean) (release)
【CPUの温度】
$ vcgencmd measure_temp
temp=40.8'C
【CPUの動作周波数】
$ vcgencmd measure_clock arm
frequency(45)=600000000
【CPUの動作電圧】
$ vcgencmd measure_volts
volt=1.2000V
【メモリ割当(前者はCPU、後者はGPU)】
$ vcgencmd get_mem arm
arm=944M
$ vcgencmd get_mem gpu
gpu=64M

Previous Post
Next Post

post written by: