The rtlwifi(for Wifi chips such as those based on Realtek’s 8192cu) is the upstream driver and rtl8192cu is the out-of-stream driver, and the rtlwifi driver seems to be rather unstable on the Raspberry PI (It works fine on x86 machines), so it doesn’t generally get included in most distributions, in the commit 6d4d3a978afbc332af02e548bd0e8ced16dff296 non-mainline source for rtl8192cu wireless driver
is added and rtlwifi is disabled for stabilization. The result is you can not use monitor mode any more.
$ sudo iwconfig wlan0 mode monitor
Error for wireless request "Set Mode" (8B06) :
SET failed on device wlan0 ; Invalid argument.
The only way to solve it is to build your own kernel… (T▽T)
Follow the raspberry manual to build kernel, notice you should change some files before compiling.
Enable the rtlwifi
Uncomment this line in drivers/net/wireless/Makefile
#obj-$(CONFIG_RTLWIFI) += rtlwifi/
Also uncomment this line in drivers/net/wireless/Kconfig
#source “drivers/net/wireless/rtlwifi/Kconfig”
Fixing the regulatory domain (CRDA)
The rtlwifi driver ignores the regulatory set by the CRDA service. Cause of that the card will only have channels 1 to 11 and runs at maximum 20 dBm. This is the world standard of CRDA.
The easiest way is to modified the world standard definition in the driver.
Changing this line
#define RTL819x_2GHZ_CH01_11 \
REG_RULE(2412-10, 2462+10, 40, 0, 20, 0)
To
#define RTL819x_2GHZ_CH01_11 \
REG_RULE(2412-10, 2484+10, 40, 0, 33, 0)
The REG_RULE function is defined as follow:
REG_RULE(min_freq, max_freq, kHz, max_dbm_with_antenna, max_dbm, flags)
So the value I changed will make them to use all 14 channels available worldwide and to use a maximum dBm of 33 (what is about 2000 mW). Of course you can change it to any value reasonable.
Then you can compile the kernel, after that, you have to add the 8192cu to blacklist avoiding the supplied driver. modify or add /etc/modprobe.d/8192cu.conf
blacklist 8192cu
Ok, that’s all I fixed.
I do not find any wrong using the old rtlwifi driver so far, but if you wanna recover to the original driver, just comment the blacklist in the 8192cu.conf.