1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 底层驱动移植篇-瑞芯微RK3399开发板Android7蓝牙移植

底层驱动移植篇-瑞芯微RK3399开发板Android7蓝牙移植

时间:2022-06-10 11:28:07

相关推荐

底层驱动移植篇-瑞芯微RK3399开发板Android7蓝牙移植

近期需要把蓝牙(RTL8822CS 模块)移植到迅为瑞芯微iTOP-3399 开发板,经过一段时间研究,调试,终于成功的将 wifi 功能移植到开发板上面。

迅为iTOP-3399 开发板的蓝牙模块与板卡之间的连接采用串口通信,蓝牙模块使用的是 RTL8822CS 模块,Realtek 提供了Android各种版本的 driver ,porting Guid ,有了这些就为我们的移植工作做了总体性的指导。但是仅仅由 Realtek 提供的文档是远远不够的,毕竟硬件接口定义不同,内核版本也不一样,Android 层与 Realtek 提供的代码也有差异,这就需要我们在 Realtek 文档的指导下,一步步完成移植工作。

移植的环境:

1.迅为iTOP-3399 开发板+ RTL8822CS 模块

2.Android 7.0

3.搭建好编译环境的 ubuntu16.04 64Bit 开发环境

本文档配套资料在网盘资料“iTOP-3399 开发板\02_iTOP-3399 开发资料汇总(不含光盘内容)\13_嵌入式Linux开发指南(RK3399)手册配套资料\6.Android 底层驱动\Android7 蓝牙移植”目录下。如果您移植出现问题,可以对比下修改好的文件。光盘资料【0927】日期的 Android7 源码是修改好支持 rtl8822cs模块蓝牙功能的。

#移植步骤

一.修改 Android 部分

1. 修改 build\core\product.mk,添加如下内容:

BOARD_HAVE_BLUETOOTH_RTK \

2.将厂商提供的 rtkbt 目录(在网盘资料“iTOP-3399 开发板\02_iTOP-3399 开发资料汇总(不含光盘内容)\13_嵌入式 Linux 开发指南(RK3399)手册配套资料\6.Android 底层驱动\Android7 蓝牙移植\原厂资料\_BT_ANDROID_7.0_RTL8822C_COEX_v1717\rtkbt”)拷贝到

/home/topeet/rk3399_7.1_industry/device/rockchip/rk3399/rtkbt,该目录主要用于设定不同硬件平台 board配置信息。不同的子目录对应不同的硬件平台,需要根据具体硬件平台进行修改。

3.因为是 UART 接口蓝牙芯片,我们需要修改/home/topeet/rk3399_7.1_industry/device/rockchip/rk3399/rtkbt/system/etc/bluetooth/rtkbt.conf 文件将BtDeviceNode 设置为正确蓝牙串口设备.例如 BtDeviceNode=/dev/ttyS0

4.添加设备权限,在

/home/topeet/rk3399_7.1_industry/device/rockchip/rk3399/init.rk3399.rc 文件中添加如下内容,一定要在 on boot 下添加。

# bluetooth

# change back to bluetooth from system

chown bluetooth net_bt_stack /data/misc/bluetooth

mkdir /data/misc/bluedroid 0770 bluetooth net_bt_stack

# bluetooth LPM

chown bluetooth net_bt_stack /proc/bluetooth/sleep/lpm

chown bluetooth net_bt_stack /proc/bluetooth/sleep/btwrite

#UART device

chmod 0660 /dev/ttyS0

chown bluetooth net_bt_stack /dev/ttyS0

# rfkill

chmod 0660 /sys/class/rfkill/rfkill0/state

chmod 0660 /sys/class/rfkill/rfkill0/type

chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/state

chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/type

write /sys/class/rfkill/rfkill0/state 0

# bluetooth MAC address programming

chown bluetooth net_bt_stack ro.bt.bdaddr_path

chown bluetooth net_bt_stack /system/etc/bluetooth

chown bluetooth net_bt_stack /data/misc/bluetooth

# setprop ro.bt.bdaddr_path "/data/misc/bluetooth/bdaddr"

service dhcpcd_bnep0 /system/bin/dhcpcd -BKLG

disabled

oneshot

service dhcpcd_bnep1 /system/bin/dhcpcd -BKLG

disabled

oneshot

service dhcpcd_bnep2 /system/bin/dhcpcd -BKLG

disabled

oneshot

service dhcpcd_bnep3 /system/bin/dhcpcd -BKLG

disabled

oneshot

service dhcpcd_bnep4 /system/bin/dhcpcd -BKLG

disabled

oneshot

service dhcpcd_bt-pan /system/bin/dhcpcd -ABKL

class main

disabled

oneshot

service iprenew_bt-pan /system/bin/dhcpcd -n

class main

disabled

oneshot

#eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

service rtw_fwloader /system/bin/rtw_fwloader

class main

disabled

oneshot

service p2p_supplicant /system/bin/wpa_supplicant \

-ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \

-e/data/misc/wifi/entropy.bin -N \

-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \

-O/data/misc/wifi/sockets \

-g@android:wpa_wlan0

class main

socket wpa_wlan0 dgram 660 wifi wifi

disabled

oneshot

service wpa_supplicant /system/bin/wpa_supplicant \

-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \

-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

service dhcpcd_wlan0 /system/bin/dhcpcd -aABDKL

class main

disabled

oneshot

service dhcpcd_p2p /system/bin/dhcpcd -aABKL

class main

disabled

oneshot

service iprenew_wlan0 /system/bin/dhcpcd -n

class main

disabled

oneshot

service iprenew_p2p /system/bin/dhcpcd -n

class main

disabled

oneshot

二.打补丁

我们打补丁是修改的 rtkbt 文件夹下的文件,因为 android7 默认不支持此款蓝牙芯片,因此我们还需要对照补丁文件,修改 c 源码。

补丁文件:patch/diff/system_bt.diff,修改后的参考代码目录:patch/code

注意:因为系统源码可能经过修改或者定制,与制作补丁文件时有所不同。因此切勿直接覆盖code 下面的文件。请参考 system_bt.diff 文件逐一修改。

因为修改内容众多,限于篇幅,这里仅列举几个具有代表性的例子。

修改文件示例:

首先打开 system_bt.diff 文件:

首先看第 1 行:

diff --git a/Android.mk b/Android.mk

表示对比的文件是 Android.mk。a 和 b 分别代表旧目录和新目录。这里则为/system/bt(下同)

目录与补丁目录 patch/code/system/bt 目录对比。

第 2~3 行

表示旧的文件权限为 0644,新的文件权限问 755。不过权限部分我们其实可以忽略。

第 5~7 行

其中---和+++分别代表了新旧文件,我们可以不去管他。重点是第 7 行,补丁中的块是用来说明文件的改动情况。他们通常以@@开始,结束于另一个块的开始或者一个新的补丁头。表示旧文件的 1~5 行被替换为了新文件的 1~9 行。

第 8~16 行

这部分内容为具体的修改内容。对应了新文件中的 1~9 行。其中,以+行起始的行(10~13 行)表示被新增的行。如果以-号起始,则表示删除的行。

第一小部分的修改总结而言就是,修改旧文件(Android.mk)的 1~5 行,替换为新文件的(code 目录下 Android.mk)1~9 行。如下图所示,红色部分为修改替换的部分,而绿色框起来的 3~6 行是新旧文件对比后的差异部分。

新增文件示例:

如 1657~1662 行所示,基本格式同前面讲的大致相同,区别是第 1160~1162 行。第 1160 行的旧文件不是具体文件了,而是/dev/null。这里的意思就是旧的目录不存在这个文件。自然,第 1162 行的-0,0 +1,12976就表示原来的内容全部替换为新的文件。

这个修改是最为简单的,我们只需要把 patch/code/system/bt/hci/src/hci_h5.c 中的文件直接复制到/code/system/bt/hci/src/目录中即可。

注意:因为修改替换过程十分漫长和复杂,因此我们建议直接使用我们修改好的代码。

三. rtk_rfkill driver 驱动

在需要用到 BT_DIS pin 来控制蓝牙芯片的场合, 则需要一个 rfkill 驱动. rfkill 驱动的具体实现与平台严重相关,所以如果有需要,请根据实际情况进行开发.RTK 可以提供 reference code. 注意:大多数情况下,客户平台之前搭配过其他家的蓝牙,所以一般都已有 rfkill 驱动,只是需要将 GPIOpin 脚接到之前蓝牙使用过的 pin 就可以,如果不一样,修改一下 rfkill 驱动中 GPIO 脚即可.确认当前是否有支持蓝牙的 rfkill 驱动方法如下:

cat /sys/class/rfkill/rfkill*/type

检查是否有 bluetooth 字样输出,如果有,则已有 rfkill 驱动,不需要重新开发。

然后将/home/topeet/rk3399_7.1_industry/system/bt/conf 下的 Android.mk.disbale 重命名为 Android.mk。

然后将/home/topeet/rk3399_7.1_industry/hardware/libhardware/include/hardware/bluetooth.h 文件修改

为如下图所示:

四.BT 功能配置

1.支持的 Profile 配置

修改/home/topeet/rk3399_7.1_industry/packages/apps/Bluetooth/res/values/config.xml 文件,可以按照下面的配置来关闭这几个 Profile,如果用户需要支持,只需把对应值设置为 true 即可

2.配置本地设备名称

修改/home/topeet/rk3399_7.1_industry/device/rockchip/rk3399/bluetooth/bdroid_buildcfg.hBTM_DEF_LOCAL_NAME 配置项用于配置设备的名字.如果没有这个配置项,将采用 ro.product.modelproperty 设置的名字作为设备名.

五. Porting 结束后的基本测试

修改完成后在 Android7 的 Setting APP 里面打开 Bluetooth,就可以扫描到其他蓝牙设备,然后进行配对,配对完成后就可以进行文件的传输操作了,笔者仅测试了蓝牙的文件发送与接收功能,其他的蓝牙功能比如蓝牙耳机,蓝牙鼠标的使用均未进行测试,不过有了文件发送接收的测试基本说明了蓝牙的 Porting

是 OK 的,如果您有兴趣或者需求,可以移植蓝牙其他更丰富的功能与应用。

迅为瑞芯微RK3399开发板:

核心板参数

尺寸:6.5*5.5cm

高度:连同连接器在内0.26cm

CPU:Rockchip RK3399 28纳米HKMG制程 双核Cortex-A72 1.8/2.0GHz;四核Cortex-A53 1.4GHz

内存:2GB 双通道DDR3(4GB可选)

存储:16GB EMMC

电源管理:官方推荐RK808芯片

工作电压:3.3V供电

系统支持:Android8.1系统;Ubuntu16.04系统;Debian9系统

接口:支持双USB3.0 Type-C接口;支持PCIe 2.1 (4 full-duplex lanes );内置低功耗MCU;8路数字麦克风阵列输入

引角扩展:引出脚多达320个,满足用户各类扩展需求

多媒体 支持4K VP9 and 4K 10bits H265/H264 视频解码,高达60fps;1080P 多格式视频解码 (VC-1, MPEG-1/2/4, VP8)

运行温度:0度至+80度区间,设备工作正常,运行良好!

应用范围:可广泛用于人脸识别设备、无人机、机器人、游戏终端、广告机/一体机、金融POS类、车载控制业、云端服务、VOIP视频会议系统、医疗类、安防/监控/警务、工控类、IoT物联网领域、VR等近百行业应用产品。

底板参数

尺寸:19cm*12cm PCB板:4层

POWER:电直流电源输入接口,12V/2A电源输入GPS模块:支持(选配)

SWITCH:电源开关 WIFI/BT:双频2.4G/5G WIFI、Bluetooth4.1二合一模块

HDMI接口:1路 HDMI2.0输出接口 EDPLCD:1路

Type-C:1路 Type-C USB3.0接口,兼容OTG功能 MIPI_TX:1路

TF卡槽:1个 MIPI_TX/RX:1路

USB HOST:4路 USB2.0接口;1路 USB3.0接口; SPDIF:光纤输出接口

串口:2路RS232串口 BUZZER:个蜂鸣器

网口:1路千兆以太网(10/100/1000Mbps) RTC:实时时钟

IRDA:1个 GPIO接口:20PIN,包括2路ADC、2路I2C、 5v、3.3v电源和地

SIM卡槽:1个LED:3个

PHONE:支持耳机输出 PCIE:PCIE M.2接口

MIC:支持MIC输入陀螺仪:支持

按键:6个电子罗盘:支持

4G模块:全网通(选配) GPIO:20路

CAMERA接口:CAMERA 1路、MIPI CAMERA 1路

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。