這裏介紹如何使用 vcgencmd
指令查看 Raspberry Pi 的 CPU 溫度、運行速度與電壓等資訊,即時監控硬體的狀態。
在 Raspberry Pi 中我們可以利用 vcgencmd
指令來查看各種的硬體資訊與狀態,以下是常用的指令範例。
時脈頻率(clock frequency)
如果要查詢硬體目前的時脈頻率,可以使用 measure_clock
參數:
vcgencmd measure_clock <clock>
其中的 <clock>
是指定要查詢的硬體,可用的選項有 arm
、 core
、 h264
、 isp
、 v3d
、 uart
、pwm
、 emmc
、 pixel
、 vec
、 hdmi
、 dpi
。
如果要查詢 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>
是指定要查詢的硬體,可用的選項有 core
、 sdram_c
、 sdram_i
、 sdram_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,可用的選項有:H264
、 MPG2
、 WVC1
、 MPG4
、 MJPG
、 WMV9
。
查詢所有 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
其中 28
與 30
代表硬體序號(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 Wiki、 raspberrypi.org、 maketecheasier、 lokir’s linux notes
123
core是GPU core,arm是CPU core,这个翻译得有问题,容易误解