1. 程式人生 > >android log丟失(二)使用and4.4log kernel機制

android log丟失(二)使用and4.4log kernel機制

在之前一篇部落格我們是分析了logd丟失的原因,而且從增大logd緩衝區大小,以及增加白名單的方式臨時解決除錯問題。

這裡我們就如何回到android4.4的log機制來分析。

當然還有一種方式,在android4.4的時候是不使用logd的機制的。使用的是往記憶體檔案系統裡面寫log,寫入dev/log/main  dev/log/radio等log。我們可以改回之前的模式。需要打幾個補丁,這樣就不會有丟失log的情況(不會有類似chatty的log)。

kernel的話我們可以看看dev/log目錄下是否有main raidio等節點。如果有說明kernel是支援的,不需要打補丁了。只需改動system/core/liblog目錄  以及修改板卡目錄boardconfig.mk 還有selinux的許可權。具體如下:

1. system/core/liblog補丁

  1. From 1b078a205c4ba34e2eaf5c5b248967ea4c08fb2c Mon Sep 17 00:00:00 2001  
  2. From: Maria Yu <aiquny@codeaurora.org>
  3. Date: Wed, 23 Mar 2016 15:35:34 +0800  
  4. Subject: liblog: Fix compile error for using legacy kernel logger driver  
  5. Add log_event_write.c into liblog_sources file when using legacy  
  6. kernel logger driver. Add socket_local_client API in log_read_kern.  
  7. Fix the BIONIC define missing in logd_write_kern.  
  8. CRs-Fixed: 949708  
  9. Change-Id: If7a85e1d19fdd22581b6eb87096b39c2a700297e  
  10. ---  
  11.  liblog/Android.mk        |   2 +-  
  12.  liblog/log_read_kern.c   | 169 +++++++++++++++++++++++++++++++++++++++++++++--  
  13.  liblog/logd_write_kern.c |   6 +-  
  14.  3 files changed, 170 insertions(+), 7 deletions(-)  
  15. diff --git a/liblog/Android.mk b/liblog/Android.mk  
  16. index 115dd79..1f113c5 100644  
  17. --- a/liblog/Android.mk  
  18. +++ b/liblog/Android.mk  
  19. @@ -27,7 +27,7 @@  
  20.  ifneq ($(TARGET_USES_LOGD),false)  
  21.  liblog_sources :logd_write.c log_event_write.c  
  22.  else  
  23. -liblog_sources :logd_write_kern.c  
  24. +liblog_sources :logd_write_kern.c log_event_write.c  
  25.  endif  
  26.  # some files must not be compiled when building against Mingw  
  27. diff --git a/liblog/log_read_kern.c b/liblog/log_read_kern.c  
  28. index 69b405c..b1b9a26 100644  
  29. --- a/liblog/log_read_kern.c  
  30. +++ b/liblog/log_read_kern.c  
  31. @@ -1,5 +1,5 @@  
  32.  /*  
  33. -** Copyright 2013-2014, The Android Open Source Project  
  34. +** Copyright 2013-2014,2016 The Android Open Source Project  
  35.  **  
  36.  ** Licensed under the Apache License, Version 2.0 (the "License");  
  37.  ** you may not use this file except in compliance with the License.  
  38. @@ -27,6 +27,7 @@  
  39.  #include <cutils/list.h>
  40.  #include <log/log.h>
  41.  #include <log/logger.h>
  42. +#include <cutils/sockets.h>
  43.  #define __LOGGERIO     0xAE  
  44. @@ -37,16 +38,174 @@  
  45.  #define LOGGER_GET_VERSION         _IO(__LOGGERIO, 5) /* abi version */  
  46.  #define LOGGER_SET_VERSION         _IO(__LOGGERIO, 6) /* abi version */  
  47. -typedef char bool;  
  48. -#define false (const bool)0  
  49. -#define true (const bool)1  
  50. -  
  51.  #define LOG_FILE_DIR "/dev/log/"  
  52.  /* timeout in milliseconds */  
  53.  #define LOG_TIMEOUT_FLUSH 5  
  54.  #define LOG_TIMEOUT_NEVER -1  
  55. +/* branchless on many architectures. */  
  56. +#define min(x,y) ((y) ^ (((x) ^ (y)) & -((x) < (y))))  
  57. +  
  58. +#if (defined(USE_MINGW) || defined(HAVE_WINSOCK))  
  59. +#define WEAK static  
  60. +#else  
  61. +#define WEAK __attribute__((weak))  
  62. +#endif  
  63. +#ifndef __unused  
  64. +#define __unused __attribute__((unused))  
  65. +#endif  
  66. +  
  67. +/* Private copy of ../libcutils/socket_local_client.c prevent library loops */  
  68. +  
  69. +#ifdef HAVE_WINSOCK  
  70. +  
  71. +int WEAK socket_local_client(const char *name, int namespaceId, int type)  
  72. +{  
  73. +    errno = ENOSYS;  
  74. +    return -ENOSYS;  
  75. +}  
  76. +  
  77. +#else /* !HAVE_WINSOCK */  
  78. +  
  79. +#include <sys/socket.h>
  80. +#include <sys/un.h>
  81. +#include <sys/select.h>
  82. +#include <sys/types.h>
  83. +  
  84. +/* Private copy of ../libcutils/socket_local.h prevent library loops */  
  85. +#define FILESYSTEM_SOCKET_PREFIX "/tmp/"  
  86. +#define ANDROID_RESERVED_SOCKET_PREFIX "/dev/socket/"  
  87. +/* End of ../libcutils/socket_local.h */  
  88. +  
  89. +#define LISTEN_BACKLOG 4  
  90. +  
  91. +/* Documented in header file. */  
  92. +int WEAK socket_make_sockaddr_un(const char *name, int namespaceId,  
  93. +                                 struct sockaddr_un *p_addr, socklen_t *alen)  
  94. +{  
  95. +    memset (p_addr, 0, sizeof (*p_addr));  
  96. +    size_t namelen;  
  97. +  
  98. +    switch (namespaceId) {  
  99. +    case ANDROID_SOCKET_NAMESPACE_ABSTRACT:  
  100. +#if defined(__linux__)  
  101. +        namelen  = strlen(name);  
  102. +  
  103. +        /* Test with length +1 for the *initial* '\0'. */  
  104. +        if ((namelen + 1) > sizeof(p_addr->sun_path)) {  
  105. +            goto error;  
  106. +        }  
  107. +  
  108. +        /*  
  109. +         * Note: The path in this case is *not* supposed to be  
  110. +         * '\0'-terminated. ("man 7 unix" for the gory details.)  
  111. +         */  
  112. +  
  113. +        p_addr->sun_path[0] = 0;  
  114. +        memcpy(p_addr->sun_path + 1, name, namelen);  
  115. +#else  
  116. +        /* this OS doesn't have the Linux abstract namespace */  
  117. +  
  118. +        namelen = strlen(name) + strlen(FILESYSTEM_SOCKET_PREFIX);  
  119. +        /* unix_path_max appears to be missing on linux */  
  120. +        if (namelen > sizeof(*p_addr)  
  121. +                - offsetof(struct sockaddr_un, sun_path) - 1) {  
  122. +            goto error;  
  123. +        }  
  124. +  
  125. +        strcpy(p_addr->sun_path, FILESYSTEM_SOCKET_PREFIX);  
  126. +        strcat(p_addr->

    相關推薦

    android log丟失使用and4.4log kernel機制

    在之前一篇部落格我們是分析了logd丟失的原因,而且從增大logd緩衝區大小,以及增加白名單的方式臨時解決除錯問題。 這裡我們就如何回到android4.4的log機制來分析。 當然還有一種方式,在android4.4的時候是不使用logd的機制的。使用的

    android事件分發

    sim tdi p s oat front rac ram addclass framework 非常早之前寫過一篇android事件分發的博客,主要寫的是它是怎樣分發的,具體非常多原理的東西都沒有涉及到。今天就從源代碼看android怎樣控制它的分發機

    Android之Intent

    Android Intent 前一篇(Android之Intent(一))講解過A(它用來調起B界面,這裏先理解為父界面) 可以向B(這裏先理解為子界面), 本篇正好是一個逆反的過程 , 即B向A傳遞數據。 一 : 界面設計① ,A(activity_main.xml)重要控件:1‘ (TextVie

    Android NDK學習:編譯腳本語法Android.mk和Application.mk

    GC make files 文件的 包括 一次 opengl aries 基本語法 一、Android.mk Android.mk分為一下幾部分: LOCAL_PATH:= $(call my-dir), 返回當前文件在系統中的路徑,Android.mk文件開始時必須定義

    Android Camera2 拍照——使用TextureView

    wid metadata TE 遍歷 接口 post eating connected edit 原文:Android Camera2 拍照(二)——使用TextureView

    Android 開發:安卓常用5大布局方式

    一、Android中常用的5大布局方式有以下幾種: 1.線性佈局(LinearLayout):按照垂直或者水平方向佈局的元件; 2.幀佈局(FrameLayout) :元件從螢幕左上方(0,0)佈局元件; 3.相對佈局 (RelativeLayout) :相對其它元件的佈

    Android輸入系統IMS的啟動過程和輸入事件的處理

    本文首發於 劉望舒的部落格 地址:liuwangshu.cn/framework/i… 關聯絡列 解析WMS系列 深入理解JNI系列 輸入系統系列 前言 在上一篇文章中,我們學習了IMS的誕生(建立),IMS建立後還會進行啟動,這篇文章我們來學習IMS的啟動過程和輸入事件的處理。 1.IMS

    android之animationanimationset、interpolator

    一: animationset: 他是一個animation的一個子類,實際上是animation的一個集合。他將animation放到一個list集合中。需要對animation的基本設定可以通過animationset來設定。如果需要對一個控制元件進行多種動畫設定,可以採用animat

    Android學習心得

    Android儲存方式 儲存偏好設定 持久化資料:使應用程式執行時需要長期儲存一些資料。 SharePreferences物件、檔案和 SQLite資料庫來儲存這些持久化資料 存取活動的偏好設定 SharePreferences類屬於Android.cntent

    android 之動畫 插值器

    插值器 首先要了解為什麼需要插值器,因為在補間動畫中,我們一般只定義關鍵幀(首幀或尾幀),然後由系統自動生成中間幀,生成中間幀的這個過程可以成為“插值”。插值器定義了動畫變化的速率,提供不同的函式定義變化值相對於時間的變化規則,可以定義各種各樣的非線性變化函式,比如加速、減速等。下面是幾種常

    Android進階: 應用程序啟動過程

    1.前言 最近一直在看 《Android進階解密》 的一本書,這本書編寫邏輯、流程都非常好,而且很容易看懂,非常推薦大家去看看(沒有收廣告費,單純覺得作者寫的很好)。 今天就將 應用程序啟動過程 總結一下(基於Android 8.0 系統)。 文章中例項&nbs

    每日一記—獲取Bing每一日一圖實現Android歡迎頁

    日期2018.9.12 第二部分:獲取bing每日一圖 通過訪問   http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=5&mkt=zh-CN  可以得到一組json資料,如下:

    egret 釋出android原生專案執行專案

    一、編譯Demo專案 在終端定位到Demo目錄,執行如下命令 egret build -e  (-e 編譯指定專案的同時編譯引擎目錄) 在瀏覽器訪問http://10.0.0.237/demo/index.html(10.0.0.237為本地ip地址) 二、Androi

    Android學習筆記

    1.Android的APK瘦身方法 在這裡給大家推薦一個網站,關於圖片線上壓縮的TinyPNG,然後使用android studio自帶工具Lint剔除無用資源(res資原始檔),如果你閒的話那就再手

    Android開發筆記顏色的使用

    顏色的編碼 Android中顏色值的定義是由透明度alpha和RGB(紅綠藍)三原色來定義的,有八位十六進位制數與六位十六進位制數兩種編碼,例如八位FFE

    床頭筆記之Android開發學習

    安卓Android開發環境搭建 之前用Android studio環境搭建,發現因為初學不熟,後面裝的東西太多了,電腦本身就卡,被我直接全卸了,打算用另一種簡單用得比較多的環境先入手。 本次用Eclipse、JDK、Android SDK、ADT外掛、安卓模擬器

    android記錄筆記針對應用框架層梳理的整合筆記

    這篇筆記主要是結合自我認知,加上各種學習資源,整理而成的查詢筆記,整理的不好,還望指出錯誤,主要是用於查詢與記錄,該篇筆記大多借鑑劉望舒的部落格,對大佬致敬哈,我也是你忠實的粉絲,如有冒犯,請見諒,我將立即刪除本篇文章。 針對應用框架層我認為必須要清楚的知識概念: 第一:

    Android FrameWork學習Android系統原始碼除錯

    為了更進一步地學習跟研究 Android 系統原始碼,今天我們來講講如何進行 Android 系統原始碼的除錯,只有學會了如何進行系統原始碼的除錯,才能幫助我們更高效地閱讀跟理解原始碼。 我們知道,Android Framework 的程式碼主要由Java、C\

    Android學習碎片——如何從本地圖片獲得Bitmap例項

    準備學習Bitmap相關知識,於是先學習下怎麼從本地圖片獲得Bitmap例項。 第一種方法: //獲取本地圖片Bitmap例項的第一種方法 Resources resources

    Android Firebase接入--Firebase 動態連結Dynamic Links

    動態連結簡介生成一個根據不同的場景響應不同行為的連結。比如:你想要為app新增一個房間內邀請好友的功能,如果好友也安裝了此app,點選分享連結就進入此房間,如果好友沒有安裝此app,那就跳轉到Google Play下載頁面(或者你自定義的任何頁面),如果好友沒有安裝此app,