安卓binder驅動內核日志調試打印開放及原理(第一節)

背景:

經常有學員朋友在做系統開發時候,有時候遇到binder相關的一些問題,這個時候可能就需要比較多的binder相關日志,但是正常情況下這些binder通訊的的內核日志都是沒有的打印的,因為經常binder通訊太過于頻繁,如果正常版本都開放出來這些binder調試日志,那樣會讓系統卡頓,影響性能。
但是在分析binder驅動源碼時候又可以看到類似如下日志:
在這里插入圖片描述那么到底該怎么讓這些日志可以打印出來呢?下面給大家介紹一下相關的打開日志的命令。
這里binder內核日志相關準備分為兩節給大家分享:
第一節:主要介紹相關實戰命令的使用讓大家學會用命令去開放日志
第二節:主要介紹binder調試日志相關的源碼分析和控制原理

實戰調試命令:

通過控制debug_mask值來控制相關的binder調試日志的打開,那么debug_mask值的依據是什么呢?那就是來源下面這個枚舉:
kernel-aosp14/common/drivers/android/binder.c

enum {BINDER_DEBUG_USER_ERROR             = 1U << 0, // 1BINDER_DEBUG_FAILED_TRANSACTION     = 1U << 1, // 2BINDER_DEBUG_DEAD_TRANSACTION       = 1U << 2, // 4BINDER_DEBUG_OPEN_CLOSE             = 1U << 3, // 8BINDER_DEBUG_DEAD_BINDER            = 1U << 4, // 16BINDER_DEBUG_DEATH_NOTIFICATION     = 1U << 5, // 32BINDER_DEBUG_READ_WRITE             = 1U << 6, // 64BINDER_DEBUG_USER_REFS              = 1U << 7, // 128BINDER_DEBUG_THREADS                = 1U << 8, // 216BINDER_DEBUG_TRANSACTION            = 1U << 9, // 512BINDER_DEBUG_TRANSACTION_COMPLETE   = 1U << 10,// 1024BINDER_DEBUG_FREE_BUFFER            = 1U << 11,// 2048BINDER_DEBUG_INTERNAL_REFS          = 1U << 12,// 4096BINDER_DEBUG_PRIORITY_CAP           = 1U << 13,// 8192BINDER_DEBUG_SPINLOCKS              = 1U << 14,// 16384
};

比如上面背景中我們看到有binder_debug打印,它帶的參數是BINDER_DEBUG_OPEN_CLOSE
在這里插入圖片描述
那么從枚舉得出BINDER_DEBUG_OPEN_CLOSE = 1U << 3, // 8
所以只需要對debug_mask寫入 8既可以實現讓binder的中所有BINDER_DEBUG_OPEN_CLOSE相關binder_debug打印出來。

那么這個debug_mask在哪里呢?這里先直接告訴大家,是在如下目錄:

NX563J:/sys/module/binder/parameters # ls
debug_mask  devices  stop_on_user_error

簡單說就是在/sys/module/binder/parameters/debug_mask,這里的debug_mask文件就是要寫入的文件
比如寫入上面的值BINDER_DEBUG_OPEN_CLOSE為8 (注意一般需要debug機器)

NX563J:/ # echo 8 >  /sys/module/binder/parameters/debug_mask                                                                                                                                                  

然后這個時候抓取日志看看是否有顯示binder的open相關日志:

130|NX563J:/ # logcat -b all -c;logcat -b kernel | grep binder                                                                                                                                                    03-04 00:33:46.170     0     0 I binder  : 30418 close vm area da398000-da496000 (1016 K) vma 10220051 pagep 60000000000f53
03-04 00:33:46.172     0     0 I binder  : binder_flush: 30418 woke 0 threads
03-04 00:33:46.172     0     0 I binder  : binder_deferred_release: 30418 threads 5, nodes 2 (ref 3), refs 8, active transactions 0
03-04 00:33:46.187     0     0 I binder  : 30385 close vm area 75d915f000-75d925d000 (1016 K) vma 10220051 pagep 60000000000f53
03-04 00:33:46.187     0     0 I binder  : 30385 close vm area 765da4f000-765db4d000 (1016 K) vma 10220051 pagep 60000000000f53
03-04 00:33:46.187     0     0 I binder  : binder_flush: 30385 woke 0 threads
03-04 00:33:46.187     0     0 I binder  : binder_flush: 30385 woke 0 threads
03-04 00:33:46.188     0     0 I binder  : binder_deferred_release: 30385 threads 1, nodes 0 (ref 0), refs 3, active transactions 0
03-04 00:33:46.195     0     0 I binder  : binder_deferred_release: 30385 threads 11, nodes 50 (ref 51), refs 53, active transactions 0
03-04 00:33:47.224     0     0 I binder  : binder_open: 30512:30512
03-04 00:33:47.224     0     0 I binder  : 30512:30512 ioctl 40046210 7fd05b5cc0 returned -22
03-04 00:33:47.224     0     0 I binder  : binder_mmap: 30512 765db5c000-765dc5a000 (1016 K) vma 200071 pagep 60000000000f53
03-04 00:33:47.499     0     0 I binder  : binder_open: 30512:30536
03-04 00:33:47.499     0     0 I binder  : 30512:30536 ioctl 40046210 765d23af04 returned -22
03-04 00:33:47.499     0     0 I binder  : binder_mmap: 30512 75f1646000-75f1744000 (1016 K) vma 200071 pagep 60000000000f53
03-04 00:33:53.466     0     0 I binder  : binder_open: 30556:30556
03-04 00:33:53.466     0     0 I binder  : 30556:30556 ioctl 40046210 7fd05b5cc0 returned -22
03-04 00:33:53.466     0     0 I binder  : binder_mmap: 30556 765db56000-765dc54000 (1016 K) vma 200071 pagep 60000000000f53
03-04 00:33:53.619     0     0 I binder  : binder_open: 30556:30579
03-04 00:33:53.619     0     0 I binder  : 30556:30579 ioctl 40046210 765d23af04 returned -22
03-04 00:33:53.619     0     0 I binder  : binder_mmap: 30556 765cfa9000-765d0a7000 (1016 K) vma 200071 pagep 60000000000f53

明顯可以看到open,closer日志

如果想要多個開放多個枚舉,那么只需要做或運算,然后最后結果寫入 debug_mask既可以
比如開放如下幾個枚舉:

BINDER_DEBUG_USER_ERROR             = 1U << 0, // 1
BINDER_DEBUG_FAILED_TRANSACTION     = 1U << 1, // 2
BINDER_DEBUG_DEAD_TRANSACTION       = 1U << 2, // 4
BINDER_DEBUG_OPEN_CLOSE             = 1U << 3, // 8

那么最后寫入的值就是8 + 4+ 2+ 1 = 15

NX563J:/ # echo 15 >  /sys/module/binder/parameters/debug_mask                                                                                                                                                  

和binder相關的/sys/module/還有一個binder_alloc,它主要是binder 申請相關的日志,這里枚舉有差異

kernel-aosp14/common/drivers/android/binder_alloc.c

enum {BINDER_DEBUG_USER_ERROR             = 1U << 0, // 1BINDER_DEBUG_OPEN_CLOSE             = 1U << 1, // 2BINDER_DEBUG_BUFFER_ALLOC           = 1U << 2, // 4BINDER_DEBUG_BUFFER_ALLOC_ASYNC     = 1U << 3, // 8
};

這里寫入值方式和binder下面節點一樣

NX563J:/ # echo 7 >  /sys/module/binder_alloc/parameters/debug_mask                                                                                                                                                  

寫完后可以看到日志有大量的alloc相關打印:

03-04 00:42:12.716     0     0 I binder_alloc: 15501: binder_alloc_buf size 128 got buffer 0000000000000000 size 1040384
03-04 00:42:12.716     0     0 I binder_alloc: 15501: allocate pages 0000000000000000-0000000000000000
03-04 00:42:12.716     0     0 I binder_alloc: 15501: add free buffer, size 1040256, at 0000000000000000
03-04 00:42:12.716     0     0 I binder_alloc: 15501: binder_alloc_buf size 128 got 0000000000000000
03-04 00:42:12.717     0     0 I binder_alloc: 15501: binder_free_buf 0000000000000000 size 128 buffer_size 128
03-04 00:42:12.717     0     0 I binder_alloc: 15501: free pages 0000000000000000-0000000000000000
03-04 00:42:12.717     0     0 I binder_alloc: 15501: merge free, buffer 0000000000000000 do not share page with 0000000000000000 or 0000000000000000
03-04 00:42:12.717     0     0 I binder_alloc: 15501: free pages 0000000000000000-0000000000000000
03-04 00:42:12.717     0     0 I binder_alloc: 15501: add free buffer, size 1040384, at 0000000000000000
03-04 00:42:12.717     0     0 I binder_alloc: 15733: binder_alloc_buf size 9648 got buffer 0000000000000000 size 1040384
03-04 00:42:12.717     0     0 I binder_alloc: 15733: allocate pages 0000000000000000-0000000000000000
03-04 00:42:12.717     0     0 I binder_alloc: 15733: add free buffer, size 1030736, at 0000000000000000
03-04 00:42:12.717     0     0 I binder_alloc: 15733: binder_alloc_buf size 9648 got 0000000000000000
03-04 00:42:12.717     0     0 I binder_alloc: 15733: binder_free_buf 0000000000000000 size 9648 buffer_size 9648
03-04 00:42:12.717     0     0 I binder_alloc: 15733: free pages 0000000000000000-0000000000000000
03-04 00:42:12.717     0     0 I binder_alloc: 15733: merge free, buffer 0000000000000000 do not share page with 0000000000000000 or 0000000000000000
03-04 00:42:12.717     0     0 I binder_alloc: 15733: free pages 0000000000000000-0000000000000000
03-04 00:42:12.717     0     0 I binder_alloc: 15733: add free buffer, size 1040384, at 0000000000000000
03-04 00:42:12.963     0     0 I binder_alloc: 15501: binder_alloc_buf size 304 got buffer 0000000000000000 size 304
03-04 00:42:12.963     0     0 I binder_alloc: 15501: allocate pages 0000000000000000-0000000000000000
03-04 00:42:12.963     0     0 I binder_alloc: 15501: binder_alloc_buf size 304 got 0000000000000000
03-04 00:42:12.963     0     0 I binder_alloc: 1114: binder_free_buf 0000000000000000 size 48 buffer_size 48
03-04 00:42:12.963     0     0 I binder_alloc: 1114: free pages 0000000000000000-0000000000000000
03-04 00:42:12.963     0     0 I binder_alloc: 1114: merge free, buffer 0000000000000000 do not share page with 0000000000000000 or 0000000000000000
03-04 00:42:12.963     0     0 I binder_alloc: 1114: free pages 0000000000000000-0000000000000000
03-04 00:42:12.963     0     0 I binder_alloc: 1114: add free buffer, size 1040384, at 0000000000000000
03-04 00:42:12.964     0     0 I binder_alloc: 15501: binder_free_buf 0000000000000000 size 304 buffer_size 304
03-04 00:42:12.964     0     0 I binder_alloc: 15501: free pages 0000000000000000-0000000000000000
03-04 00:42:12.964     0     0 I binder_alloc: 15501: add free buffer, size 304, at 0000000000000000
03-04 00:42:12.964     0     0 I binder_alloc: 1114: binder_alloc_buf size 48 got buffer 0000000000000000 size 1040384
03-04 00:42:12.964     0     0 I binder_alloc: 1114: allocate pages 0000000000000000-0000000000000000
03-04 00:42:12.964     0     0 I binder_alloc: 1114: add free buffer, size 1040336, at 0000000000000000
03-04 00:42:12.964     0     0 I binder_alloc: 1114: binder_alloc_buf size 48 got 0000000000000000

更多framework實戰開發,請關注下面“千里馬學框架”

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72520.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72520.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72520.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker 安裝達夢數據庫(離線)

docker安裝達夢數據庫&#xff0c;官網上已經下載不了docker版本的了&#xff0c;下面可通過百度網盤下載 通過網盤分享的文件&#xff1a;dm8_20240715_x86_rh6_rq_single.tar.zip 鏈接: https://pan.baidu.com/s/1_ejcs_bRLZpICf69mPdK2w?pwdszj9 提取碼: szj9 上傳到服務…

MWC 2025 | 紫光展銳聯合移遠通信推出全面支持R16特性的5G模組RG620UA-EU

2025年世界移動通信大會&#xff08;MWC 2025&#xff09;期間&#xff0c;紫光展銳聯合移遠通信&#xff0c;正式發布了全面支持5G R16特性的模組RG620UA-EU&#xff0c;以強大的靈活性和便捷性賦能產業。 展銳芯加持&#xff0c;關鍵性能優異 RG620UA-EU模組基于紫光展銳V62…

達夢適配記錄-檢查服務器

service DmServicedmdb status 查看是否開啟&#xff0c;沒有配置systemctl&#xff0c;查看《DM8_Linux 服務腳本使用手冊》2.1.2.2 1 &#xff0e;拷貝服務模板文件&#xff08; DmService &#xff09;到目錄&#xff08; /opt/dmdbms/bin &#xff09;&#xff0c;并將新文…

Pipeline模式詳解:提升程序處理效率的設計模式

文章目錄 Pipeline模式詳解&#xff1a;提升程序處理效率的設計模式引言Pipeline的基本概念Pipeline的工作原理Pipeline的優勢Pipeline的應用場景1. 數據處理2. DevOps中的CI/CD3. 機器學習4. 圖像處理 常見的Pipeline實現方式1. 函數式編程中的Pipeline2. 基于消息隊列的Pipel…

STM32單片機芯片與內部115 DSP-FIR IIR低通 高通 帶通 帶阻 中值 自適應 濾波器 逐個數據實時 樣條插值擬合

目錄 一、FIR 低通、高通、帶通、帶阻 1、FIR濾波器特點 2、濾波器結構 3、濾波器系數 4、濾波實現 5、FIR 濾波后的群延遲 二、IIR 低通、高通、帶通、帶阻 1、IIR濾波器特點 2、濾波器結構 3、濾波器系數 4、濾波實現 5、IIR濾波后的群延遲 三、中值濾波 1、中值…

C語言_圖書管理系統_借閱系統管理

?? 歡迎大家來到小傘的大講堂?? &#x1f388;&#x1f388;養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; 所屬專欄&#xff1a;數據結構與算法 小傘的主頁&#xff1a;xiaosan_blog 本文所需對順序表的理解&#xff1a; 注&#xff1a;由于順序表實現圖書…

表達式基礎

文章目錄 1、表達式組成1、運算符 2、表達式的分類1、算數運算符1、自增運算符和自減運算2、取余運算(%)3、除法運算(/)4、案例 2、關系運算符3、邏輯運算符4、條件運算符(三目運算符)1、案例 5、賦值運算()1、賦值類型轉換2、復合賦值運算 6、逗號運算7、取地址運算(&)8、…

除了合并接口,還有哪些優化 Flask API 的方法?

除了合并接口&#xff0c;還有許多其他方法可以優化 Flask API&#xff0c;以下從性能優化、代碼結構優化、安全性優化、錯誤處理優化等方面詳細介紹&#xff1a; 性能優化 1. 使用緩存 內存緩存&#xff1a;可以使用 Flask-Caching 擴展來實現內存緩存&#xff0c;減少對數…

Web服務器配置

配置虛擬主機 通過虛擬主機&#xff0c;可以實現用自定義的域名來訪問&#xff0c;并且可以為不同的域名指定不同的站點目錄。 配置IP地址和域名的映射關系 申請真實的域名需要一定的費用&#xff0c;為了方便開發&#xff0c;可以通過修改hosts文件來實現將任意域名解析到本…

爬蟲逆向實戰小記——解決webpack實記

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX網站實例僅作為學習案例&#xff0c;禁止其他個人以及團體做謀利用途&#xff01;&#xff01;&#xff01; aHR0cHM6Ly9wbW9zLnhqLnNnY2MuY29tLmNuOjIwMDgwL3B4Zi1zZXR0bGVtZW50LW91dG5ldHB1Yi8jL3B4Zi1zZXR0bGVtZW5…

藍橋杯 之 前綴和與查分

文章目錄 題目求和棋盤挖礦 前綴和有利于快速求解 區間的和、異或值 、乘積等情況差分是前綴和的反操作 前綴和 一維前綴和&#xff1a; # 原始的數組num,下標從1到n n len(num) pre [0]*(n1) for i in range(n):pre[i1] pre[i] num[i] # 如果需要求解num[l] 到num[r] 的區…

Windows10下本地搭建Manim環境

文章目錄 1. 簡介2. Python環境3. uv工具4. Latex軟件5. 安裝Manim數學庫6. 中文支持參考 1. 簡介 manim是個一科普動畫的庫&#xff0c; 本文用到的是社區版本。 2. Python環境 這個不用多說&#xff0c;可以參考其他的文章。記得把pip也安上。 3. uv工具 上面的pip是老…

#UVM# 關于field automation機制中的 pack_bytes 和unpack_bytes 函數剖析

一 pack_bytes 函數 在 UVM 中,pack_bytes 函數用于將類中的所有字段打包成一個字節流(byte stream)。這是 UVM 提供的字段自動化(field automation)機制的一部分,用于簡化數據打包和傳輸。 extern function int pack_bytes(ref byte unsigned bytestream[], input uv…

YOLOv8 自定義目標檢測

一、引言 YOLOv8 不僅支持預訓練模型的推理&#xff0c;還允許用戶將其應用于自定義對象檢測。本文將詳細介紹如何使用 YOLOv8 訓練一個新的模型&#xff0c;并在自定義數據集上進行對象檢測。 二、數據集準備 1. 數據集格式 YOLOv8 支持多種數據集格式&#xff0c;包括 CO…

關于tresos Studio(EB)的MCAL配置之GPT

概念 GPT&#xff0c;全稱General Purpose Timer&#xff0c;就是個通用定時器&#xff0c;取的名字奇怪了點。定時器是一定要的&#xff0c;要么提供給BSW去使用&#xff0c;要么提供給OS去使用。 配置 General GptDeinitApi控制接口Gpt_DeInit是否啟用 GptEnableDisable…

Dify 開源大語言模型應用開發平臺使用(一)

文章目錄 一、創建鋰電池專業知識解答應用1.1 應用初始化 二、核心功能模塊詳解2.1 知識庫構建2.2 工作流與節點編排節點類型說明工作流設計示例&#xff1a;鋰電池選型咨詢 2.3 變量管理 三、測試與調試3.1 單元測試3.2 壓力測試3.3 安全驗證 四、部署與優化建議4.1 部署配置4…

《Java基礎 聊天窗口案例:剖析 GUI、文件 I/O 等關鍵技術知識》

1. 面向對象編程 類與對象&#xff1a;代碼中定義了 Chat 類&#xff0c;它是整個程序的核心&#xff0c;封裝了與聊天窗口相關的屬性和方法。在 main 方法中創建了 Chat 類的對象&#xff0c;并調用其方法來完成相應的功能。繼承與多態&#xff1a;ButtonClickListener 類實現…

IDE集成開發環境MyEclipse中安裝SVN

打開Myeclipse的help菜單----install from site 點擊add彈出對話框 在輸入框中輸入對應內容 http://subclipse.tigris.org/update_1.10.x 點擊OK之后&#xff0c;會刷新出兩個選項&#xff0c;需要選中的 點擊next&#xff0c;出現許可的時候選中同意&#xff0c;一直結束等…

歸并排序:分治哲學的完美演繹與時空平衡的藝術

引言&#xff1a;跨越世紀的算法明珠 在計算機科學的璀璨星河中&#xff0c;歸并排序猶如一顆恒久閃耀的明星。1945年&#xff0c;現代計算機之父馮諾伊曼在EDVAC計算機的研發過程中首次系統性地提出了這一算法&#xff0c;其精妙的分治思想不僅奠定了現代排序算法的理論基礎&…

服務器CPU微架構

1、微架構圖 前端&#xff1a;預解碼、解碼、分支預測、L1指令緩存、指令TLB緩存 后端&#xff1a;順序重排緩存器ROB處理依賴&#xff0c;調度器送到執行引擎 執行引擎&#xff1a;8路超標量&#xff0c;每一路可以進行獨立的微操作處理 Port0、1、5、6支持整數、浮點數的加…