Skip to content
View in the app

A better way to browse. Learn more.

Armbian Community Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Armbian on CM3588, fan does not work

Featured Replies

Hi, I'm running a FriendlyElec CM3588 board, really enjoying Armbian, but the CPU fan does not work whatsoever. It's meant to be powered from the 5V outlet marked FAN (close to MASK button). I replaced the fan with another one, same result - so hopefully it's not the hardware at fault. I never dug into fan control on Linux, anybody knows what to do?

Quote

Linux version 6.1.115-vendor-rk35xx (build@armbian)

 

It works for me on an edge kernel (I have 6.19.6). I think current kernels will work too. You can change them using armbian-config. Not sure if you will lose anything, the newer kernels are pretty feature-complete for RK3588.

  • Author

I thought edge kernels are for most recent updates. Fan control seems to be a basic feature that I'd expect stable kernels to handle. I'll do some more research about if I'll lose anything changing the kernel.

You are on a vendor kernel.  That is not mainline linux, you need to be on current or edge to run mainline.  Having said that, the general rule of thumb is that vendor is old (unpatched with all that implies security wise) but generally feature complete, while mainline is newer but waiting for features to be accepted in mainline (some of which might never get ported to mainline).  

Each user generally cares about different features, so try different kernels to find the kernel that works best for your use cases.

Hi nonconfigure,

Short answer: yes, switching to the edge kernel is the right move, but here is what's actually going on so the fix is not mysterious next time.

Why the 6.1 vendor kernel cannot drive the fan. The Rockchip 6.1 BSP ships its own thermal driver tree (`drivers/thermal/rockchip_thermal.c` under `/proc/vendor-thermal` paths) and its own PWM fan driver, but it does not expose the standard `pwm-fan`/`thermal` cooler bindings that the mainline/edge driver expects. So even if a board file declares a fan PWM and a trip point, the vendor kernel will not actually wire them together — the cooler's `cur_state` stays zero, the PWM stays at 0% duty, and the fan looks dead. That's why another 5 V fan on the same header behaves the same.

Why edge kernel 6.19.6 fixes it. Mainline wired `pwm-fan` + `thermal` on the RK3588 about a year ago and the cooling-map bindings have been refined in edge since, including the `map0/map1/map2` node-name collision that defcom5 landed in Armbian 26.8 (PR #10514, merged Monday). After that fix, edge 6.19.6 on RK3588-class SoCs sees the cooler properly, and the trip points declared in the board DT become active.

If the edge kernel doesn't pick it up either, the next thing to check is the DTB. The CM3588 FriendlyElec build carries a vendor DTB which references the 5 V header as plain GPIO, not PWM. You can confirm with `ls /sys/class/thermal/` and `ls /sys/class/pwm/` — if the cooler is missing or the PWM chip is absent, that's the symptom. The fix is to overlay a DTB fragment that exposes pwm0 (or whichever PWM channel is wired to the FAN header on the NAS carrier) and bind it to a cooler with trip points at 60°C / 75°C / 85°C. There are CM3588 community overlays floating around for this if your vendor kernel doesn't have one — let me know and I'll dig up links.

A note from the other side of the same problem. We make an industrial RK3588 SBC (the EM3588) and we ship it fanless by design — the SoC + DRAM + PMIC envelope is rated for –40°C ~ +85°C at industrial temperature grades with a heatsink but no active cooling. In an enclosure at 30°C ambient the junction-to-ambient rise is what matters, not PWM. That's a different design trade from the CM3588 NAS form factor, but the engineering pattern is the same: most RK3588-class devices do not actually need a fan unless they're in a sealed box or running heavy NPU/GPU workloads continuously. If your case is open and the NAS is just acting as a NAS, you may be better off removing the fan entirely and letting the SoC thermally throttle on its own trip points, which the vendor kernel does correctly.

 

I feel I should mention that 6.19.6 has problems for me (one core is constantly pegged for no apparent reason, some processes hang and can't be killed) so you might want to try current first (6.18.2?). It may not be optimized fanwise but it should still work.

55 minutes ago, CryBaby said:

6.19.6 has problems for me

I haven't tracked the things about the fan patch, but maybe just see if latest edge wooks OK for you; I just did full-upgrade my FriendlyElec NanoPi-R6C, have many kernels installed, grubs sorts highest first:

Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-7.1.10+deb14-arm64-16k
Found initrd image: /boot/initrd.img-7.1.10+deb14-arm64-16k
Found linux image: /boot/vmlinuz-7.1.8-edge-rockchip64
Found initrd image: /boot/initrd.img-7.1.8-edge-rockchip64
Found linux image: /boot/vmlinuz-7.1.8+deb14-arm64-16k
Found initrd image: /boot/initrd.img-7.1.8+deb14-arm64-16k
Found linux image: /boot/vmlinuz-6.18.44-current-rockchip64
Found initrd image: /boot/initrd.img-6.18.44-current-rockchip64
Found linux image: /boot/vmlinuz-6.1.115-vendor-rk35xx
Found initrd image: /boot/initrd.img-6.1.115-vendor-rk35xx
Adding boot menu entry for UEFI Firmware Settings ...

This boots 16k pages kernel, that is what I want on the RK3588 device, see if anything breaks. So far I know no 32-bit containers, but that was already known 'for years'.

I am using zfs so I have to lag behind a bit. Also I have uboot not EFI. I actually tried to downgrade to current last night... and it wouldn't boot. I'm running from SD so I'll stick it in my laptop tonight to see what's what. Might try EFI if I have to start again.

  • Author

Thank you for the explanations. I decided to try to get try an edge kernel from armbian-config, in 6.19. It ran into some errors upon finishing, but I did not actually see the errors (armbian-config did not show them). So I figured I try the reboot: I was not prepared for the device to be bricked. No network, no video output, no activity. Currently trying to rescue it from the original install media.

I'm also using zfs but I'm not sure if that would've caused it to fail this hard.

9 hours ago, nonconfigure said:

God bless backups - (most) things are working again. Any idea how I could move forward? Should I stick with what armbian-config recommends?

Yes, good to make sure you know how to backup and restore. But it should not be needed or all so painfull if you consider that RK3588 platforms in general can be operated like a x86_64 PC/computer. There it is standard to have a bootmanager like GRUB so you can select which kernel to use at power-on. It is even better then a PC as Rockchips SoC's work perfectly well via 1 Euro serial console cable at 1.5 Megabit/s. Even the whole U-Boot or EDK2. So no extra keyboard and HDMI monitor etc needed in cases like this. Just you laptop or even smartphone with an USB port.

 

The thing is, Armbian for this powerfull RK3588 devices uses 'single chain kernel' and also mostly 1 Ext4 partition. That is good and more or less a must to get started, especially if 300+ boards need to be supported and knowing that traditionally Arm SBC's and SoC's do not use 1 industry standard. But this will and can be changed. Newer/faster SBC's support UEFI and so same as PC, no U-Boot on bare-metal. RK3588 something in between, it still can use U-Boot boot.scr method, but also EFI (via modern and EFI configured U-Boot or EDK2 fullspec UEFI). So if you use that and an extra FAT formatted bootpartition tagged type 0xEF00 (ESP), you can use grub-efi, easy to install. Also if you use Btrfs instead of Ext4 for rootfs, you can boot from earlier known-good snapshots, so no need to take out SD-card etc or use new images or time-consuming backup-restore methods. BUT, it needs building own image with Armbian build with the certain specific arguments. Or you manually change things aftyerwards such that it is like that. I think I once posted a ./compile.sh line to get that, but is long ago.

 

The other thing is more fundamental and already mentioned/hinted by others: RK3588 is a very low-power device for its price, my NanoPi-R6C idle power is 1.3 Watt when vendor kernel and still 1Gbit ethernet connected. With mainline kernel I think it was 2.3 Watt, but I know that it is because clocking was/is? not fully optimized (was a year ago, might be now, haven't measured). So it was clear for me that I would order the SBC certainly with the nice metal case that is also cooling/heatsink, directly from FriendlyElec, no own construction/building. So even when compiling kernels and images (for itself also) which is an hour full load, CPU temp stays below 80 degrees Celcius, so still full speed. A metal case is rather expensive, 20 Euros extra or so (so half the price of a basic RaspberryPi3 SBC), but as said, RK3588 is like a PC, I do not treat it like an SBC. So normally I skip all topics that are about fans, but I find CM3588 interesting because of its multiple M.2 slots. I have an old left over heatsink from PC times that would fit on the CM part I think. But I bought a ROCK5B and also with metal case from Radxa and put its on-chip SATA port to work, so that is then NVME for OS/cache and HDD for bulk (cached) data. Again, like a PC as ROCK5B has SPI-flash for putting own firmware/bootloader and it even stores EFI boot entries, so not only multiple kernels but also multiple OSses/distros (when grub-efi and option other OS is on) selectoin at power on. So all same as PC that is dual boot Windows and Linux.

  • Author
Quote

RK3588 is a very low-power device

That is one of the main reasons why I chose it as well, and while it ran fine for many months (I did not even notice the fan is off!), there are some workloads that heat up the CPU beyond 80 degrees, so I wanted to figure this out.

I did not go this deep into customization before, I only installed the pre-compiled image and it worked well enough for what I needed so far. I plan to explore this in the future, but certainly not starting off on this machine which is the only server I got besides a less powerful NAS.

I got mine booting again. The /boot/Image link hadn't been updated. Nor the links in / but I'm not sure they are necessary anyway. I have a desktop and network but ssh won't let me in for some reason. I'll have to get a keyboard and mouse attached. On the upside the fan is working 🙂

 

While I was rummaging around I noticed I have a dtb overlay for the fan. I thought I had disabled it.

It was based on the one here but IIRC I cut it down somewhat. I can look into it more if you still have issues.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.