JKS Posted July 28, 2021 Posted July 28, 2021 Hi everyone, I am a LINUX beginner. and I have a NanoPi M4V2, and want to build a mini NAS with OpenMediaVault 5 under Armbian (OMV5 can only run in Armbiam/Debian, not available in Ubuntu) The M4V2 has a SATA hat, and it can support up to 4 hard drives (2.5 inches size), so the SATA hat is powered separately, and I guess this is why it always gets overheat This is what it looks like. There is a 12V fan interface (2pin) on this SATA hat, just right biside the power button. And I found that there are already some solution in the forum of armbian.com, all kinds of scripts, some can drive the Fan according to the CPU's temperature, or even SSD/HDD's temperature, these are so amazing. And then when I tried these scripts, I realized these PWM fan scripts won't solve the issue I am facing. bacause the SATA hat is getting heater and heater, while at this time the CPU's temperature remains in 100F, and the fan is not running. so I guess if I can let the fan keep running in full speed, this issue would be solved. then I went to the FriendlyARM's Wiki page, and found they did provide a scrips to change working method of the FAN, modify the script /usr/bin/start-rk3399-pwm-fan.sh #!/bin/bash echo 0 > /sys/class/pwm/pwmchip1/export sleep 1 echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable echo 50000 > /sys/class/pwm/pwmchip1/pwm0/period echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable echo 45000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle I have tried this script in ubuntu, which is an official image "Friendly Core" (a branch of Ubuntu 18.04), it was fine. When system lights up, the fan will keep running, when system is done, the fan will shut down also. (before I have try the GPIO with another 5V fan, while in this case, the fan wont shutdown even the system is poweroff ) And now my problem is, this script can only run under Ubuntu, how can I make it available in Armbian also? Will be really appreciate to hear any response from you. Thanks, J.K.
tparys Posted July 29, 2021 Posted July 29, 2021 So, Armbian's M4V2 images base off both Debian and Ubuntu. Sounds like you're using the Debian version. The good news is that what you're trying to do should be compatible with both, but it might be easier to not use their stuff as-is. The easiest way is to add that bit of bash script to /etc/rc.local and make sure the rc-local service is enabled. That should turn your fan on and leave it going on every boot. $ sudo systemctl enable rc-local $ sudo systemctl start rc-local The rc-local service exists at least on the Ubuntu version. It should exist on Debian as well. But even if it doesn't it's pretty easy to add it. FYI, that little bit of shell script is enabling the PWM channel to loop every 50000 clocks, remaining high 45000 of those clocks (45000/50000 = 90% power). Note that you shouldn't have to enable the PWM more than once.
JKS Posted July 29, 2021 Author Posted July 29, 2021 @tparys Thanks for your very good suggestion. I have done as your steps, and was trying to slove the problems. now I have got some progress, after a reboot, the fan will keep running for 5 seconds.. it is much better than before now, at least it moved would you please help to review my steps, and see why the fan is not always running. 1. I have modified the /etc/rc.local, and then put the scripts in it. as below: GNU nano 4.8 /etc/rc.local #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. #!/bin/bash echo 0 > /sys/class/pwm/pwmchip1/export sleep 1 echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable echo 50000 > /sys/class/pwm/pwmchip1/pwm0/period echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable echo 40000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle exit 0 2. While when I try to start the rc-local.service, it says we need to do some configation. root@nanopim4v2:/lib/systemd/system# nano rc.local.service root@nanopim4v2:/lib/systemd/system# systemctl enable rc-local.service The unit files have no installation config (WantedBy=, RequiredBy=, Also=, Alias= settings in the [Install] section, and DefaultInstance= for template units). This means they are not meant to be enabled using systemctl. Possible reasons for having this kind of units are: • A unit may be statically enabled by being symlinked from another unit's .wants/ or .requires/ directory. • A unit's purpose may be to act as a helper for some other unit which has a requirement dependency on it. • A unit may be started when needed via activation (socket, path, timer, D-Bus, udev, scripted systemctl call, ...). • In case of template units, the unit is meant to be enabled with some instance name specified. root@nanopim4v2:/lib/systemd/system# 3. Then I modified the local.service file, as below: nano /lib/systemd/system/rc.local.service [Unit] Description=/etc/rc.local Compatibility ConditionFileIsExecutable=/etc/rc.local After=network.target [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 RemainAfterExit=yes [Install] WantedBy=multi-user.target Alias=rc-local.service 4. And after that, I still cannot enable the re-local.service. the system gave the same information, like what we have seen in Step2. Then I try the systemctl status, as below: root@nanopim4v2:~# systemctl status rc-local.service ● rc-local.service - /etc/rc.local Compatibility Loaded: loaded (/lib/systemd/system/rc-local.service; enabled-runtime; vendor preset: enabled) Drop-In: /usr/lib/systemd/system/rc-local.service.d └─debian.conf Active: failed (Result: exit-code) since Fri 2021-07-30 05:14:03 +08; 9min ago Docs: man:systemd-rc-local-generator(8) Jul 30 05:14:03 nanopim4v2 systemd[1]: Starting /etc/rc.local Compatibility... Jul 30 05:14:03 nanopim4v2 rc.local[3751]: /etc/rc.local: 16: echo: echo: I/O error Jul 30 05:14:03 nanopim4v2 systemd[1]: rc-local.service: Control process exited, code=exited, status=1/FAILURE Jul 30 05:14:03 nanopim4v2 systemd[1]: rc-local.service: Failed with result 'exit-code'. Jul 30 05:14:03 nanopim4v2 systemd[1]: Failed to start /etc/rc.local Compatibility. Now I got confused.. I dont know where I have done wrong. The success looks very close, but still untouchable for me. If anyone can give any advice, I will really appreciate. Thanks JK
tparys Posted July 30, 2021 Posted July 30, 2021 nanopim4v2 rc.local[3751]: /etc/rc.local: 16: echo: echo: I/O error That's the script error, probably line 16. Not sure why it failed. I don't see anything obviously wrong. Depending, it's possible the kernel is still initializing the PWM device at the time it runs. You can add some print statements like "echo HERE" to you script to confirm where it dies. You can try to add a delay like a "sleep 30" at the start of the script, but that's just a guess. Not sure why you'd be getting an I/O error. It's also possible that there's some kernel version differences between the FriendlyElec build and Armbian's kernel, so that scripting might need some changes. For example, I had to do this to turn on the PWM fan on my M4V2 metal case. You may need to experiment a bit. echo 0 > /sys/class/pwm/pwmchip1/export echo normal > /sys/class/pwm/pwmchip1/pwm0/polarity echo 50000 > /sys/class/pwm/pwmchip1/pwm0/period echo 40000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable Edit: As a note, my M4V2 had pwm0 set as inverted by default. Your settings of 90% power could be interpreted as 10% instead, and may not be enough for the fan to spin. 1
JKS Posted August 1, 2021 Author Posted August 1, 2021 This issue is now finally closed. I try the historic version Armbian of M4V2. The tested version is Armbian_21.02.1_Nanopim4v2_bionic_current_5.10.12.img.xz , and now everything works fine. I listed my operation log as below, so that if someone needs it in the future, they can refer to it. Step1. modify the rc.local file: root@nanopim4v2:~# nano /etc/rc.local and paste the commend before "exit 0": bash /usr/bin/start-rk3399-pwm-fan.sh sample: #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. bash /usr/bin/start-rk3399-pwm-fan.sh exit 0 Step2: build/modify the SH file: root@nanopim4v2:~# nano /usr/bin/start-rk3399-pwm-fan.sh Sample: #!/bin/bash echo 0 > /sys/class/pwm/pwmchip1/export sleep 1 echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable echo 50000 > /sys/class/pwm/pwmchip1/pwm0/period echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable echo 45000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle Step3, modify the re-local.service: root@nanopim4v2:~# nano /lib/systemd/system/rc-local.service And complete the [Install] part. Sample: # SPDX-License-Identifier: LGPL-2.1+ # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # This unit gets pulled automatically into multi-user.target by # systemd-rc-local-generator if /etc/rc.local is executable. [Unit] Description=/etc/rc.local Compatibility Documentation=man:systemd-rc-local-generator(8) ConditionFileIsExecutable=/etc/rc.local After=network.target [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 RemainAfterExit=yes GuessMainPID=no [Install] WantedBy=multi-user.target Alias=rc-local.service Step4: Set rc.local to be executable root@nanopim4v2:~# chmod +x /etc/rc.local Step5: complete the others system setting, make it run as a system services. root@nanopim4v2:~# systemctl daemon-reload root@nanopim4v2:~# systemctl enable rc-local Created symlink /etc/systemd/system/rc-local.service → /lib/systemd/system/rc-local.service. Created symlink /etc/systemd/system/multi-user.target.wants/rc-local.service → /lib/systemd/system/rc-local.service. root@nanopim4v2:~# systemctl start rc-local root@nanopim4v2:~# systemctl status rc-local.service ● rc-local.service - /etc/rc.local Compatibility Loaded: loaded (/lib/systemd/system/rc-local.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/rc-local.service.d └─debian.conf Active: active (exited) since Sun 2021-08-01 05:53:32 UTC; 11min ago Docs: man:systemd-rc-local-generator(8) Tasks: 0 (limit: 4384) CGroup: /system.slice/rc-local.service Aug 01 05:53:32 nanopim4v2 systemd[1]: Starting /etc/rc.local Compatibility... Aug 01 05:53:32 nanopim4v2 systemd[1]: Started /etc/rc.local Compatibility. Special thanks to Mr. @Tparys for his help, especially when I was most helpless...
JKS Posted August 1, 2021 Author Posted August 1, 2021 Later I have flash a new image Armbian_21.05.1_Nanopim4v2_buster_current_5.10.35.img, in this image I can install the Open Media Valut 5. Till now the fan and the OMV5 all works fine. thanks. Augest 2nd, 2021 JK
tparys Posted August 3, 2021 Posted August 3, 2021 Glad you got it working. Though I am curious if there's a kernel or configuration difference between the current RK3399 kernel vs the older one you found to work. FYI. You may want to try and freeze your kernel, or be careful about what updates you pull. You fan may stop working one day, and you might just be putting this issue off until then.
tparys Posted August 8, 2021 Posted August 8, 2021 On 8/5/2021 at 9:14 AM, loyalthomas said: how to make the Ubutu Scripts useful in Armbian? / to make the fan of nanopi M4V2 SATA hat always running. As mentioned earlier in this thread. Easiest is to add script lines to /etc/rc.local and enable rc-local service via systemctl. I also set this up via thermal management in the linux via DTB overlay. I found it nicer as it kicked in almost as soon as the system turned on. https://forum.armbian.com/topic/17022-automatic-kernel-control-of-nanopi-m4-m4v2-metal-case-fan/
Recommended Posts