ちょっと、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度くらいかな?
・ファンの効果は絶大だけれども、もう少し設定を下げて運用しようかと思う。