(Update 10/15/2016: There is now an updated version of the driver package available on Github. Some of the changes described in the following post are no longer necessary)
I’ve been running a Shuttle mini PC for the past few years as a low-power Linux server / NAS. All was peachy, until I started noticing that the upload speed over the network kept dropping while uploading large files recently. My initial thought was that this had something to do with my router, but the problem persisted after replacing it.
It finally dawned on me that this was an issue on the server when I noticed that I was also no longer to use wake-on-lan to power on the server, which had worked in the past. Spoiler alert: upgrading Ubuntu to the latest LTS release (12.04) apparently deployed a new network driver which isn’t quite working with the on-board ethernet controller.
Checking the network device showed me the kernel module (sky2) which was causing the problems:
> lspci -k | grep -A5 Ethernet 02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 12) Subsystem: Holco Enterprise Co, Ltd/Shuttle Computer Device 3140 Kernel driver in use: sky2 Kernel modules: sky2
A quick google search revealed that there was a proprietary driver for the Marvell chip. It is available from here. Select “Linux 2.6 – Fedora” as the plaform, and download the Kernel 2.6.x Linux Driver package.
After downloading the package, unpack the archive and change the install script to use bash. For some reason, the installer wouldn’t run using the original /bin/sh. Finally start the installer:
> tar xjf install_v10.93.3.3.tar.bz2 > cd DriverInstall/ > sed '1s/.*/#!\/bin\/bash/' install.sh > install.sh > ./install.sh
The installer found the existing driver and gave me the option to remove it, however that did not work for me. After the install is done, it is thus necessary to blacklist the old driver so it won’t get loaded again:
> echo 'blacklist sky2' > /etc/modprobe.d/blacklist-sky2.conf' > update-initramfs -k all -u update-initramfs: Generating /boot/initrd.img-3.2.0-40-generic
Upon rebooting, I checked the network adapter again:
> lspci -k | grep -A5 Ethernet 02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E Gigabit Ethernet Controller (rev 12) Subsystem: Holco Enterprise Co, Ltd/Shuttle Computer Device 3140 Kernel driver in use: sk98lin Kernel modules: sk98lin, sky2
Finally, I enabled wake-on-lan using ethtool:
> ethtool -s eth0 wol g > ethtool eth0 | grep Wake-on Supports Wake-on: pg Wake-on: g