Rocky Linux 第5回「Rocky LinuxでRaspberry Pi用のvcgencmdをビルドする」

Raspberry Pi用の便利なコマンド

現在、Raspberry Pi用のRocky LinuxにはRaspberry Pi OSで便利に使用しているコマンドであるvcgencmdtvserviceが含まれていません。

Raspberry Pi OSの公式ドキュメントでは、主にHDMIディスプレイの情報取得と設定に使用されるtvserviceとRaspberry Pi上のVideoCore GPUから情報を出力するとされているvcgencmdがあります。

これらのコマンドのソースがGitHubuserlandとして公開されていますから、それを利用してRaspberry PiにインストールしたRocky Linux上でビルドしていくことにします。

開発環境のインストール

まずRocky Linuxで提供されているパッケージのグループを確認してみます。

$ env LANG=C dnf group list

Rocky Linuxでは、開発環境がDevelopment Toolsとしてグループで提供されています。

$ sudo dnf group install -y "Development Tools"

ここでは、さらにcmakeも追加でインストールしておきます。以前、AlmaLinuxで追加していたrsyncvimwgetなどのコマンドについてはRocky Linuxではインストール済みとなっています。

$ sudo dnf install -y cmake

userlandのクローンとビルド

開発環境の準備ができましたから、GitHubからソースをクローンしてビルドします。

$ git clone https://github.com/raspberrypi/userland.git

クローンしたソースをビルドします。

$ cd userland
$ ./buildme --aarch64

実は、ここでbuildmeを実行するとビルドに続けて/opt/vcディレクトリーにコマンドとライブラリーをインストールしています。

vcgencmdの実行

ビルドとインストールが出来ましたら、vcgencmdを実行してみます。

先ほど実行したbuildmeで、vcgencmdの実行に必要なライブラリーを/opt/vc/libディレクトリーにインストールしていますから、これを使用できるように設定します。

$ cd /etc/ld.so.conf.d
$ sudo vi vclib.conf
/opt/vc/lib
$ sudo ldconfig

/etc/ld.so.conf.dディレクトリーにvclib.confファイルを作成して、/opt/vc/libとしてライブラリーのパスを追加しています。続けて、ldconfigコマンドを実行してライブラリーを使用できるように設定しています。

実際に実行してみましょう。

$ sudo /opt/vc/bin/vcgencmd measure_temp
temp=43.3'C

vcgencmdで使用できるコマンドが数多くありますが、ここではRaspberry Pi内部のSoCの温度を表示しています。

ところが、ここではsudoで実行しています。Raspberry Pi OSのようにrockyのような一般ユーザーがsudo無しで実行できるように設定していきます。

$ cd /etc/udev/rules.d
$ sudo vi 92-local-vcio-permissions.rules 
KERNEL=="vcio",GROUP="video",MODE="0660"
$ ls -l /dev/vcio
crw-------. 1 root root  10, 125  8月 24 09:00 /dev/vcio
$ sudo udevadm trigger /dev/vcio
$ ls -l /dev/vcio
crw-rw----. 1 root video 10, 125  8月 31 15:16 /dev/vcio
$ sudo usermod -aG video rocky

vcgencmdで使用するデバイス/dev/vcioのパーミッションを変更してグループをvideoにしてvideoグループにアクセス権を付与しています。同時にrockyユーザーをvideoグループに所属させています。

:AlmaLinuxの場合には、/dev/vchiqに設定していましたが、Rocky Linuxでは/dev/vcioに設定しています。Raspberry Pi OSの場合には、AlmaLinuxと同じ/dev/vchiqになっていますから、この点の実装にもAlmaLinuxとRocky Linuxの違いが出て来ています。

rockyユーザーの設定

ここで、rockyユーザーをログインしなおします。idコマンドを実行すると、videoグループに所属しています。

$ id
uid=1000(rocky) gid=1000(rocky) groups=1000(rocky),10(wheel),39(video) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

:ここにもAlma LinuxとRockyLinuxの違いが出ています。AlmaLinuxの場合には、グループとしてadmsystemd-journalに所属することで管理権限を取得しています。Rocky Linuxの場合には、グループとしてwheelに所属することで管理権限を取得しています。

今度は、sudo無しでvcgencmdを実行してみます。

$ /opt/vc/bin/vcgencmd measure_temp
temp=42.8'C

無事に実行できるようになりました。追加でパスの設定をしておきます。

$ vi ~/.bashrc
export PATH=/opt/vc/bin:$PATH
$ source ~/.bashrc

さらに、ログインする度に現在の温度を表示するように$HOME/.bash_profileに次の行を追加します。

$ vi ~/.bash_profile
echo
echo CPU temperature=$(vcgencmd measure_temp)

一旦ログアウトして、再度ログインログインし直してみます。

Last login: Thu Aug 31 15:35:46 2023

CPU temperature=temp=50.1'C
[rocky@rockylinux ~]$ 

さらに、次のようなaliasを作成しておきます。

$ mkdir ~/.bashrc.d
$ vi ~/.bashrc.d/bash.alias
alias temp='vcgencmd measure_temp'

この内容を反映させるために、ログインし直すか~/.bashrcを再読み込みしておきます。

$ source ~/.bashrc
$ temp
temp=48.2'C

tempと入力するだけで温度を表示するようになりました。

vcgencmdの利用

vcgencmdには、多くのコマンドが用意されていて次のようにcommandsとして表示することができます。

$ vcgencmd commands
commands="commands, set_logging, bootloader_config, bootloader_version, cache_flush, codec_enabled, get_mem, get_rsts, measure_clock, measure_temp, measure_volts, get_hvs_asserts, get_config, get_throttled, pmicrd, pmicwr, read_ring_osc, version, readmr, otp_dump, set_vll_dir, set_backlight, get_lcd_info, arbiter, test_result, get_camera, enable_clock, scaling_kernel, scaling_sharpness, hdmi_ntsc_freqs, hdmi_adjust_clock, hdmi_status_show, hvs_update_fields, pwm_speedup, force_audio, hdmi_stream_channels, hdmi_channel_map, display_power, memtest, dispmanx_list, schmoo, render_bar, disk_notify, inuse_notify, sus_suspend, sus_status, sus_is_enabled, sus_stop_test_thread, egl_platform_switch, mem_validate, mem_oom, mem_reloc_stats, hdmi_cvt, hdmi_timings, file, vcos, ap_output_control, ap_output_post_processing, vchi_test_init, vchi_test_exit, pm_set_policy, pm_get_status, pm_show_stats, pm_start_logging, pm_stop_logging, vctest_memmap, vctest_start, vctest_stop, vctest_set, vctest_get"

例えば、bootloader_versionで現在のブートローダーのバージョンを確認したり、bootloader_configでEEPROMの設定内容を確認したりすることができます。他にも、get_config/boot/config.txtで設定しているような内容を確認することもできます。

vcgencmdのオプションとしては、Rocky Linuxでは使用できないコマンドがあるかも知れませんが、Raspberry Pi上でRocky Linuxを使用する際には便利なコマンドの一つです。

参考: Useful Utilities Raspberry Pi公式ドキュメント
    GitHub – userland Raspberry Pi用のコマンドとライブラリーのソース
    Install Raspberry Pi’s vcgencmd on Fedora Leo341’s Personal Site

この記事をシェアする
  • URLをコピーしました!
  • URLをコピーしました!
目次