Building a kernel module for the awus1900 Wifi stick and the Gemini PDA
A few days ago I have been asked if it is possible to build a driver for the awus1900 Wifi stick for the Gemini PDA. To be honest, I did not know, so I gave it a try.
The awus1900 uses Realtek’s rtl8814au chipset. The Linux driver for this chipset is available at many locations around the net. Most ones, I have tried, have not been compilable against the Gemini’s kernel. The driver at https://github.com/aircrack-ng/rtl8812au has been compilable with some minor modifications against the kernel source used for the kernel in Modular Linux kernel for the Gemini PDA with lid close fix.
First of all some parameters in the Makefile had to be changed to match the Gemini:
- CONFIG_PLATFORM_I386_PC = n (disable x86 build)
- CONFIG_PLATFORM_ARM64_RPI = y (enable arm64 build)
Some more parameters have been enabled for features in the hope that these do not cause problems:
- CONFIG_POWER_SAVING = y
- CONFIG_USB_AUTOSUSPEND = y
- CONFIG_80211W = y
With all these changes the build fails complaining about STATION_INFO_SIGNAL and many more being undeclared. The module’s source expects these defines to be present in the kernel source for kernels below version 4.0. Most probably the Gemini kernel tree is different than other 3.x trees. So the line 23
#if (CFG80211_API_LEVEL >= KERNEL_VERSION(4, 0, 0))
in os_dep/linux/ioctl_cfg80211.c has been replaced with
#ifndef STATION_INFO_SIGNAL
to get the module source build against the Gemini’s kernel. Afterwards it has been possible to cross compile the kernel module by running make:
make ARCH=arm64 KSRC=/path_to_lib_modules_dir/3.18.41+/build
After building the module it can be copied to /lib/modules/3.18.41+/extra/ (or any other proper directory) on the Gemini and used afterwards. For those who do not want to build the module themselves, the binary modules for the kernel shared in the article Modular Linux kernel for the Gemini PDA with lid close fix can be downloaded from here: rtl88XX.zip (3224 downloads )
Regards
Jürgen