這裏介紹如何使用 vcgencmd 指令查看 Raspberry Pi 的 CPU 溫度、運行速度與電壓等資訊,即時監控硬體的狀態。

在 Raspberry Pi 中我們可以利用 vcgencmd 指令來查看各種的硬體資訊與狀態,以下是常用的指令範例。

時脈頻率(clock frequency)

如果要查詢硬體目前的時脈頻率,可以使用 measure_clock 參數:

vcgencmd measure_clock <clock>

其中的 <clock> 是指定要查詢的硬體,可用的選項有 armcoreh264ispv3duartpwmemmcpixelvechdmidpi

如果要查詢 CPU 的時脈頻率(也就是速度),可以執行

vcgencmd measure_clock arm

輸出為
frequency(45)=700000000

如果想查詢所有的硬體時脈頻率,可以使用簡單的 shell 指令稿:

for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do \
  echo -e "$src:\t$(vcgencmd measure_clock $src)" ; \
done

輸出為
arm:   frequency(45)=700000000
core:  frequency(1)=250000000
h264:  frequency(28)=250000000
isp:   frequency(42)=250000000
v3d:   frequency(43)=250000000
uart:  frequency(22)=3000000
pwm:   frequency(25)=0
emmc:  frequency(47)=250000000
pixel: frequency(29)=108000000
vec:   frequency(10)=0
hdmi:  frequency(9)=163682000
dpi:   frequency(4)=0

電壓(voltage)

如果要查詢硬體目前的工作電壓,可以使用 measure_volts 參數:

vcgencmd measure_volts <id>

其中 <id> 是指定要查詢的硬體,可用的選項有 coresdram_csdram_isdram_p。如果沒有指定 <id>,則預設為 core

vcgencmd measure_volts

輸出為
volt=1.200V

查詢所有工作電壓的 shell 指令稿:

for id in core sdram_c sdram_i sdram_p ; do \
  echo -e "$id:\t$(vcgencmd measure_volts $id)" ; \
done

輸出為
core: volt=1.200V
sdram_c: volt=1.200V
sdram_i: volt=1.200V
sdram_p: volt=1.225V

溫度(temperature)

如果要查詢 BCM2835 SoC 目前的溫度,可以使用 measure_temp 參數:

vcgencmd measure_temp

輸出為
temp=43.3’C

Codec

若要查詢特定的 codec 有沒有啟用,可以使用 codec_enabled 參數:

vcgencmd codec_enabled <codec>

其中 <codec> 是指定要查詢的 codec,可用的選項有:H264MPG2WVC1MPG4MJPGWMV9

查詢所有 codec 的指令稿:

for codec in H264 MPG2 WVC1 MPG4 MJPG WMV9 ; do \
  echo -e "$codec:\t$(vcgencmd codec_enabled $codec)" ; \
done

輸出為:
H264: H264=enabled
MPG2: MPG2=disabled
WVC1: WVC1=disabled
MPG4: MPG4=enabled
MJPG: MJPG=enabled
WMV9: WMV9=disabled

設定值(configurations)

get_config 參數可以列出目前系統中所有被設定的參數值:

vcgencmd get_config [config|int|str]

最後一個參數可用來指定要查詢的設定值名稱或是類型,例如查詢 temp_limit 的數值可以執行:

vcgencmd get_config temp_limit

輸出為
temp_limit=85
查詢所有數值資料的設定值可用

vcgencmd get_config int

輸出為
hdmi_force_hotplug=1
disable_overscan=1
overscan_left=24
overscan_right=24
overscan_top=16
overscan_bottom=16
program_serial_random=1
config_hdmi_boost=4
emmc_pll_core=1
hdmi_force_cec_address=65535
framebuffer_ignore_alpha=1
framebuffer_swap=1
disable_splash=1
temp_limit=85
force_pwm_open=1
pause_burst_frames=1
second_boot=1
avoid_fix_ts=1

記憶體配置

Raspberry Pi 的 CPU 與 GPU 是共用同同一個記憶體的,get_mem 參數可以查詢目前記憶體的配置狀態。查詢配置給 CPU 的記憶體大小:

vcgencmd get_mem arm

輸出為
arm=448M
查詢配置給 GPU 的記憶體大小:

vcgencmd get_mem gpu

輸出為
gpu=64M

韌體版本(firmware version)

查詢韌體版本可以使用

vcgencmd version

輸出為
Dec 19 2014 18:44:06
Copyright (c) 2012 Broadcom
version 5abd572e2ed1811283443387af09377b95501c50 (clean) (release)

OTP 記憶體

若要查詢 SoC 裡面 OTP(one time programmable)記憶體的內容,可以使用 otp_dump

vcgencmd otp_dump

輸出為
08:00000000
09:00000000
10:00000000
11:00000000
12:00000000
13:00000000
14:00000000
15:00000000
16:00280000
17:1020000a
18:1020000a
19:ffffffff
20:ffffffff
21:ffffffff
22:ffffffff
23:ffffffff
24:ffffffff
25:ffffffff
26:ffffffff
27:0000c2c2
28:4b45c38d
29:b4ba3c72
30:00000010
31:00000000
32:00000000
33:00000000
34:00000000
35:00000000
36:00000000
37:00000000
38:00000000
39:00000000
40:00000000
41:00000000
42:00000000
43:00000000
44:00000000
45:00000000
46:00000000
47:00000000
48:00000000
49:00000000
50:00000000
51:00000000
52:00000000
53:00000000
54:00000000
55:00000000
56:00000000
57:00000000
58:00000000
59:00000000
60:00000000
61:00000000
62:00000000
63:00000000
64:00000000

其中 2830 代表硬體序號(serial)與修訂版(revision)的版本號碼,/proc/cpuinfo 中所顯示的序號與修訂版本號碼就是從這裡取得的,而 Model B/B+ 的網路卡 MAC 卡號也是根據硬體序號來產生的。

查看 vcgencmd 所有可用的參數

如果要查看 vcgencmd 指令所有可用的參數,可以執行

vcgencmd commands

輸出會類似這樣:
commands="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, version, commands, set_vll_dir, led_control, set_backlight, set_logging, get_lcd_info, set_bus_arbiter_mode, cache_flush, otp_dump, test_result, codec_enabled, get_camera, get_mem, measure_clock, measure_volts, scaling_kernel, measure_temp, get_config, hdmi_ntsc_freqs, hdmi_adjust_clock, hdmi_status_show, hvs_update_fields, pwm_speedup, force_audio, hdmi_stream_channels, hdmi_channel_map, display_power, read_ring_osc, memtest, get_rsts, 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, file, vctest_memmap, vctest_start, vctest_stop, vctest_set, vctest_get"
這些就是所有可以使用的參數,這些參數會因為韌體版本不同而有差異。

如果您對於樹莓派的應用有興趣,建議您可以繼續閱讀物聯網的相關文章。

參考資料:Embedded Linux Wikiraspberrypi.orgmaketecheasierlokir’s linux notes