XikeStor SKS8310-8X, 8-port 1G/10G SFP+ managed switch
I saw this switch on the OpenWrt TOH page and noticed it was available on the web. I was amazed about the price, one can easily get it below 100 Euro, that's less than 10 Euro per 10G SPF+ Port! So I had to buy one to check it out.
If you wonder about the difference between the 8310-8X and the 8300-8X model (like I did, as both exist):
- the 8300 seems to be the older model with passive cooling and no rack mount option (console port on the left)
- the 8310 includes a fan and a rackmount set (console port on the right)
I think a fan is a wise decision for this switch, especially if one opts for a full load of BaseT modules. There are some issues reported on the 8300 model here and I hope they are improved with the 8310. Up to now everything looks ok. Beware, there are also the -8T models, those already have 8 fixed Ethernet BaseT (RJ45) ports. Sometimes they are just referred as the “SKS8300” model, which is not the “full truth”, so to say (the “8T” at the end is relevant).
Information about initial setup of OpenWrt is available in the OpenWrt GIT log. I had to modify this steps a little, as explained below.
Unfortunately, my cheap 1000BaseT SFP module I own just for such configuration purposes, didn't work with the switch in the U-Boot CLI. I was aware that this can happen, though. I didn't want to play around with switches and DAC cables or so to get somehow an ethernet connection. And of course, I didn't want to connect it into my “life” LAN at home “as is”, before setting it up properly.
Thus, I had to use a kermit download for the file “openwrt-realtek-rtl930x-xikestor_sks8310-8x-initramfs-kernel.bin”, which I got from the OpenWrt firmware selector page (only available in the latest snapshots).
I used TeraTerm for that purpose, as it supports this classic form of data transfers over serial lines. It took a while, but it worked out quite nicely:
RTL9300# # loadb 0x82000000 ## Ready for binary (kermit) download to 0x82000000 at 115200 bps... ## Total Size = 0x004ed640 = 5166656 Bytes ## Start Addr = 0x82000000 RTL9300# # bootm 0x82000000 ## Booting kernel from Legacy Image at 82000000 ... Image Name: MIPS OpenWrt Linux-6.12.60 Created: 2025-12-12 12:59:39 UTC Image Type: MIPS Linux Kernel Image (lzma compressed) Data Size: 5166592 Bytes = 4.9 MB Load Address: 80100000 Entry Point: 80100000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Starting kernel ... [ 0.000000] Linux version 6.12.60 (builder@buildhost) (mips-openwrt-linux-musl-gcc (OpenWrt GCC 14.3.0 r32306-b15628ec80) 14.3.0, GNU ld (GNU Binutils) 2.44) #0 SMP Fri Dec 12 12:59:39 2025 [ 0.000000] SoC Type: Realtek RTL9303 rev B (6487) [ 0.000000] printk: legacy bootconsole [early0] enabled [ 0.000000] CPU0 revision is: 00019555 (MIPS 34Kc) [ 0.000000] MIPS: machine is XikeStor SKS8310-8X
Perfect, also my cheap SFP module was activated properly! Therefore, I could do a backup of the flash and store it on my PC (raw files and in a gzipped tar, to be on the safe side), using a direct ethernet link. The PC interface is set to a static IP 192.168.1.3, while the OpenWrt default IP is 192.168.1.1. I also enabled the OpenSSH server on my PC, so I could use “scp” on the switch.
I consider this backup a very important step, as the firmware of my device was newer than the download on their product support website:
root@OpenWrt:~# cd /tmp root@OpenWrt:~# cat /proc/mtd > mtd.txt root@OpenWrt:/tmp# dd if=/dev/mtd0 of=/tmp/copy_dd_mtd0.bin 3584+0 records in 3584+0 records out root@OpenWrt:/tmp# dd if=/dev/mtd1 of=/tmp/copy_dd_mtd1.bin 128+0 records in 128+0 records out root@OpenWrt:/tmp# dd if=/dev/mtd2 of=/tmp/copy_dd_mtd2.bin 128+0 records in 128+0 records out root@OpenWrt:/tmp# dd if=/dev/mtd3 of=/tmp/copy_dd_mtd3.bin 128+0 records in 128+0 records out root@OpenWrt:/tmp# dd if=/dev/mtd4 of=/tmp/copy_dd_mtd4.bin 128+0 records in 128+0 records out root@OpenWrt:/tmp# dd if=/dev/mtd5 of=/tmp/copy_dd_mtd5.bin 20480+0 records in 20480+0 records out root@OpenWrt:/tmp# dd if=/dev/mtd6 of=/tmp/copy_dd_mtd6.bin 40960+0 records in 40960+0 records out root@OpenWrt:/tmp# ls -la *mtd* drwxrwxrwt 11 root root 460 Jan 1 00:28 . drwxrwxrwt 16 root root 380 Jan 1 00:00 .. -rw-r--r-- 1 root root 1835008 Jan 1 00:27 copy_dd_mtd0.bin -rw-r--r-- 1 root root 65536 Jan 1 00:27 copy_dd_mtd1.bin -rw-r--r-- 1 root root 65536 Jan 1 00:27 copy_dd_mtd2.bin -rw-r--r-- 1 root root 65536 Jan 1 00:27 copy_dd_mtd3.bin -rw-r--r-- 1 root root 65536 Jan 1 00:27 copy_dd_mtd4.bin -rw-r--r-- 1 root root 10485760 Jan 1 00:28 copy_dd_mtd5.bin -rw-r--r-- 1 root root 20971520 Jan 1 00:28 copy_dd_mtd6.bin -rw-r--r-- 1 root root 281 Jan 1 00:21 mtd.txt root@OpenWrt:/tmp# scp /tmp/copy* me@192.168.1.3:/ me@192.168.1.3's password: copy_dd_mtd0.bin 100% 1792KB 1.8MB/s 00:01 copy_dd_mtd1.bin 100% 64KB 64.0KB/s 00:00 copy_dd_mtd2.bin 100% 64KB 64.0KB/s 00:00 copy_dd_mtd3.bin 100% 64KB 64.0KB/s 00:00 copy_dd_mtd4.bin 100% 64KB 64.0KB/s 00:00 copy_dd_mtd5.bin 100% 10MB 5.0MB/s 00:02 copy_dd_mtd6.bin 100% 20MB 5.0MB/s 00:04 root@OpenWrt:/tmp# tar cfz mtd.tgz *.bin root@OpenWrt:/tmp# scp /tmp/*tgz me@192.168.1.3:/ me@192.168.1.3's password: mtd.tgz 100% 37MB 6.1MB/s 00:06
Then I flashed the OpenWrt sysupgrade image (after a checksum verification, of course). I made an customised version including luci on the firmware selector page as mentioned above (snapshot versions normally do not include it; I have to confess that I got lazy and like the web GUI very much ).
root@OpenWrt:/tmp# scp user@192.168.1.3:/openwrt-sysupgrade_luci.bin . user@192.168.1.3's password: openwrt-sysupgrade_luci.bin 100% 5888KB 5.8MB/s 00:01 root@OpenWrt:/tmp# sha256sum openwrt-sysupgrade_luci.bin 908d39741a8b31aa31439bf7f79e156a8abaede7c39a30b4983bc789c6bc207b openwrt-sysupgrade_luci.bin root@OpenWrt:/tmp# sysupgrade /tmp/openwrt-sysupgrade_luci.bin Cannot save config while running from ramdisk. Thu Jan 1 00:47:51 GMT 1970 upgrade: Commencing upgrade. Closing all shell sessions. Hangup -ash: can't set tty process group: Not a tty [1]+ Hangup sysupgrade /tmp/openwrt-sysupgrade_luci.bin Watchdog handover: fd=3 - watchdog - Watchdog does not have CARDRESET support Thu Jan 1 00:47:52 GMT 1970 upgrade: Sending TERM to remaining processes ... Thu Jan 1 00:47:56 GMT 1970 upgrade: Sending KILL to remaining processes ... [ 2882.865940] stage2 (2255): drop_caches: 3 Thu Jan 1 00:48:02 GMT 1970 upgrade: Switching to ramdisk... Thu Jan 1 00:48:05 UTC 1970 upgrade: Performing system upgrade... [ 2886.068209] do_stage2 (2255): drop_caches: 3 Unlocking firmware ... Writing from <stdin> to firmware ... Appending jffs2 data from /tmp/sysupgrade.tgz to firmware.. .File /tmp/sysupgrade.tgz does not exist Thu Jan 1 00:48:37 UTC 1970 upgrade: Upgrade completed Thu Jan 1 00:48:38 UTC 1970 upgrade: Rebooting system... umount: can't unmount /dev: Resource busy umount: can't unmount /tmp: Resource busy [ 2918.207355] reboot: Restarting system
I connected to 192.168.1.1 using my Webbrowser on the PC and continued configuration of my switch in OpenWrt! Of course the very first thing to do is to set a proper password, before connecting it to the “wild wide web”…
