底層驅動(dòng)移植篇-瑞芯微RK3399開(kāi)發(fā)板Android7藍牙移植

發(fā)布時(shí)間:2021-12-1 10:25    發(fā)布者:就是塔塔
近期需要把藍牙(RTL8822CS 模塊)移植到迅為瑞芯微iTOP-3399 開(kāi)發(fā)板,經(jīng)過(guò)一段時(shí)間研究,調試,終于成功的將 wifi 功能移植到開(kāi)發(fā)板上面。
迅為iTOP-3399 開(kāi)發(fā)板的藍牙模塊與板卡之間的連接采用串口通信,藍牙模塊使用的是 RTL8822CS 模塊,Realtek 提供了 Android 各種版本的 driver ,porting Guid ,有了這些就為我們的移植工作做了總體性的指導。但是僅僅由 Realtek 提供的文檔是遠遠不夠的,畢竟硬件接口定義不同,內核版本也不一樣,Android 層與 Realtek 提供的代碼也有差異,這就需要我們在 Realtek 文檔的指導下,一步步完成移植工作。
移植的環(huán)境:
1.迅為iTOP-3399 開(kāi)發(fā)板+ RTL8822CS 模塊
2.Android 7.0
3.搭建好編譯環(huán)境的 ubuntu16.04 64Bit 開(kāi)發(fā)環(huán)境
本文檔配套資料在網(wǎng)盤(pán)資料“iTOP-3399 開(kāi)發(fā)板\02_iTOP-3399 開(kāi)發(fā)資料匯總(不含光盤(pán)內容)\13_嵌入式 Linux 開(kāi)發(fā)指南(RK3399)手冊配套資料\6.Android 底層驅動(dòng)\Android7 藍牙移植”目錄下。如果您移植出現問(wèn)題,可以對比下修改好的文件。光盤(pán)資料【20210927】日期的 Android7 源碼是修改好支持 rtl8822cs模塊藍牙功能的。
#移植步驟
一.修改 Android 部分
1. 修改 build\core\product.mk,添加如下內容:
BOARD_HAVE_BLUETOOTH_RTK \


2.將廠(chǎng)商提供的 rtkbt 目錄(在網(wǎng)盤(pán)資料“iTOP-3399 開(kāi)發(fā)板\02_iTOP-3399 開(kāi)發(fā)資料匯總(不含光盤(pán)內容)\13_嵌入式 Linux 開(kāi)發(fā)指南(RK3399)手冊配套資料\6.Android 底層驅動(dòng)\Android7 藍牙移植\原廠(chǎng)資料\20200422_BT_ANDROID_7.0_RTL8822C_COEX_v1717\rtkbt”)拷貝到
/home/topeet/rk3399_7.1_industry/device/rockchip/rk3399/rtkbt,該目錄主要用于設定不同硬件平臺 board配置信息。不同的子目錄對應不同的硬件平臺,需要根據具體硬件平臺進(jìn)行修改。
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
注意:因為系統源碼可能經(jīng)過(guò)修改或者定制,與制作補丁文件時(shí)有所不同。因此切勿直接覆蓋code 下面的文件。請參考 system_bt.diff 文件逐一修改。
因為修改內容眾多,限于篇幅,這里僅列舉幾個(gè)具有代表性的例子。
修改文件示例:
首先打開(kāi) 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,新的文件權限問(wèn) 755。不過(guò)權限部分我們其實(shí)可以忽略。
第 5~7 行


其中---和+++分別代表了新舊文件,我們可以不去管他。重點(diǎn)是第 7 行,補丁中的塊是用來(lái)說(shuō)明文件的改動(dòng)情況。他們通常以@@開(kāi)始,結束于另一個(gè)塊的開(kāi)始或者一個(gè)新的補丁頭。表示舊文件的 1~5 行被替換為了新文件的 1~9 行。

第 8~16 行

這部分內容為具體的修改內容。對應了新文件中的 1~9 行。其中,以+行起始的行(10~13 行)表示被新增的行。如果以-號起始,則表示刪除的行。
第一小部分的修改總結而言就是,修改舊文件(Android.mk)的 1~5 行,替換為新文件的(code 目錄下 Android.mk)1~9 行。如下圖所示,紅色部分為修改替換的部分,而綠色框起來(lái)的 3~6 行是新舊文件對比后的差異部分。


新增文件示例:

如 1657~1662 行所示,基本格式同前面講的大致相同,區別是第 1160~1162 行。第 1160 行的舊文件不是具體文件了,而是/dev/null。這里的意思就是舊的目錄不存在這個(gè)文件。自然,第 1162 行的-0,0 +1,12976就表示原來(lái)的內容全部替換為新的文件。
這個(gè)修改是最為簡(jiǎn)單的,我們只需要把 patch/code/system/bt/hci/src/hci_h5.c 中的文件直接復制到/code/system/bt/hci/src/目錄中即可。
注意:因為修改替換過(guò)程十分漫長(cháng)和復雜,因此我們建議直接使用我們修改好的代碼。

三. rtk_rfkill driver 驅動(dòng)
在需要用到 BT_DIS pin 來(lái)控制藍牙芯片的場(chǎng)合, 則需要一個(gè) rfkill 驅動(dòng). rfkill 驅動(dòng)的具體實(shí)現與平臺嚴重相關(guān),所以如果有需要,請根據實(shí)際情況進(jìn)行開(kāi)發(fā).RTK 可以提供 reference code. 注意:大多數情況下,客戶(hù)平臺之前搭配過(guò)其他家的藍牙,所以一般都已有 rfkill 驅動(dòng),只是需要將 GPIOpin 腳接到之前藍牙使用過(guò)的 pin 就可以,如果不一樣,修改一下 rfkill 驅動(dòng)中 GPIO 腳即可.確認當前是否有支持藍牙的 rfkill 驅動(dòng)方法如下:
cat /sys/class/rfkill/rfkill*/type
檢查是否有 bluetooth 字樣輸出,如果有,則已有 rfkill 驅動(dòng),不需要重新開(kāi)發(fā)。
然后將/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 文件,可以按照下面的配置來(lái)關(guān)閉這幾個(gè) Profile,如果用戶(hù)需要支持,只需把對應值設置為 true 即可

2.配置本地設備名稱(chēng)
修改/home/topeet/rk3399_7.1_industry/device/rockchip/rk3399/bluetooth/bdroid_buildcfg.hBTM_DEF_LOCAL_NAME 配置項用于配置設備的名字.如果沒(méi)有這個(gè)配置項,將采用 ro.product.modelproperty 設置的名字作為設備名.



五. Porting 結束后的基本測試
修改完成后在 Android7 的 Setting APP 里面打開(kāi) Bluetooth,就可以?huà)呙璧狡渌{牙設備,然后進(jìn)行配對,配對完成后就可以進(jìn)行文件的傳輸操作了,筆者僅測試了藍牙的文件發(fā)送與接收功能,其他的藍牙功能比如藍牙耳機,藍牙鼠標的使用均未進(jìn)行測試,不過(guò)有了文件發(fā)送接收的測試基本說(shuō)明了藍牙的 Porting
是 OK 的,如果您有興趣或者需求,可以移植藍牙其他更豐富的功能與應用。

迅為瑞芯微RK3399開(kāi)發(fā)板:

核心板參數
尺寸: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路數字麥克風(fēng)陣列輸入
引角擴展:引出腳多達320個(gè),滿(mǎn)足用戶(hù)各類(lèi)擴展需求
多媒體        支持4K VP9 and 4K 10bits H265/H264 視頻解碼,高達60fps;1080P 多格式視頻解碼 (VC-1, MPEG-1/2/4, VP8)
運行溫度:0度至+80度區間,設備工作正常,運行良好!
應用范圍:可廣泛用于人臉識別設備、無(wú)人機、機器人、游戲終端、廣告機/一體機、金融POS類(lèi)、車(chē)載控制業(yè)、云端服務(wù)、VOIP視頻會(huì )議系統、醫療類(lèi)、安防/監控/警務(wù)、工控類(lèi)、IoT物聯(lián)網(wǎng)領(lǐng)域、VR等近百行業(yè)應用產(chǎn)品。

底板參數
尺寸:19cm*12cm                     PCB板:4層
POWER:電直流電源輸入接口,12V/2A電源輸入              GPS模塊:支持(選配)
SWITCH:電源開(kāi)關(guān)            WIFI/BT:雙頻2.4G/5G WIFI、Bluetooth4.1二合一模塊
HDMI接口:1路 HDMI2.0輸出接口          EDP LCD:1路
Type-C:1路 Type-C USB3.0接口,兼容OTG功能          MIPI_TX:1路
TF卡槽:1個(gè)          MIPI_TX/RX:1路
USB HOST:4路 USB2.0接口;1路 USB3.0接口;        SPDIF:光纖輸出接口
串口:2路RS232串口                  BUZZER:個(gè)蜂鳴器
網(wǎng)口:1路千兆以太網(wǎng)(10/100/1000Mbps)                  RTC:實(shí)時(shí)時(shí)鐘
IRDA:1個(gè)                  GPIO接口:20PIN,包括2路 ADC、2路I2C、 5v、3.3v電源和地
SIM卡槽:1個(gè)                  LED:3個(gè)
PHONE:支持耳機輸出                  PCIE:PCIE M.2接口
MIC:支持MIC輸入                  陀螺儀:支持
按鍵:6個(gè)                  電子羅盤(pán):支持
4G模塊:全網(wǎng)通(選配)                  GPIO:20路
CAMERA接口:CAMERA 1路、MIPI CAMERA 1路        



本文地址:http://selenalain.com/thread-779731-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页