A gemini-based NAS from Raidsonic.
Installing OpenWrt Snapshot
Obviously to do this at your own risk but given how old this NAS is and how many security bugs and performance bottlenecks the old kernel has, what choice do you really have...
What you want for a NAS is not a default OpenWrt build. What differs from upstream OpenWrt is the following:
- LuCI is installed (OK this is usually default with OpenWrt images...)
- ksmbd is installed, as well as ksmbd-luci for file sharing
- hdparm is installed to set up spindown of the drive
Here are my tested images per 2026-01-25, built from a snapshot upstream OpenWrt base:
- openwrt-gemini-generic-raidsonic_ib-4220-b-squashfs-factory.bin - this can be used to update the factory firmware to OpenWrt, as is custom. In practice this is a tailored .tar.gz file which will be expanded and three different parts flashed to the "Kern", "Ramdisk" and "Application" partitions.
- openwrt-gemini-generic-raidsonic_ib-4220-b-squashfs-sysupgrade.bin -
this works mostly, but BE CAREFUL ABOUT THE FOLLOWING:
- Your flash must not be corrupted: if during boot you see something like this:
[ 7.271017] 0x000000320000-0x0000003dc987 : "Ramdisk" [ 7.301435] mtd: partition "Ramdisk" doesn't end on an erase/write block -- force read-only
Then the "Ramdisk" partition of your flash is write protected and you cannot use sysupgrade. You need to use the UART method with the flashfiles (below) instead to fix up the flash. - for older OpenWrt versions you probably need to download and install a modified /lib/update/platform.sh for the sysupgrade to commence. This can be found here.
- Your flash must not be corrupted: if during boot you see something like this:
- openwrt-gemini-generic-raidsonic_ib-4220-b-squashfs-flashfiles.tar - this can
be used to flash the device from the RedBoot menu if you have UART access (see below). This overwrites the OS firmware
completely and fixes up the flash if it is corruped, as long as you have RedBoot and a working FIS. This always works
if you do it the right way.
From the RedBoot menu:- Do NOT UNDER ANY CIRCUMSTANCE try to use the "upgrade firmare" (Z) alternative! This will destroy your RedBoot if the first 128KB of that image does not contain a RedBoot image... This is not the same as using a factory firmware image or even the official firmware images! It's just a very dangerous option. (I learned this the hard way.)
- Extract the three files zImage, rd.gz and hddapp.tgz from the archive.
- Put these three files in the root directory of your TFTP server (usually /var/lib/tftpboot)
- Hit 6 and set up the IP address for your device (e.g. 169.254.1.2 if you're using local link).
- Hit Y to "Upgrade Kernel", enter TFTP and your hosts IP number and type zImage. The kernel should upload and flash.
- Hit R to "Upgrade Ramdisk", enter TFTP and your hosts IP number and type rd.gz. The "ramdisk" (i.e. the second part of the kernel) should upload and flash.
- Hit A to "Upgrade Application", enter TFTP and your hosts IP number and type hddapp.tgz. The "application" (i.e. the root filesystem) should upload and flash.
- On subsequent upgrades just using sysupgrade should be fine.
Set up OpenWrt after install
OpenWrt is designed for routers, not NAS devices. This means it needs a bit of reconfiguration after installation. The following is just a suggestion, but this probably works for you too!
Plug it into some ethernet port on your LAN that will provide DHCP for devices, and it should happily connect to that network and come up. You need to figure out the IP address but usually you can check what devices have appeared on your network in your main DHCP server/router. It will take some time before the network comes up on the device, a minute or two.
You can ssh root@<IP_NUMBER> or surf to the LuCI interface using http://<IP_NUMBER>
The default user and password in LuCI is simply root and root. (You should change this.)
Disable unused services
Do the following from the command line as root to disable unnecessary services (an alternative is of course to build the image without these components by removing them during menuconfig):
- Disable dnsmasq (useless, we are not a router):
service dnsmasq disable service dnsmasq stop - Disable odhcpd (useless, we are not a router):
service odhcpd disable service odhcpd stop - Disable firewall (useless if you are behind a firewall such as your home router,
and probably just causing problems):
service firewall disable service firewall stop - Edit /etc/config/system to reflect your timezone, or all timestamps will be in UTC. For example I set:
option timezone 'CET-1CEST,M3.5.0,M10.5.0/3' - Type poweroff to shut down the NAS.
UART Access
The device comes with a pin header on the board where you can simply connect the UART pins.
Numbered facing the board from the front of the device (powerbutton) toward the rear (fan):
9 7 5 3 1 +---------------------------+ | o o o o o | | | | o o o o o | +---------------------------+ 10 8 6 4 2 2 = RXD 3 = TXD 5 = GND 10 = 3V3
See the picture for pin layout.
I have noticed that connecting the PWR pin to the UART converter is not optional input (TX) to the device will not work or the device will not even power on unless you connect the power.
The device uses 19200N8 serial settings.
Flash View
Instead the boot loader and the kernel have different views of the flash. Essentially RedBoot sees this:
0x000000000000-0x000000020000 : "BOOT" 0x000000020000-0x000000320000 : "Kern" 0x000000320000-0x000000920000 : "Ramdisk" 0x000000920000-0x0000009a0000 : "Application" 0x000000f20000-0x000000f40000 : "VCTL" 0x000000f40000-0x000000fe0000 : "CurConf" 0x000000fe0000-0x000001000000 : "FIS directory"
Whereas the Linux kernel sees this:
0x000000000000-0x000000020000 : "BOOT" 0x000000020000-0x000000f20000 : "firmware" 0x000000f20000-0x000000f40000 : "VCTL" 0x000000f40000-0x000000fe0000 : "CurConf" 0x000000fe0000-0x000001000000 : "FIS directory"
This is done so that the available flash blocks can be used optimally: the kernel sees the space used by the three RedBoot partions "Kern", "Ramdisk" and "Application" as one chunk called "firmware".
Inside "firmware", the kernel, the initramfs (not initrd) and the root file system are catenated and then split by the kernel to find the read-only and read/writeable part of the rootfs at runtime.
When performing firmware upgrades, all of the "firmware" partition is replaced.
When the system boots, it has the RedBoot view of the flash memory but that is OK: we load "Kern" and "Ramdisk" into the memory and execute it, which is fine since we put the kernel first in the firmware partition, which corresponds to "Kern" and "Ramdisk".
Device Info
Bootlog with no harddrive attached
Kernel TODO
- TBD
OpenWrt TODO
- Fix installation procedure and flash layout.
- Create a ugly kernel module to handle the SSP PWM fan. This just cannot be upstreamed.

