Linux平臺 RTL81xx系列無線網卡驅動移植
平臺配置
- PC系統:Ubuntu18.04
- 移植目標平臺:NUC980
- 內核版本:Linux4.4
- 驅動版本:本文使用RTL8188EUS網卡驅動,接口爲USB類型
驅動源碼參考:https://download.csdn.net/download/qq_29729577/11986400
內核基本配置
我們編譯所使用的defconfig文件中,需要打開Network與Wireless相關配置,或者直接在make menuconfig的菜單中直接配置,這裏不做詳細說明
需要注意的是,驅動與上次應用的通信接口分兩種:WEXT與NL80211,在使用wpa_supplicant時需要決定用哪種方式與內核通信,這裏我們將其全部打開,爲了保險起見,我打開了如下配置:
CONFIG_WIRELESS_EXT=y
CONFIG_WEXT_CORE=y
CONFIG_WEXT_PROC=y
CONFIG_WEXT_SPY=y
CONFIG_WEXT_PRIV=y
CONFIG_CFG80211=y
CONFIG_CFG80211_WEXT=y
CONFIG_RFKILL=y
RTL8188EUS驅動移植
- 源碼解壓到內核指定目錄並重命名爲rtl8188eu:
對於移植的驅動可以都放在 drivers/staging/這個暫存目錄
我的源碼中該目錄下已經存在rtl8188,因此我解壓到的目錄爲drivers/net/wireless/ - 修改Kconfig和MakeFile:
drivers/net/wireless/Kconfig中添加:
drivers/net/wireless/Makefile中添加:source "drivers/net/wireless/rtl8188eu/Kconfig"
同時在我們編譯所用到的defconfig中添加:obj-$(CONFIG_RTL8188EU) += rtl8188eu/
CONFIG_RTL8188EU=m
- 修改源碼目錄內容:
進入源碼目錄,確認Kconfig如下:
修改Makefile:config RTL8188EU tristate "Realtek 8188E USB WiFi" depends on USB ---help--- Help message of RTL8188EU
根據添加的平臺CONFIG_PLATFORM_NUC980 做進一步配置:CONFIG_PLATFORM_I386_PC = n // 刪除默認配置 CONFIG_PLATFORM_NUC980 = y // 添加我們的配置
ifeq ($(CONFIG_PLATFORM_NUC980), y) EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE // 同時支持AP+STA模式(會產生2個網卡接口wlan0和wlan1) ARCH := arm CROSS_COMPILE := /usr/local/arm_linux_4.8/bin/arm-linux- // 交叉編譯工具路徑 KVER := 4.4 KSRC ?= ../../../../../linux-4.4.y/ // 源碼根目錄 MODULE_NAME := 8188eus // 編譯出的模塊名稱 endif
至此,可以進行make編譯操作
模塊加載
我們編譯後會在drivers/net/wireless/rtl8188eu/目錄下生成8188eus.ko模塊
將其放置目標板中使用insmod命令加載即可
若模塊加載成功,使用ifconfig -a指令可以看到網卡信息,形如:
wlan0 Link encap:Ethernet HWaddr 34:20:03:02:0D:98
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan1 Link encap:Ethernet HWaddr 36:20:03:02:0D:98
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Wifi網絡的連接
請參考後續的文章,關於wpa_supplicant與hostapd的移植和使用