Android4.4.2下 RTL8732BU 驱动移植

来源:互联网 发布:检测硬件的软件 编辑:程序博客网 时间:2024/06/16 07:42

Android4.4.2下 RTL8732BU 驱动移植

由于在Android4.4.2版本系统下移植RTL8723BU驱动,花了不少时间,走了不少弯路,所以特意写个博客记下移植过程和遇到的问题:

平台:sabresd_6dq,android4.4.2, linux3.0.35

参考:https://community.nxp.com/thread/322825

然后主要的驱动移植修改移植后的文件:
http://download.csdn.net/download/hao1xiao1zi2/9897607
http://download.csdn.net/download/hao1xiao1zi2/9897612

主要需要修改的文件(可以参考RTL8723BU压缩包中的的移植文档):
device/fsl/sabresd_6dq/BoardConfig.mk(加入驱动声明)
device/fsl/imx6/sabresd_6dq.mk(一些权限文件添加与移除)
device/fsl/sabresd_6dq/required_hardware.xml(同上)

修改init.rc或者init.freescale.rc文件
这里要**注意**init.rc与init.freescale.rc文件的区别。
首先是device/fsl/imx6/etc/init.rc这个文件修改的结果就是修改了输出文件out/target/product/sabresd_6dq/root/init.rc
修改device/fsl/sabresd_6dq/init.rc就是修改out/target/product/sabresd_6dq/root/init.freescale.rc

还有修改wpa_supplicant适配层,即wifi_realtek.c文件

开始移植:
首先是Linux驱动的移植,我这里没有采用编译进内核方式,采用编译模块方式,.ko模块
其实可以直接按照RTL8723BU提供的文档Quick_Start_Guide_for_Driver_Compilation_and_Installation.pdf
直接移植。
主要需要注意的问题就是
先要编译kernel_imx内核产生cfg80211.ko和mac80211.ko,然后再单独编译rtl8723bu驱动模块,因为rtl8723bu驱动需要依赖于cfg80211,否则即使驱动编译成功,不注意顺序的话,加载rtl8723bu驱动的时候会报出与cfg80211有关的错误。
我修改rtl8723bu驱动生成的模块名为wlan0.ko,
然后把生成的三个驱动cfg80211.ko,mac80211.ko以及wlan0.ko放到out/target/product/sabresd_6dq/system/lib/modules/文件下。

为了开机自动加载模块,所以我在开机自运行脚本上分别自动加载cfg80211.ko,mac80211.ko和wlan0.ko
注意,这里我遇到一个问题就是在后续加载启动后,终端上使用netcfg wlan0 up提示出错。有可能是权限问题,我没有弄明白,反正能用就可以。
加载使用device/fsl/imx6/etc/init.rc加载cfg80211.ko,mac80211.ko
使用device/fsl/sabresd_6dq/init.rc加载wlan0.ko

有关wpa_supplicant与setting相关的移植

参考RTL8723BU压缩包中关于android4.4的移植文档说明。

修改的地方有在device/fsl/imx6/etc/init.rc中添加,主要就是添加权限和相关文件处理
mkdir /system/etc/wifi 0777 wifi wifi
chmod 0777 /system/etc/wifi
chmod 0777 /system/etc/wifi/wpa_supplicant.conf
chown wifi wifi /system/etc/wifi/
chown wifi wifi /system/etc/wifi/wpa_supplicant.conf
#wpa_supplicant control socket for android wifi.c(android private socket)
mkdir /data/misc/wifi 0777 wifi wifi
mkdir /data/misc/wifi/sockets 0777 wifi wifi
chmod 0777 /data/misc/wifi
chown wifi wifi /data/misc/wifi
chmod 0777 /data/misc/wifi/sockets
chown wifi wifi /data/misc/wifi/sockets
chmod 0777 /data/misc/wifi/wpa_supplicant.conf
chown wifi wifi /data/misc/wifi/wpa_supplicant.conf
setprop wifi.interface wlan0
setprop wlan.driver.status “ok”
这里不再创建/data/system/wpa_supplicant文件夹,好像有一些版本的驱动需要创建,具体参考wifi_realtek.c或者wifi.c文件
#and also remove this lines
#mkdir /data/system/wpa_supplicant 0777 wifi wifi
#chmod 0777 /data/system/wpa_supplicant
#chown wifi wifi /data/system/wpa_supplicant
#symlink /data/misc/wifi/wpa_supplicant /data/system/wpa_supplicant

在device/fsl/sabresd_6dq/init.rc中添加rtw_suppl服务,注意这个文字应该和wifi.c或者wifi_realtek.c文件中的对应文字一样,否则不起作用
service rtw_suppl /system/bin/wpa_supplicant \
-Dnl80211 -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf -B \
-O/data/misc/wifi/sockets \
-e/data/misc/wifi/entropy.bin \
-g@android:wpa_wlan0
class main
socket wpa_wlan0 dgram 660 wifi wifi
disabled
oneshot
这里的-g参数和socket wpa_wlan0的创建很重要,否则不可以与wpa_supplicant成功通信。

因为一知不解,都不知道自己怎么弄好的,是个android新手,所以实在是浪费了不少时间,弄好驱动后,也是不知道原理。本来也就不是从事这一块,所以弄好wifi就不想深究原因。还是赶快去干点别的正事。

原创粉丝点击