WG217 wifi模块RTL8811CU的移植(linux)

一、驱动源码的获取

WG217 wifi模块的芯片是RTL8811CU,在不开启蓝牙功能支持的情况下,RTL8811CU的驱动源码与RTL8821CU的驱动源码是兼容的,也就是说在不开启蓝牙支持的情况下,用RTL8821CU驱动也能使得RTL8811CU正常工作。

RTL8811CU驱动源码的链接:https://github.com/axiomware/RTL8821CU_driver_v5.4.1


二、修改Makefile,并编译出ko

下载完源码之后,找到并修改Makefile,修改如下:

CONFIG_PLATFORM_HI3531A = y				//添加相关平台的宏,这里添加海思平台的hi3531a,并设置为y
CONFIG_PLATFORM_I386_PC = n				//修改CONFIG_PLATFORM_I386_PC为n
...

在原来的 ifeq ($(CONFIG_PLATFORM_I386_PC), y) 前插入以下代码:

ifeq ($(CONFIG_PLATFORM_HI3531A), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ARCH = arm
CROSS_COMPILE = /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-
KSRC := /disk2/SVN/mywork/work/HisiSDK/Hi3531A_SDK_V1.0.5.0/osdrv/opensource/kernel/linux-3.10.y
MODDESTDIR := /disk2/SVN/mywork/work/HisiSDK/Hi3531A_SDK_V1.0.5.0/osdrv/opensource/kernel/linux-3.10.y/drivers/net/wireless/
INSTALL_PREFIX :=
STAGINGMODDIR := /disk2/SVN/mywork/work/HisiSDK/Hi3531A_SDK_V1.0.5.0/osdrv/opensource/kernel/linux-3.10.y/drivers/staging
endif

CROSS_COMPILE为编译链的路径,KSRC为内核源码路径,剩下的MODDESTDIRSTAGINGMODDIR路径随便设置。
在terminal终端输入make命令实现编译,生成ko文件。

三、RTL8821CU驱动所需的支持

1)cfg80211(cfg80211是Linux 802.11配置API, 用于对无线设备进行配置管理)
2)master模式(配置wifi的AP热点模式时需要改模式的支持)

生成了相关的ko文件后,并不代表insmod就一定成功了,因为RTL8821CU驱动需要cfg80211的支持,另外在后面设置wifi的AP热点模式下的名字时,kernel必须要支持master模式,否则热点模式无法设置成功,手机无法搜索到相应的热点。如果你原本的kernel中已经将cfg80211以及master的支持编译进了内核,则可以直接insmod了,又或者去图形界面把相关的驱动编译成ko,在开发板上加载了cfg80211.ko等驱动后再加载8821cu.ko才可以成功。

四、编译kernel内核

在terminal终端输入make menuconfig进入图形界面,配置相应的选项:

1. cfg80211的选项所在位置

Symbol: CFG80211 [=y] │
│ Type : tristate│
│ Prompt: cfg80211 - wireless configuration API │
│ Location: │
│ -> Networking support (NET [=y])│
│ -> Wireless (WIRELESS [=y]) │
│ Defined at net/wireless/Kconfig:19│
│ Depends on: NET [=y] && WIRELESS [=y] && (RFKILL [=n] || !RFKILL [=n])

即选择位置如下:

Networking support  --->  Wireless  --->  cfg80211 - wireless configuration API

2. master的选项所在位置

│ Symbol: HOSTAP [=n] │
│ Type : tristate│
│ Prompt: IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)│
│ Location: │
│ -> Device Drivers │
│ -> Network device support (NETDEVICES [=y]) │
│ -> Wireless LAN (WLAN [=y]) │
│ Defined at drivers/net/wireless/hostap/Kconfig:1 │
│ Depends on: NETDEVICES [=y] && WLAN [=y] │
│ Selects: WIRELESS_EXT [=n] && WEXT_SPY [=n] && WEXT_PRIV [=n] && CRYPTO [=y] && CRYPTO_ARC4 [=y] && CRYPTO_ECB [=n] && CRYPTO_AES [=y] && CRYPTO_MICHAEL_MIC [=n] && \│
│ CRYPTO_ECB [=n] && CRC32 [=y] && LIB80211 [=n] && LIB80211_CRYPT_WEP [=n] && LIB80211_CRYPT_TKIP [=n] && LIB80211_CRYPT_CCMP [=n]

即选择位置如下:

Device Drivers  --->  Network device support  --->  Wireless LAN  --->   IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)

3. 编译内核

配置完相关选项后退出保存,然后编译,最后将编译生成的内核文件(我这里是uImage)烧录到开发板。

五、加载驱动,配置wifi

1. 加载驱动模块

烧录完kernel之后,在开发板通过insmod命令加载RTL8821CU.ko,此时可能会出现一些ERROR的打印信息,但是只要出现

RTW: rtw_regsty_chk_target_tx_power_valid return _FALSE for band:0, path:0, rs:0, t:-1
RTW: rtw_ndev_init(wlan0) if1 mac_addr=30:eb:1f:04:ec:55
usbcore: registered new interface driver rtl8821cu
RTW: module init ret=0

这几行打印信息,就说明模块初始化成功,不影响使用。


2. 开启wifi功能并配置ip

在开发板分别输入以下命令:

	 ifconfig wlan0 up
	 ifconfig wlan0 192.168.30.1

3. 测试驱动模块

可以通过在开发板上输入命令:cat /proc/net/wireless来查看,如果出现以下打印信息则说明模块成功,且功能正常:

Inter-| sta-|   Quality|   Discarded packets   | Missed | WE
 face | tus | link level noise |  nwid  crypt   frag  retry   misc | beacon | 22
 wlan0: 00001.1.0.   0  0  0  0  00

4. 配置wifi

wifi配置主要有:

  1. 设置wifi为AP热点模式;
  2. 设置wifi热点的名字;
  3. 设置wifi热点的密码;

要实现以上操作,需要用到hostapd和udhcpd这两个工具,这两个工具的编译过程省略,自行百度或谷歌。

1)创建hostapd.conf文件,内容如下:

interface=wlan0
driver=rtl871xdrv
ssid=stonkamavs
channel=9
hw_mode=g
ignore_broadcast_ssid=0
auth_algs=1
wpa=2
wpa_passphrase=12345678

wpa_key_mgmt=WPA-PSK

bridge=br0



wpa_pairwise=TKIP
rsn_pairwise=CCMP

2)创建udhcpd.conf文件,内容如下:

start		192.168.40.2

end		192.168.40.200


interface	wlan0

opt	dns	8.8.8.8
option	subnet	255.255.255.0
opt	router	192.168.2.1
opt	wins	192.168.10.10
option	dns	129.219.13.81	
option	domain	local
option	lease	864000		
option	msstaticroutes	10.0.0.0/8 10.127.0.1		
option	staticroutes	10.0.0.0/8 10.127.0.1, 10.11.12.0/24 10.11.12.1


option	0x08	01020304	# option 8: "cookie server IP addr: 1.2.3.4"

3)将以上2个conf文件拷贝到开发板,在开发板分别输入以下命令:

 ./hostapd hostapd.conf -B
 udhcpd udhcpd.conf

此时wifi热点已经开启,并可以正常使用。

你可能感兴趣的:(海思开发,kernel内核编译)