簡介: CSDN博客專家,專注Android/Linux系統,分享多mic語音方案、音視頻、編解碼等技術,與大家一起成長!
優質專欄:Audio工程師進階系列【原創干貨持續更新中……】🚀
優質專欄:多媒體系統工程師系列【原創干貨持續更新中……】🚀
優質視頻課程:AAOS車載系統+AOSP14系統攻城獅入門實戰課【原創干貨持續更新中……】🚀
人生格言: 人生從來沒有捷徑,只有行動才是治療恐懼和懶惰的唯一良藥.
🍉🍉🍉文章目錄🍉🍉🍉
- 🌻1.前言
- 🌻2.Binder介紹
- 🌻3.調試步驟
- 🐓3.1 添加日志
- 🐓3.2 編譯與在設備運行
🌻1.前言
本篇目的:基于Android14源碼,如何對Binder進行調試
🌻2.Binder介紹
- Binder,全稱為Android Binder IPC(Inter-Process Communication),是Android系統中用于進程間通信的一種機制。它是一種基于C/S(客戶端/服務器)模式的通信方式,主要由客戶端、服務端和Binder驅動三個部分組成。Binder機制在Android系統中具有重要的意義,因為它使得不同的進程可以安全、高效地共享數據和資源,從而實現了應用程序之間的協作和通信。
- Binder機制的架構可以分為三個層次:客戶端、服務端和Binder驅動。客戶端和服務端通過Binder接口進行通信,而Binder驅動則負責在內核空間處理Binder對象的操作和數據傳輸。
- 客戶端是發起通信的一方,它通過調用服務端提供的接口來請求服務。客戶端和服務端之間的通信是通過Binder對象進行的,Binder對象封裝了通信過程中所需的數據和方法。客戶端通過查詢Binder對象的方法列表來了解服務端提供的接口,然后根據接口定義的參數和返回值與服務端進行交互。
- 服務端是提供服務的一方,它通過實現Binder接口中的方法來定義可被客戶端調用的服務。服務端需要注冊自己的Binder對象到系統服務中,這樣客戶端才能通過Binder接口找到并調用服務端的方法。服務端在接收到客戶端的請求后,可以通過Binder對象與客戶端進行數據交換,并返回處理結果。
- Binder驅動是整個機制的核心,它位于內核空間,負責處理Binder對象的操作和數據傳輸。Binder驅動主要完成以下功能:
- 創建和管理Binder對象:Binder驅動負責創建Binder對象,并維護對象的唯一標識和引用計數。當服務端注冊Binder對象時,驅動會將其添加到系統中,以便客戶端能夠找到并使用。
- 處理客戶端和服務端的通信請求:當客戶端發起通信請求時,Binder驅動會根據請求中的目標Binder對象ID,將請求傳遞給對應的服務端。服務端處理完請求后,將結果通過Binder驅動返回給客戶端。
- 支持跨進程數據傳輸:Binder驅動實現了對跨進程數據傳輸的支持,它將客戶端和服務端的數據封裝在Binder對象中,然后在內核空間進行傳輸。這樣可以有效地減少用戶空間和內核空間之間的數據拷貝,提高通信效率。
- 保障通信安全:Binder驅動支持權限控制,可以確保只有授權的進程才能訪問特定的服務。此外,驅動還提供了數據加密和簽名機制,以保護通信過程中的數據安全和隱私。
- 總之,Binder機制在Android系統中發揮著至關重要的作用,它為應用程序之間的通信提供了高效、安全和便捷的途徑。通過Binder機制,Android系統能夠實現進程間的協作和資源共享,從而提高了系統的整體性能和用戶體驗。
🌻3.調試步驟
🐓3.1 添加日志
sp<IInterface> IBinder::queryLocalInterface(const String16& )
{ALOGE("%s, %s(), line = %d\n",__FILE__,__FUNCTION__,__LINE__);return nullptr;
}
🐓3.2 編譯與在設備運行
# cd frameworks/native/libs/binder
# mm -j12# adb push libbinder.so /system/lib64
注意:不用重啟設備。
- 直接運行服務端和客戶端設備即可。