在hi3518ev300平台移植rtl8723DS(Wi-Fi篇)

目录

1 说明

2 管脚复用

2.1 可能遇到的错误

3 移植说明

3.1 编译内核和驱动

3.2 使用AP模式

3.3 使用STA模式

4 重启wlan0


1 说明

rtl8723DS是Wi-Fi、蓝牙二合一芯片方案。Wi-Fi支持2.4G频段,支持AP与STA共存的工作模式,使用SDIO接口。蓝牙支持4.2协议,使用UART接口。本文内容来源于调试hi3518ev300的过程中总结的经验。rtl8723DS开发包可咨询供应商或者从百度网盘获取。

链接:https://pan.baidu.com/s/1wqnxBAqXHUU7IQphmYn8LA

提取码:odw5

2 管脚复用

确保时钟使能,管脚复用正确,管脚顺序一一对应。我们由于业务需要,将SDIO1的管脚复用为SPI1功能。直接用SDIO0接WiFi没有调通,根据以往的经验,将SDIO0复用为SDIO1的功能调通了WiFi。下面加以说明。具体的资料包要找供应商获取。

参考Hi3516E V200R001C01SPC011\Hi3516E V200R001C01SPC011\ReleaseDoc\zh\00.hardware\chip\Hi3518EV300\《Hi3518EV300_PINOUT_CN.xlsx》->3.管脚控制寄存器

开机默认功能

复用功能1

复用功能2

管脚控制寄存器

SDIO0_CARD_DETECT

GPIO4_7

XXX

0x100C005C

SDIO0_CCLK_OUT

GPIO4_0

SDIO1_CCLK_OUT

0x100C0040

SDIO0_CCMD

GPIO4_1

SDIO1_CCMD

0x100C0044

SDIO0_CDATA0

GPIO4_2

SDIO1_CDATA3

0x100C0048

SDIO0_CDATA1

GPIO4_3

SDIO1_CDATA2

0x100C004C

SDIO0_CDATA2

GPIO4_4

SDIO1_CDATA1

0x100C0054

SDIO0_CDATA3

GPIO4_5

SDIO1_CDATA0

0x100C0054

himm 0x100c0040 0x1a04

himm 0x100c0044 0x1104

himm 0x100c0048 0x1104

himm 0x100c004c 0x1104

himm 0x100c0050 0x1104

himm 0x100c0054 0x1104

insmod rtl8189fs.ko

himm 0x1002002b 0x28

himm 0x1002002b 0x20

至此,如果驱动正常,则会出现wlan0网络节点(ifconfig -a)。

2.1 可能遇到的错误

出现如“RTW: sdio_power_on_check: 0x100 cmd52 and cmd53 is not the same(index:99). RTW: sdio_power_on_check: fail at cmd52, cmd53.”的问题。原因是双方(wifi模组和hi3518ev300)的DATA0~3脚没有一一对应。

3 移植说明

具体的资料包要找供应商获取。

3.1 编译内核和驱动

相关资料

rtl8723DS_WiFi_linux_v5.6.8_34158.20190625_COEX20190530-3030.tar.gz

Quick_Start_Guide_for_Driver_Compilation_and_Installation.pdf

修改内核

将驱动包解压之后拷贝到Hi3516EV200(Hi3518EV300与Hi3516EV200共用开源代码集busybox,uboot,kernel,rootfs)KSRC\drivers\net\wireless并改名字为rtl8723ds。

修改KSRC\drivers\net\wireless\rtl8723ds\Makefile,

CONFIG_PLATFORM_I386_PC = n

CONFIG_PLATFORM_HISILICON = y

ifeq ($(CONFIG_PLATFORM_HISILICON), y)

EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_HISILICON -DCONFIG_CONCURRENT_MODE

#CONFIG_CONCURRENT_MODE宏支持STA和AP可共存

ARCH := arm

EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT

CROSS_COMPILE = arm-himix100-linux-

KSRC := /home/lijun/HiSDK/Hi3516EV200_SDK_V1.0.1.1/osdrv/opensource/kernel/linux-4.9.y

#KSRC以实际环境而变

MODULE_NAME := rtl8723ds

#MODULE_NAME可任意命名

endif

修改KSRC\drivers\net\wireless\Makefile,

增加一行内容:obj-$(CONFIG_RTL8723DS) += rtl8723ds/,其中rtl8723ds即为驱动包的名字,CONFIG_RTL8723DS中的RTL8723DS参考于驱动包中的Kconfig文件中的”config RTL8723DS”行。

修改内核根目录\drivers\net\wireless\Kconfig,

增加一行内容:source "drivers/net/wireless/rtl8723ds/Kconfig",其中rtl8723ds即为驱动包的名字。

编译内核和驱动

cd KSRC,KSRC为内核根目录

make distclean

cp arch/arm/configs/hi3518ev300_full_defconfig  .config

make ARCH=arm CROSS_COMPILE=arm-himix100-linux- menuconfig

确保Device Drivers->Network device support为’*’,Device Drivers->Network device support-> Wireless LAN (NEW)为’*’,Device Drivers->Network device support-> Wireless LAN (NEW)->Realtek 8723D SDIO or SPI WiFi (NEW)为’M’,保存配置。

make ARCH=arm CROSS_COMPILE=arm-himix100-linux-,此命令编译生成多个ko文件,其中有./drivers/net/wireless/rtl8723ds/rtl8723ds.ko,rtl8723ds.ko不能被裁剪,否则会报错。

make ARCH=arm CROSS_COMPILE=arm-himix100-linux- uImage,此命令编译生成可烧录的内核文件。

还可以选择性地将cfg80211被编译进内核,

3.2 使用AP模式

相关资料

rtl8723DS_WiFi_linux_v5.6.8_34158.20190625_COEX20190530-3030.tar.gz

Quick_Start_Guide_for_Driver_Compilation_and_Installation.pdf

移植libnl

从官网http://www.infradead.org/~tgr/libnl/files/下载libnl-3.2.24.tar.gz。解压libnl压缩包(tar xzf libnl-3.2.24.tar.gz),创建/home/lijun/libnl_install(mkdir libnl_install),进入解压之后的目录,

./configure --prefix=/home/lijun/libnl_install CC=arm-himix100-linux-gcc --host=arm-linux-uclibceabi

make

make install

将/home/lijun/libnl_install/lib下的库文件拷贝到目标板。

cp -d libnl-3.so.200.19.0 /lib/

cp -d libnl-3.so.200 /lib/

cp -d libnl-3.so /lib/

cp -d libnl-cli-3.so.200.19.0 /lib/

cp -d libnl-cli-3.so.200 /lib/

cp -d libnl-cli-3.so /lib/

cp -d libnl-genl-3.so.200.19.0 /lib/

cp -d libnl-genl-3.so.200 /lib/

cp -d libnl-genl-3.so /lib/

cp -d libnl-idiag-3.so.200.19.0 /lib/

cp -d libnl-idiag-3.so.200 /lib/

cp -d libnl-idiag-3.so /lib/

cp -d libnl-nf-3.so.200.19.0 /lib/

cp -d libnl-nf-3.so.200 /lib/

cp -d libnl-nf-3.so /lib/

cp -d libnl-route-3.so.200.19.0 /lib/

cp -d libnl-route-3.so.200 /lib/

cp -d libnl-route-3.so /lib/

移植hostapd

解压wpa_supplicant_8_kk_4.4_rtw_r25669.20171213.tar.gz并进入hostapd,针对目标板(hi3518ev300)更改Makefile、.config,解决编译报错的问题如:../src/drivers/driver_nl80211.c:19:31: fatal error: netlink/genl/genl.h: No such file or directory。

下列两张图,左边为更改之前的内容片段,右边为更改之后的内容片段。

make

生成hostapd、hostapd_cli,将它们拷贝到目标板。

更改rtl_hostapd_2G.conf并拷贝到目标板,下列一张图,左边为更改之前的内容片段,右边为更改之后的内容片段。

使用静态IP连接热点

大致过程如下,

板端:

insmod rtl8723ds.ko

ifconfig wlan0 up

ifconfig wlan0 192.168.0.1

./hostapd ./rtl_hostapd_2G.conf -B

手机端:

设置静态IP方式,如IP:192.168.0.11,路由器:192.168.0.1,DNS:8.8.8.8,连接热点(默认密码:87654321)。

动态分配IP地址之busybox

busybox中的udhcpc能实现自动获取IP地址的功能,修改busybox的配置。

make menuconfig

确保Networking Utilities->udhcp server (udhcpd)为’*’,Networking Utilities->udhcp client (udhcpd)为’*’,保存修改

make,在根目录下生成可执行文件busybox

将上述生成的busybox拷贝至板端,cd /bin,执行ln -s busybox udhcpd,ln -s busybox udhcpc,

在板端创建/usr/share/udhcpc(mkdir /usr/share/udhcpc)文件夹,将busybox根目录下examples\udhcp\simple.script文件拷贝至板端 /usr/share/udhcpc,重命名为default.script并增加可执行权限。

动态分配IP地址之内核

进入kernel根目录,修改配置,确保Networking support->Networking options->IP: DHCP support为’*’,参考5.3节,重新编译ko文件,重新编译内核,更换ko、内核。

make ARCH=arm CROSS_COMPILE=arm-himix100-linux- menuconfig

make ARCH=arm CROSS_COMPILE=arm-himix100-linux-,此命令编译生成多个ko文件,

make ARCH=arm CROSS_COMPILE=arm-himix100-linux- uImage,此命令编译生成可烧录的内核

动态获取IP连接热点

大致过程如下,

板端:

insmod rtl8723ds.ko

ifconfig wlan0 up

ifconfig wlan0 192.168.0.1

udhcpd ./udhcpd.conf

使用ps aux | grep ‘udhcpd’确定udhcpd是否执行成功,如果找不到则执行udhcpd ./udhcpd.conf -f,如果出现如下错误,

udhcpd: can't open '/var/lib/misc/udhcpd.leases': No such file or directory

创建相应的空目录和空文件,

mkdir -p /var/lib/misc/

touch /var/lib/misc/udhcpd.leases

./hostapd ./rtl_hostapd_2G.conf -B

手机端:

设置DHCP方式获取IP,连接热点(默认密码:87654321)。

可以从busybox根目录下examples/udhcp目录下找到udhcpd.conf

udhcpd.conf示例内容如下:

start           192.168.0.20

end             192.168.0.254

interface wlan0

opt     dns     8.8.8.8 192.168.0.1

option  subnet  255.255.255.0

opt     router  192.168.0.1

option  dns     114.114.114.114 # appended to above DNS servers for a total of 3

3.3 使用STA模式

相关资料

wpa_supplicant_8_kk_4.4_rtw_r25669.20171213.tar.gz

wpa_cli_with_wpa_supplicant.pdf

Wireless_tools_porting_guide.pdf

移植libnl

和使用AP模式->移植libnl的描述一样。

移植wpa_supplicant

解压wpa_supplicant_8_kk_4.4_rtw_r25669.20171213.tar.gz并进入wpa_supplicant,针对目标板(hi3518ev300)更改.config,解决编译报错的问题如:../src/drivers/driver_nl80211.c:19:31: fatal error: netlink/genl/genl.h: No such file or directory。

下列一张图,左边为更改之前的内容片段,右边为更改之后的内容片段。

生成wpa_supplicant、wpa_passphrase、wpa_cli,将它们拷贝到板端。

将wpa_0_8.conf拷贝到板端。

接入WiFi热点

加载驱动,进入相应可执行文件和配置文件存放目录,

ifconfig wlan0 up

./wpa_supplicant -B -cwpa_0_8.conf -iwlan0,wpa_0_8.conf文件无需更改

./wpa_cli -p/var/run/wpa_supplicant scan,扫描当前环境的无线局域网络热点(确定pairwise、group字段)

./wpa_cli -p/var/run/wpa_supplicant scan_results

./wpa_cli -iwlan0 add_network

./wpa_cli -iwlan0 set_network 0 ssid '"Wondfo-zhong"',无线路由器的SSID为"Wondfo-zhong"

./wpa_cli -iwlan0 set_network 0 key_mgmt WPA-PSK,可省略

./wpa_cli -iwlan0 set_network 0 psk '"meiyoumima"',无线路由器的连接密码为"meiyoumima"

./wpa_cli -iwlan0 set_network 0 pairwise CCMP,可省略

./wpa_cli -iwlan0 set_network 0 group CCMP,可省略

./wpa_cli -iwlan0 set_network 0 proto WPA,可省略

./wpa_cli -iwlan0 enable_network 0

此时WiFi模组已经连上热点,但还未分配有效IP地址,可以先手动指定一个,

ifconfig wlan0 192.168.1.246 netmask 255.255.255.0

route add default gw 192.168.1.1

ping 14.215.177.38,14.215.177.38为www.baidu.com的IP地址

此时可以验证WiFi模块网络功能正常

增加域名解析文件

上述步骤中不能成功执行ping www.baidu.com,需要增加域名解析文件,

echo nameserver 114.114.114.114 > /etc/resolv.conf

此时可以正常执行ping www.baidu.com

动态获取IP地址之busybox

busybox中的udhcpc能实现自动获取IP地址的功能,修改busybox的配置。

make menuconfig

确保Networking Utilities->udhcp server (udhcpd)为’*’,Networking Utilities->udhcp client (udhcpc)为’*’,保存修改

make,在根目录下生成可执行文件busybox

将上述生成的busybox拷贝至板端,cd /bin,执行ln -s busybox udhcpd,ln -s busybox udhcpc,

在板端创建/usr/share/udhcpc(mkdir /usr/share/udhcpc)文件夹,将busybox根目录下examples\udhcp\simple.script文件拷贝至板端 /usr/share/udhcpc,重命名为default.script并增加可执行权限。

动态获取IP地址之内核

进入kernel根目录,修改配置,确保Networking support->Networking options->IP: DHCP support为’*’,参考5.3节,重新编译ko文件,重新编译内核,更换ko、内核。

make ARCH=arm CROSS_COMPILE=arm-himix100-linux- menuconfig

make ARCH=arm CROSS_COMPILE=arm-himix100-linux-,此命令编译生成多个ko文件,

make ARCH=arm CROSS_COMPILE=arm-himix100-linux- uImage,此命令编译生成可烧录的内核

动态获取IP地址之udhcpc

现在可以使用udhcpc -i wlan0自动获取IP地址并且不用执行手动增加域名解析服务器的操作。

4 重启wlan0

执行ifconfig wlan0 down之后即关闭了wlan0,此时想重新启用wlan0,执行ifconfig wlan0 up之后发现不能ping通www.baidu.com,route命令查看路由信息如下:

推测是没加默认网关导致的,可以手动添加,route add default gw 192.168.1.1,此时可以ping通www.baidu.com;另外udhcpc程序会自动帮助添加网关,所以可以在down wlan0(ifconfig wlan0 down)之前kill掉udhcpc(ps aux | grep "udhcpc" | grep -v "grep" | awk '{print $1}' | xargs kill -9),在up wlan0(ifconfig wlan0 up)之后再执行udhcpc(udhcpc -i wlan0)。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ta是一个搬运工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值