Provide Linux hwmon support for the ARCTIC Fan Controller (ACFAN00351A) on Unraid systems whose kernel does not yet include the upstream driver.
This project packages the pinned upstream Linux arctic_fan_controller driver with documented repository patches as an external kernel module, automatically builds it for supported Unraid kernel releases, publishes versioned GitHub Releases, and provides an Unraid plugin that automatically downloads, verifies, caches, and loads the correct module for your system.
In the Unraid web interface, navigate to:
Plugins
→ Install Plugin
Paste the following URL into the Install Plugin field:
https://github.com/cnrd/arctic-fan-controller-unraid/raw/refs/heads/main/arctic-fan-controller.plg
Then click Install.
The plugin automatically:
- Detects the exact running kernel using
uname -r - Checks whether Unraid already provides a native
arctic_fan_controller - Downloads the matching external module if required
- Verifies:
- SHA256 checksum
- Build manifest
- Module metadata
- Vermagic
- HID alias
- Caches the verified module on the flash drive
- Loads the module
No manual compilation is required.
If no matching module has been published for the running kernel, the plugin safely leaves the driver unloaded.
Nothing special is required.
After every reboot the plugin automatically:
- Detects the current kernel.
- Prefers the native kernel driver if available.
- Otherwise looks for a cached module matching the exact kernel.
- Downloads and verifies the matching release if necessary.
- Loads the verified module.
A valid cached module remains pinned for that exact kernel. Replacing assets in an existing GitHub release does not update or reload modules on installed systems automatically.
The plugin never:
- loads a module built for another kernel
- ignores vermagic
- skips checksum verification
- force-loads an incompatible module
This project provides:
- the pinned upstream Linux kernel driver with documented build-time patches
- automated per-kernel builds
- GitHub Releases
- automatic Unraid integration
- standard Linux
hwmonsupport
This project does not provide:
- fan curves
- HDD temperature control
- CPU temperature control
- automatic PWM policies
- a replacement for IPMI fan control
- a userspace fan controller
It only provides the kernel driver.
Any userspace software can then use the standard Linux hwmon interface exposed by the driver.
The plugin and physical controller have been tested on Unraid 7.3.2
(6.18.38-Unraid). Validation covered exact release download, integrity checks,
cache installation, module load and unload, USB HID binding, hwmon creation,
RPM input, initial PWM state reporting, and PWM writes at 40% and 100%.
CI compile-checks every published kernel-specific module. Release manifests report compile-only verification because hardware testing is not repeated for every build artifact.
Current target:
- ARCTIC Fan Controller
- Model: ACFAN00351A
The driver exposes the controller through the standard Linux hwmon subsystem.
Exposed interface:
fan1_input ... fan10_input
pwm1 ... pwm10
HID alias:
hid:b0003g*v00003904p0000F001
Linux upstream
│
▼
driver/arctic_fan_controller.c
│
Repository patches
│
▼
GitHub Actions CI
│
▼
Kernel-specific GitHub Releases
│
▼
Unraid Plugin
│
▼
Exact verified kernel module
│
▼
Linux hwmon subsystem
The project intentionally separates:
- upstream driver
- repository patches applied in the build staging directory
- build system
- release pipeline
- Unraid integration
.
├── driver/
│ ├── arctic_fan_controller.c
│ ├── compat.h
│ └── Makefile
│
├── plugin/
│ ├── plugin files
│ └── loader scripts
│
├── patches/
│ └── local driver patches
│
├── scripts/
│ ├── fetch-kernel.sh
│ ├── prepare-kernel.sh
│ ├── build-module.sh
│ └── verify-module.sh
│
├── .github/
│ └── workflows/
│
├── arctic-fan-controller.plg
│
└── README.md
GitHub Actions automatically builds the module for supported Unraid kernels.
For every build the workflow:
- Determines the target kernel.
- Downloads the matching prepared kernel build tree.
- Verifies kernel source integrity.
- Applies repository driver patches in an isolated staging directory.
- Builds the external module.
- Verifies:
- module metadata
- architecture
- vermagic
- USB alias
- Generates build metadata, including applied patch paths and SHA256 hashes.
- Publishes a GitHub Release.
Releases are keyed by the exact kernel release:
kernel-6.18.38-Unraid
Each release contains:
arctic_fan_controller.koarctic_fan_controller.ko.sha256build-manifest.jsonarctic-fan-controller-<kernel>.zip
The ZIP additionally contains build logs, verification outputs,
applied-patches.json, and the applied patch files.
Each release includes a machine-readable manifest describing:
- project commit
- GitHub Actions run
- build runner
- target kernel
- kernel source
- kernel source verification
- upstream driver commit
- applied driver patches and their SHA256 hashes
- module name
- module SHA256
- compile-time and runtime verification status
Vermagic, architecture, aliases, undefined symbols, and other compile-time checks are included as separate verification outputs in the release ZIP. This allows every published module to be traced back to the exact source and build inputs.
The plugin follows this boot sequence:
Boot
│
▼
Native driver available?
│
├── Yes
│ ▼
│ modprobe
│ ▼
│ Done
│
└── No
▼
Cached module exists?
│
├── Yes
│
│ Verify
│
▼
Load module
│
└── No
▼
Download matching release
│
▼
Verify
• SHA256
• Manifest
• Vermagic
• Module metadata
│
▼
Cache to flash
│
▼
Load module
The plugin always matches the exact kernel reported by:
uname -r
It never falls back to another kernel version.
This repository exists only until Unraid ships the upstream Linux driver.
When that happens the plugin will simply detect the native module and use it instead of downloading an external one.
No migration should be required.
Pinned upstream driver:
Repository:
https://github.com/torvalds/linux
Source:
drivers/hwmon/arctic_fan_controller.c
Pinned commit:
e28d0c73d4d7adc9cd3747d81fdc7338217f9a0c
The goal of this project is to keep the driver source identical to upstream whenever possible.
- Broader community testing
- Retire external module releases after supported Unraid kernels include the driver natively
The kernel driver remains subject to the upstream Linux kernel licensing (GPL).
Project-specific scripts, build automation and plugin infrastructure are licensed separately as defined by this repository.