ちょっと、orange pi pc で作業をしようと思い、ファンの電源をONにしました。
すると、やっぱりかなり効果があったようで、15度は下がっています。
※途中、空白なのはmunin の設定変えたけど再起動してなかった
今、CPUクロックが最高で1.5GHz くらいまであがる設定なので、速いですが温度もあがるようです。
途中、コンパイルしていて1.5Ghz まで上がっていますが温度は、50度くらいのようです。これで少し安心して作業ができますね。さすがに、80度とかちょっと心配になるので。上限のクロックを下げるという方法もあるのですが、どうせならぶん回したいので。
クロックを下げるには、/sys 配下のscaling_max_freq と scaling_min_freq に起動したら設定を入れておく方法と、ブート領域のパラメータを持っているscrpt.bin で指定する方法があるようです。
以下のページが参考になります。
Sunxi Wiki
Orange Pi PC
http://linux-sunxi.org/Orange_Pi_PC#CPU_clock_speed_limit
当初、まったく意味不明だったのですがどうやら、sdCard のブート領域にあるscript.bin がuImage に渡すパラメータを持っているようです。今、動作させているのは loborisさんが作ったものですが、以下のようになっています。
このscript.bin をfex2bin というツールで展開すると見れます。
Sunxi-tools
http://linux-sunxi.org/Sunxi-tools#bin2fex
以下のようにして、実機でビルドしました。
# dnf install libusbx-devel
cd /usr/local/src/BUILD git clone https://github.com/linux-sunxi/sunxi-tools
cd sunxi-tools/ LANG=C make
今後も使うと思うので、パスが切れているところに入れておきます。
sudo cp -pr ./bin2fex /usr/local/bin
sudo cp -pr ./fex2bin /usr/local/bin
sudo cp -pr ./sunxi-* /usr/local/bin
sudo chown root.root /usr/local/bin/bin2fex
sudo chown root.root /usr/local/bin/fex2bin
sudo chown root.root /usr/local/bin/sunxi-*
で、以下のように使うようです。
$ bin2fex script.bin lobo.fex
この中はパラメータがたくさん書かれたもので、最大と最小が以下のように指定されていました。
[dvfs_table]
pmuic_type = 2
pmu_gpio0 = port:PL06<1><1><2><1>
pmu_level0 = 11300
pmu_level1 = 576
extremity_freq = 1536000000
max_freq = 1536000000
min_freq = 480000000
LV_count = 8
LV1_freq = 1536000000
LV1_volt = 1500
LV2_freq = 1200000000
LV2_volt = 1300
LV3_freq = 0
LV3_volt = 1100
LV4_freq = 0
LV4_volt = 1100
LV5_freq = 0
LV5_volt = 1100
LV6_freq = 0
LV6_volt = 1100
LV7_freq = 0
LV7_volt = 1100
LV8_freq = 0
LV8_volt = 1100
このファイルは、.fex というのが通り名称のようです。sunxi の git リポジトリに昨年の12月22日にリリースされた.fex ファイルは以下にあります。
sunxi-boards/sys_config/h3/
https://github.com/linux-sunxi/sunxi-boards/tree/master/sys_config/h3
現在の、script.bin の内容と比較すると以下のようです。
[junkhack@OrangePi BUILD]mkdir tmp_boot
[junkhack@OrangePi BUILD] cp -pr /media/boot/* tmp_boot/
[junkhack@OrangePi BUILD]ll tmp_boot/
::
-rwxr-xr-x 1 501 root 35812 12月 19 14:29 script.bin
-rwxr-xr-x 1 501 root 10917600 12月 19 14:29 uImage
[junkhack@OrangePi BUILD]
[junkhack@OrangePi BUILD]cp -p ./sunxi-boards/sys_config/h3/xunlong_orange_pi_pc.fex tmp_boot/
[junkhack@OrangePi BUILD] cd tmp_boot/
[junkhack@OrangePi tmp_boot]bin2fex script.bin lobo.fex
[junkhack@OrangePi tmp_boot] diff -up lobo.fex xunlong_orange_pi_pc.fex > lobo_opipc.patch
違いは以下のようです。
—- lobo_opipc.patch
--- lobo.fex 2016-01-03 04:30:34.000000000 +0900
+++ xunlong_orange_pi_pc.fex 2016-01-03 04:10:45.000000000 +0900
@@ -8,7 +8,8 @@ eraseflag = 1
next_work = 2
[target]
-boot_clock = 1536
+#boot_clock = 1008
+boot_clock = 1200
storage_type = -1
[key_detect_en]
@@ -146,7 +147,7 @@ twi_scl = port:PA11<2><default><default>
twi_sda = port:PA12<2><default><default><default>
[twi1]
-twi_used = 1
+twi_used = 0
twi_scl = port:PA18<3><default><default><default>
twi_sda = port:PA19<3><default><default><default>
@@ -165,14 +166,14 @@ uart_rx = port:PA05<2><1><default><defau
[uart1]
uart_used = 0
uart_port = 1
-uart_type = 2
+uart_type = 4
uart_tx = port:PG06<2><1><default><default>
uart_rx = port:PG07<2><1><default><default>
uart_rts = port:PG08<2><1><default><default>
uart_cts = port:PG09<2><1><default><default>
[uart2]
-uart_used = 1
+uart_used = 0
uart_port = 2
uart_type = 4
uart_tx = port:PA00<2><1><default><default>
@@ -181,16 +182,16 @@ uart_rts = port:PA02<2><1><default><defa
uart_cts = port:PA03<2><1><default><default>
[uart3]
-uart_used = 1
+uart_used = 0
uart_port = 3
-uart_type = 2
+uart_type = 4
uart_tx = port:PA13<3><1><default><default>
uart_rx = port:PA14<3><1><default><default>
uart_rts = port:PA15<3><1><default><default>
uart_cts = port:PA16<3><1><default><default>
[spi0]
-spi_used = 1
+spi_used = 0
spi_cs_bitmap = 1
spi_mosi = port:PC00<3><default><default><default>
spi_miso = port:PC01<3><default><default><default>
@@ -209,50 +210,66 @@ spi_miso = port:PA16<2><default><default
spi_dev_num = 1
[spi_board0]
-modalias = "spidev"
+modalias = "m25p32"
max_speed_hz = 33000000
bus_num = 0
chip_select = 0
mode = 0
-full_duplex = 1
-manual_cs = 0
[gpio_para]
gpio_used = 1
-gpio_num = 19
-gpio_pin_1 = port:PL10<1><default><default><0>
-gpio_pin_2 = port:PA15<1><default><default><1>
-gpio_pin_3 = port:PA06<1><default><default><0>
-gpio_pin_4 = port:PA13<1><default><default><0>
-gpio_pin_5 = port:PA14<1><default><default><0>
-gpio_pin_6 = port:PD14<1><default><default><0>
-gpio_pin_7 = port:PA03<1><default><default><0>
-gpio_pin_8 = port:PC04<1><default><default><0>
-gpio_pin_9 = port:PC07<1><default><default><0>
-gpio_pin_10 = port:PC03<1><default><default><0>
-gpio_pin_11 = port:PA21<1><default><default><0>
-gpio_pin_12 = port:PA07<1><default><default><0>
-gpio_pin_13 = port:PA08<1><default><default><0>
-gpio_pin_14 = port:PG08<1><default><default><0>
-gpio_pin_15 = port:PA09<1><default><default><0>
-gpio_pin_16 = port:PA10<1><default><default><0>
-gpio_pin_17 = port:PG09<1><default><default><0>
-gpio_pin_18 = port:PG06<1><default><default><0>
-gpio_pin_19 = port:PG07<1><default><default><0>
-
-[led_assign]
-normal_led = "gpio_pin_2"
-standby_led = "gpio_pin_1"
+gpio_num = 30
+; gpio_pin_1 = port:PL10<1><default><default><1>
+; gpio_pin_2 = port:PA15<1><default><default><0>
+gpio_pin_3 = port:PA12<1><default><default><0>
+gpio_pin_4 = port:PA11<1><default><default><0>
+gpio_pin_5 = port:PA06<1><default><default><0>
+gpio_pin_6 = port:PA13<1><default><default><0>
+gpio_pin_7 = port:PA14<1><default><default><0>
+gpio_pin_8 = port:PA01<1><default><default><0>
+gpio_pin_9 = port:PD14<1><default><default><0>
+gpio_pin_10 = port:PA00<1><default><default><0>
+gpio_pin_11 = port:PA03<1><default><default><0>
+gpio_pin_12 = port:PC04<1><default><default><0>
+gpio_pin_13 = port:PC07<1><default><default><0>
+gpio_pin_14 = port:PC00<1><default><default><0>
+gpio_pin_15 = port:PC01<1><default><default><0>
+gpio_pin_16 = port:PA02<1><default><default><0>
+gpio_pin_17 = port:PC02<1><default><default><0>
+gpio_pin_18 = port:PC03<1><default><default><0>
+gpio_pin_19 = port:PA21<1><default><default><0>
+gpio_pin_20 = port:PA19<1><default><default><0>
+gpio_pin_21 = port:PA18<1><default><default><0>
+gpio_pin_22 = port:PA07<1><default><default><0>
+gpio_pin_23 = port:PA08<1><default><default><0>
+gpio_pin_24 = port:PG08<1><default><default><0>
+gpio_pin_25 = port:PA09<1><default><default><0>
+gpio_pin_26 = port:PA10<1><default><default><0>
+gpio_pin_27 = port:PG09<1><default><default><0>
+gpio_pin_28 = port:PA20<1><default><default><0>
+gpio_pin_29 = port:PG06<1><default><default><0>
+gpio_pin_30 = port:PG07<1><default><default><0>
+
+;[led_assign]
+;normal_led = "gpio_pin_2"
+;standby_led = "gpio_pin_1"
+
+[leds_para]
+leds_used = 1
+green_led = port:PL10<1><default><default><0>
+green_led_active_low = 0
+red_led = port:PA15<1><default><default><0>
+red_led_active_low = 0
[ths_para]
ths_used = 1
-ths_trip1_count = 5
-ths_trip1_0 = 75
-ths_trip1_1 = 85
-ths_trip1_2 = 90
-ths_trip1_3 = 100
-ths_trip1_4 = 105
-ths_trip1_5 = 0
+ths_trip1_count = 6
+ths_trip1_0 = 70
+ths_trip1_1 = 80
+ths_trip1_2 = 85
+ths_trip1_3 = 90
+ths_trip1_4 = 95
+ths_trip1_5 = 100
ths_trip1_6 = 0
ths_trip1_7 = 0
ths_trip1_0_min = 0
@@ -264,21 +281,22 @@ ths_trip1_2_max = 3
ths_trip1_3_min = 3
ths_trip1_3_max = 4
ths_trip1_4_min = 4
-ths_trip1_4_max = 4
-ths_trip1_5_min = 0
-ths_trip1_5_max = 0
+ths_trip1_4_max = 5
+ths_trip1_5_min = 5
+ths_trip1_5_max = 5
ths_trip1_6_min = 0
ths_trip1_6_max = 0
ths_trip2_count = 1
ths_trip2_0 = 105
[cooler_table]
-cooler_count = 5
-cooler0 = "1536000 4 4294967295 0"
+cooler_count = 6
+cooler0 = "1296000 4 4294967295 0"
cooler1 = "1200000 4 4294967295 0"
cooler2 = "1008000 4 4294967295 0"
-cooler3 = "816000 3 4294967295 0"
-cooler4 = "504000 1 4294967295 0"
+cooler3 = "816000 4 4294967295 0"
+cooler4 = "648000 4 4294967295 0"
+cooler5 = "480000 1 4294967295 0"
[nand0_para]
nand_support_2ch = 0
@@ -316,17 +334,15 @@ hdmi_mode_check = 1
disp_init_enable = 1
disp_mode = 0
screen0_output_type = 3
-screen0_output_mode = 10
+screen0_output_mode = 4
screen1_output_type = 3
-screen1_output_mode = 10
+screen1_output_mode = 4
fb0_format = 0
fb0_width = 0
fb0_height = 0
fb1_format = 0
fb1_width = 0
fb1_height = 0
-fb0_framebuffer_num = 3
-sunxi_fb_mem_reserve = 32
[hdmi_para]
hdmi_used = 1
@@ -340,6 +356,7 @@ tv_dac_src0 = 0
[pwm0_para]
pwm_used = 0
pwm_positive = port:PA05<3><0><default><default>
+; If set gamc_phy to use = 2
[gmac0]
gmac_used = 2
@@ -500,8 +517,8 @@ smc_sda = port:PA08<2><default><default>
[usbc0]
usb_used = 1
-usb_port_type = 1
-usb_detect_type = 0
+usb_port_type = 2
+usb_detect_type = 1
usb_id_gpio = port:PG12<0><1><default><default>
usb_det_vbus_gpio = port:PG12<0><1><default><default>
usb_drv_vbus_gpio = port:PL02<1><0><default><0>
@@ -693,31 +710,54 @@ ir_addr_code12 = 65344
ir_used = 1
ir_tx = port:PH07<2><default><default><default>
+;----------------------------------------------------------------------------------
+; dvfs voltage-frequency table configuration
+;
+; pmuic_type:0:none, 1:gpio, 2:i2c
+; pmu_gpio0: gpio config.
+; pmu_levelx: 0~9999: voltage(mV), 10000~90000:gpio0 state. voltage form high to low.
+;
+; extremity_freq(Hz): cpu extremity frequency when run benckmark or demo apk
+; 1536MHz@1500mV with radiator, 1296MHz@1340mV without radiator
+; max_freq: cpu maximum frequency, based on Hz, can not be more than 1200MHz
+; min_freq: cpu minimum frequency, based on Hz, can not be less than 60MHz
+;
+; LV_count: count of LV_freq/LV_volt, must be < 16
+;
+; LV1: core vdd is 1.50v if cpu frequency is (1296Mhz, 1536Mhz]
+; LV2: core vdd is 1.34v if cpu frequency is (1200Mhz, 1296Mhz]
+; LV3: core vdd is 1.32v if cpu frequency is (1008Mhz, 1200Mhz]
+; LV4: core vdd is 1.20v if cpu frequency is (816Mhz, 1008Mhz]
+; LV5: core vdd is 1.10v if cpu frequency is (648Mhz, 816Mhz]
+; LV6: core vdd is 1.04v if cpu frequency is (0Mhz, 648Mhz]
+; LV7: core vdd is 1.04v if cpu frequency is (0Mhz, 648Mhz]
+; LV8: core vdd is 1.04v if cpu frequency is (0Mhz, 648Mhz]
+;
+;----------------------------------------------------------------------------------
[dvfs_table]
pmuic_type = 2
pmu_gpio0 = port:PL06<1><1><2><1>
pmu_level0 = 11300
-pmu_level1 = 576
-extremity_freq = 1536000000
-max_freq = 1536000000
-min_freq = 480000000
+pmu_level1 = 1100
+max_freq = 1296000000
+min_freq = 648000000
LV_count = 8
-LV1_freq = 1536000000
-LV1_volt = 1500
+LV1_freq = 1296000000
+LV1_volt = 1340
LV2_freq = 1200000000
-LV2_volt = 1300
-LV3_freq = 0
-LV3_volt = 1100
-LV4_freq = 0
+LV2_volt = 1320
+LV3_freq = 1008000000
+LV3_volt = 1200
+LV4_freq = 816000000
LV4_volt = 1100
-LV5_freq = 0
-LV5_volt = 1100
+LV5_freq = 648000000
+LV5_volt = 1040
LV6_freq = 0
-LV6_volt = 1100
+LV6_volt = 1040
LV7_freq = 0
-LV7_volt = 1100
+LV7_volt = 1040
LV8_freq = 0
-LV8_volt = 1100
+LV8_volt = 1040
[gpu_dvfs_table]
G_LV_count = 3
@@ -797,13 +837,3 @@ din_gpio = port:PD00<1><default><default
clk_gpio = port:PD01<1><default><default><1>
stb_gpio = port:PD02<1><default><default><1>
-[mali_para]
-mali_used = 1
-mali_clkdiv = 1
-mali_extreme_freq = 600
-mali_extreme_vol = 1400
-
-[w1_para]
-w1_used = 1
-gpio = 20
-
ファンがなくても、まぁいいようにクロックダウンしたほうが良さそうですね。ということで、fex2bin で作ったscript.bin でリブートしておきました。しばらくこれで様子をみることに。
▼まとめ
・script.bin は、bin2fex や fex2bin で取り扱う
・これがブート領域からkernel に引き渡すパラメータを持っている模様
・VDD を1.34vで扱うLV2 が安全の模様
・*.txt から読み込むようにする u-boot イメージはどうやって作るのか?
・あるいは、今でも kernel に渡す方法があるのかも。
・sunxi からのfex ファイルには gpio ピンのマッピングも追加変更されているようだ
・ヒートシンク+ファンをつければ、40度くらいまでアイドル時になるようで、負荷時は60度くらいかな?
・ファンの効果は絶大だけれども、もう少し設定を下げて運用しようかと思う。