正点原子提供的RTL8188EUS只能用在低版本Kernel,高版本Kernel会出现编译错误,比如我用的6.6.52版本的Kernel就无法编译正点原子提供的那几个Realtek的驱动文件。
尝试从网上找能够支持新版本Kernel的RTL8188EUS的驱动,Google出来第一位是这个:
https://github.com/aircrack-ng/rtl8188eus
看了一圈,这个仓库有1k的star,并且最新支持到了6.12版本的Kernel,看上去很不错,下载下来,准备在虚拟机里交叉编译成arm版本:
1 2 3 export KDIR =~/linux/NXP_linux/linux-imx-lf-6.6.y make ARCH =arm CROSS_COMPILE =arm-linux-gnueabihf- KSRC =$KDIR
注意这里的KDIR要设置成自己的Linux Kernel源码目录,不能用默认的,否则编译出来的是x86架构,没法在板子上用。
正常状况下编译会得到8188eu.ko这个模块:
1 2 3 4 5 8188 eu.ko BUILD_FOR_NETHUNTER.md dkms-remove.sh modules.order ReleaseNotes.pdf 8188 eu.mod built-in .a hal Module.symvers 8188 eu.mod .c core include os_dep8188 eu.mod .o dkms.conf Kconfig platform8188 eu.o dkms-install.sh Makefile README.md
把模块拷贝到根目录下/lib/modules/6.6.52中,重启开发板,尝试加载模块,Kernel报错:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 [ 77.296944] 8188 eu: loading out-of-tree module taints kernel.[ 77.306670] 8188 eu: Unknown symbol __cfg80211_alloc_event_skb (err -2 )[ 77.316458] 8188 eu: Unknown symbol wiphy_register (err -2 )[ 77.325178] 8188 eu: Unknown symbol cfg80211_remain_on_channel_expired (err -2 )[ 77.335632] 8188 eu: Unknown symbol cfg80211_vendor_cmd_reply (err -2 )[ 77.345288] 8188 eu: Unknown symbol cfg80211_del_sta_sinfo (err -2 )[ 77.354656] 8188 eu: Unknown symbol wiphy_unregister (err -2 )[ 77.363749] 8188 eu: Unknown symbol cfg80211_ch_switch_notify (err -2 )[ 77.373440] 8188 eu: Unknown symbol ieee80211_get_channel_khz (err -2 )[ 77.383033] 8188 eu: Unknown symbol cfg80211_ready_on_channel (err -2 )[ 77.392592] 8188 eu: Unknown symbol wiphy_free (err -2 )[ 77.400814] 8188 eu: Unknown symbol wiphy_new_nm (err -2 )[ 77.409047] 8188 eu: Unknown symbol cfg80211_get_bss (err -2 )[ 77.417488] 8188 eu: Unknown symbol ieee80211_freq_khz_to_channel (err -2 )[ 77.427077] 8188 eu: Unknown symbol __cfg80211_send_event_skb (err -2 )[ 77.436316] 8188 eu: Unknown symbol cfg80211_disconnected (err -2 )[ 77.445217] 8188 eu: Unknown symbol cfg80211_michael_mic_failure (err -2 )[ 77.454688] 8188 eu: Unknown symbol cfg80211_ibss_joined (err -2 )[ 77.463463] 8188 eu: Unknown symbol cfg80211_scan_done (err -2 )[ 77.471772] 8188 eu: Unknown symbol cfg80211_roamed (err -2 )[ 77.479798] 8188 eu: Unknown symbol cfg80211_put_bss (err -2 )[ 77.487786] 8188 eu: Unknown symbol cfg80211_connect_done (err -2 )[ 77.496214] 8188 eu: Unknown symbol cfg80211_unlink_bss (err -2 )[ 77.504461] 8188 eu: Unknown symbol cfg80211_inform_bss_frame_data (err -2 )[ 77.513599] 8188 eu: Unknown symbol cfg80211_new_sta (err -2 )[ 77.521513] 8188 eu: Unknown symbol __cfg80211_alloc_reply_skb (err -2 )[ 77.530336] 8188 eu: Unknown symbol cfg80211_rx_mgmt_ext (err -2 )[ 77.538526] 8188 eu: Unknown symbol wiphy_apply_custom_regulatory (err -2 )[ 77.547557] 8188 eu: Unknown symbol cfg80211_mgmt_tx_status_ext (err -2 )[ 77.656978] 8188 eu: Unknown symbol __cfg80211_alloc_event_skb (err -2 )[ 77.665898] 8188 eu: Unknown symbol wiphy_register (err -2 )[ 77.673436] 8188 eu: Unknown symbol cfg80211_remain_on_channel_expired (err -2 )[ 77.682597] 8188 eu: Unknown symbol cfg80211_vendor_cmd_reply (err -2 )[ 77.691051] 8188 eu: Unknown symbol cfg80211_del_sta_sinfo (err -2 )[ 77.699152] 8188 eu: Unknown symbol wiphy_unregister (err -2 )[ 77.706787] 8188 eu: Unknown symbol cfg80211_ch_switch_notify (err -2 )[ 77.715234] 8188 eu: Unknown symbol ieee80211_get_channel_khz (err -2 )[ 77.723608] 8188 eu: Unknown symbol cfg80211_ready_on_channel (err -2 )[ 77.732000] 8188 eu: Unknown symbol wiphy_free (err -2 )[ 77.739088] 8188 eu: Unknown symbol wiphy_new_nm (err -2 )[ 77.746251] 8188 eu: Unknown symbol cfg80211_get_bss (err -2 )[ 77.753799] 8188 eu: Unknown symbol ieee80211_freq_khz_to_channel (err -2 )[ 77.762421] 8188 eu: Unknown symbol __cfg80211_send_event_skb (err -2 )[ 77.770861] 8188 eu: Unknown symbol cfg80211_disconnected (err -2 )[ 77.778911] 8188 eu: Unknown symbol cfg80211_michael_mic_failure (err -2 )[ 77.787562] 8188 eu: Unknown symbol cfg80211_ibss_joined (err -2 )[ 77.795674] 8188 eu: Unknown symbol cfg80211_scan_done (err -2 )[ 77.803474] 8188 eu: Unknown symbol cfg80211_roamed (err -2 )[ 77.810850] 8188 eu: Unknown symbol cfg80211_put_bss (err -2 )[ 77.818533] 8188 eu: Unknown symbol cfg80211_connect_done (err -2 )[ 77.826583] 8188 eu: Unknown symbol cfg80211_unlink_bss (err -2 )[ 77.834431] 8188 eu: Unknown symbol cfg80211_inform_bss_frame_data (err -2 )[ 77.843325] 8188 eu: Unknown symbol cfg80211_new_sta (err -2 )[ 77.850940] 8188 eu: Unknown symbol __cfg80211_alloc_reply_skb (err -2 )[ 77.859411] 8188 eu: Unknown symbol cfg80211_rx_mgmt_ext (err -2 )[ 77.867403] 8188 eu: Unknown symbol wiphy_apply_custom_regulatory (err -2 )[ 77.876210] 8188 eu: Unknown symbol cfg80211_mgmt_tx_status_ext (err -2 ) modprobe: can't load module 8188eu.ko (8188eu.ko): unknown symbol in module, or unknown parameter
这一看就是CFG80211编译报错了,跑了一下dmesg | grep cfg80211
发现CFG80211根本没有加载,但是我之前明明配置好了开机自动加载的,不知道哪里把配置弄丢了,于是手动depmod cfg80211
,然后再depmod 8188eu.ko
:
1 2 3 4 5 6 7 8 /lib/modules/6.6 .52 # modprobe cfg80211.ko [ 18.046491] cfg80211: Loading compiled-in X.509 certificates for regulatory database[ 18.123855] Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7' [ 18.138554] Loaded X.509 cert 'wens: 61c038651aabdcf94bd0ac7ff06c7248db18c600' /lib/modules/6.6 .52 # modprobe 8188 eu.ko [ 25.931742] 8188 eu: loading out -of-tree module taints kernel.[ 25.959171] bFWReady == _FALSE call reset 8051. ..[ 26.008887] usbcore: registered new interface driver 8188eu
再ifconfig -a
,可以看到WLAN0信息,驱动工作成功。
关于cfg80211,之前为了避免出现cfg80211: failed to load regulatory.db的报错信息,参考文章1 和文章2 将CFG80211配置成了模块加载形式,也就是CONFIG_CFG80211=m
,不随Kernel启动。但是Kernel编译时会正常编译cfg80211.ko,位于./net/wireless/cfg80211.ko
,将它拷贝到/lib/modules/6.6.52
里手动modprobe就可以。