掌桥专利:专业的专利平台
掌桥专利
首页

一种基于安卓系统的动态的兼容不同厂商的WIFI及蓝牙模块的方法

文献发布时间:2023-06-19 11:45:49


一种基于安卓系统的动态的兼容不同厂商的WIFI及蓝牙模块的方法

技术领域

本发明涉及兼容不同厂商的WIFI及蓝牙模块领域,具体涉及一种基于安卓系统的动态的兼容不同厂商的WIFI及蓝牙模块的方法。

背景技术

安卓是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,Android操作系统最初由Andy Rubin开发,主要支持手机,2005年 8月由Google收购注资,2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统,随后Google以 Apache开源许可证的授权方式,发布了Android的源代码,第一部Android智能手机发布于2008年10月,Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机、智能手表等,2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一,2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%,2013年09月24日谷歌开发的操作系统 Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。

现有技术存在以下不足:现有的安卓系统中,特别是电视投影等平板显示领域中,WIFI/蓝牙模块都是以解决方案+外挂WIFI和蓝牙芯片或模块的方式实现WIFI和蓝牙的功能,现在市面上的WIFI及蓝牙模块很多比如mediatek的 7668/7662等和Realtek的8723/8822等不同的WIFI及蓝牙模块驱动不同且不同的厂商使用的wpa_supplicant和蓝牙协议(在安卓系统中以libbt-vendor.so 和libbluetooth.so的行式出现)都会包含各厂商的一些私有协议库,所以如何在一个系统中不增加硬件成本的情况下,兼容不同厂商的WIFI及蓝牙模块成为一大难题。

因此,发明一种基于安卓系统的动态的兼容不同厂商的WIFI及蓝牙模块的方法很有必要。

发明内容

为此,本发明提供一种基于安卓系统的动态的兼容不同厂商的WIFI及蓝牙模块的方法,通过提供一种WIFI/蓝牙驱动加载及自动选择不同厂商的 wpa_supplicant和libbt-vendor.so和libbluetooth.so,用于在不增加产品成本的前提下,实现针对不同类型或型号的WIFI/蓝牙模块自动加载匹配,以解决如何在一个系统中不增加硬件成本的情况下,兼容不同厂商的WIFI及蓝牙模块的问题。

为了实现上述目的,本发明提供如下技术方案:一种基于安卓系统的动态的兼容不同厂商的WIFI及蓝牙模块的方法,包括具体步骤如下:

S1,在系统init.xxxx.rc中启动teconwifi对设备上的usb总线进行扫描,获得设备上的所有VID/PID;

S2,读取存储在设置存储介质上的WIFI配置文件,获得已配置的WIFI/BT 模块的vid_pid和S1扫描所得进行比对;

S3,根据wifi_vendor_name识别出WIFI/蓝牙模块厂商,设置所要加载的 WIFI、/蓝牙模块的wpa_supplicant和libbt-vendor.so和libbluetooth.so;

S4,在init.rc中利用on property:vendor.mtk.wifi.driver来加载相应的wifi/蓝牙模块的驱动。

优选的,所述S2中若有相同的,则可得到vid_pid对应的 wifi_vendor_name,并把wifi_vendor_name设置prop中 vendor.mtk.wifi.driver的属性。

优选的,所述S3中如Mediatek的WIFI/蓝牙就用预先存储在介质中的wpa_supplicant_mtk libbt-vendor_mtk.so libbluetoothmtk.so.Realtek的 WIFI/蓝牙就用预先存储在介质中的wpa_supplicant_rtk libbt-vendor_rtk.so libbluetooth_rtk.so。

优选的,所述S1中,还包括启动前的WIFI及蓝牙模块配置系统。

本发明的有益效果是:

本发明可以在一个系统内动态兼容不同厂商的WIFI/蓝牙模块,使得设备在不改变软件代码的情况下可以兼容不同厂商不同型号的WIFI/蓝牙模块,提高了软件研发效率,同时也节省了软件维护成本。

附图说明

图1为本发明提供的流程示意图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

参照附图1,本发明提供的一种基于安卓系统的动态的兼容不同厂商的WIFI 及蓝牙模块的方法,包括具体步骤如下:

S1,在系统init.xxxx.rc中启动teconwifi对设备上的usb总线进行扫描,获得设备上的所有VID/PID;

进一步地,启动teconwifi程序,访问USB文件系统(/sys/bus/usb/devices),通过特定程序读取USB上所有设备的PID和VID信息;

S2,读取存储在设置存储介质上的WIFI配置文件,获得已配置的WIFI/BT 模块的vid_pid和S1扫描所得进行比对,若有相同的,则可得到vid_pid对应的wifi_vendor_name,并把wifi_vendor_name设置prop中vendor.mtk.wifi.driver的属性;

进一步地,通过特定程序解析存放于vendor/etc/wifi/中的wifi.cfg文件和通过特定程序比对读取的PID和VID和预先设置在设备上的vid_pid比对,如有相同,则保存wifi_vendor_name到系统prop的vendor.mtk.wifi.driver 中;

S3,根据wifi_vendor_name识别出WIFI/蓝牙模块厂商,设置所要加载的 WIFI、/蓝牙模块的wpa_supplicant和libbt-vendor.so和libbluetooth.so,如Mediatek的WIFI/蓝牙就用预先存储在介质中的wpa_supplicant_mtk libbt-vendor_mtk.solibbluetoothmtk.so.Realtek的WIFI/蓝牙就用预先存储在介质中的wpa_supplicant_rtklibbt-vendor_rtk.so libbluetooth_rtk.so;

进一步地,将不同厂家WIFI/BT提供的wpa_supplicant_8_lib内置到系统分别编译出来wpa_supplicant.然后分别重命名,如mediatek的重命名为wpa_supplicant_mtk,Realtek提供的wpa_supplicant_8_lib内置到系统编译出来的wpa_supplicant重命名为wpa_supplicant_rtk,并同时存储到 /vendor/bin/hw/下,其中通过特定程序分析wifi_vendor_name,本实例中仅通过wifi_vendor_name包含MT的则认为是mediatek厂商,包含RTL的则认为是 realtek,在有些实例中也可以在配置文件中增加一项vendor来区分;

如果是Mediatek的WIFI/BT模块,则通过特定程序把 wpa_supplicant,libbluetooth.so libbt-vendor.so配置成使用 wpa_supplicant_mtk及libbluetoothmtk.so libbt-vendor_mtk.so如果是 Realtek的WIFI/BT模块,则通过特定程序把wpa_supplicant,libbluetooth.so libbt-vendor.so配置成使用wpa_supplicant_rtk及libbluetooth_rtk.so libbt-vendor_rtk.so;

S4,在init.rc中利用on property:vendor.mtk.wifi.driver来加载相应的wifi/蓝牙模块的驱动;

进一步地,在init.mt5862.rc中通过系统的init程序中来响应on property 来启动不同的wifi/bt模块及不同的配置。

进一步地,所述S1中,还包括启动前的WIFI及蓝牙模块配置系统,具体的,配置系统具体步骤如下:

步骤1:编辑好系统包含的wifi/蓝牙模块的配置文件wifi.cfg.此示例格式如下:

=====

wifi_vendor_name=MT7668STA

order=9

count_vid_pid=1

vid_pid=0x0e8d:0x7668

wlan_fast_connect=1

=====

wifi_vendor_name=RTL8822CU

order=11

count_vid_pid=2

vid_pid=0x0bda:0xc82e

vid_pid=0x0bda:0xc82c

wlan_fast_connect=0;

从上面可以看到vid_pid代表VID PID,wifi_vendor_name代表WIFI/BT 型号,从型号我们可以知道属于不同的厂商,如MT7668STA代表Mediatek的 7668WIFI/BT模块.RTL8822CU代表RTL的8822WIFI/BT模块,上述vid_pid可以通过lsusb(shell指令获得);

步骤2:将多个WIFI/BT模块驱动编译出来后存储到设备的 vendor/lib/modules下如RTL8822cu的WIFI驱动为8822cu.ko,BT驱动为 rtk_btusb.ko存到设备的vendor/lib/modules下;

步骤3:将不同厂家WIFI/BT提供的wpa_supplicant_8_lib内置到系统分别编译出来wpa_supplicant.然后分别重命名,如mediatek的重命名为 wpa_supplicant_mtk,Realtek提供的wpa_supplicant_8_lib内置到系统编译出来的wpa_supplicant重命名为wpa_supplicant_rtk,并同时存储到 /vendor/bin/hw/下;

步骤4:将不同厂家WIFI/BT提供的/system/bt协议栈及 bdroid_buildcfg.h和libbt-vendor放到系统中分别编译出libbluetooth.so 和libbt-vendor.so然后Mediatek的WIFI/BT重命名为libbluetoothmtk.so 和libbt-vendor_mtk.so.Realtek的WIFI/BT重命为libbluetooth_rtk.so和 libbt-vendor_rtk.so并把他们同时分别存储到/system/lib/和vendor/lib/ 下;

步骤5:在init.mt5862.rc中同时添加相应的模块加载程序,如例的:

本发明的使用过程如下:在使用本发明时在系统init.xxxx.rc中启动 teconwifi对设备上的usb总线进行扫描,获得设备上的所有VID/PID;

读取存储在设置存储介质上的WIFI配置文件,获得已配置的WIFI/BT模块的vid_pid和S1扫描所得进行比对,如有相同的,则可得到vid_pid对应的wifi_vendor_name,并把wifi_vendor_name设置prop中 vendor.mtk.wifi.driver的属性;

根据wifi_vendor_name识别出WIFI/蓝牙模块厂商,设置所要加载的WIFI、 /蓝牙模块的wpa_supplicant和libbt-vendor.so和libbluetooth.so.如 Mediatek的WIFI/蓝牙就用预先存储在介质中的wpa_supplicant_mtk libbt-vendor_mtk.solibbluetoothmtk.so.Realtek的WIFI/蓝牙就用预先存储在介质中的wpa_supplicant_rtklibbt-vendor_rtk.so libbluetooth_rtk.so;

在init.rc中利用on property:vendor.mtk.wifi.driver来加载相应的 wifi/蓝牙模块的驱动。

以上所述,仅是本发明的较佳实施例,任何熟悉本领域的技术人员均可能利用上述阐述的技术方案对本发明加以修改或将其修改为等同的技术方案。因此,依据本发明的技术方案所进行的任何简单修改或等同置换,尽属于本发明要求保护的范围。

相关技术
  • 一种基于安卓系统的动态的兼容不同厂商的WIFI及蓝牙模块的方法
  • 一种基于安卓系统的设备的动态病毒检测方法和装置
技术分类

06120113042590