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補丁
- From 1b078a205c4ba34e2eaf5c5b248967ea4c08fb2c Mon Sep 17 00:00:00 2001
- From: Maria Yu <aiquny@codeaurora.org>
- Date: Wed, 23 Mar 2016 15:35:34 +0800
- Subject: liblog: Fix compile error for using legacy kernel logger driver
-
Add log_event_write.c into liblog_sources file when using legacy
- kernel logger driver. Add socket_local_client API in log_read_kern.
- Fix the BIONIC define missing in logd_write_kern.
- CRs-Fixed: 949708
- Change-Id: If7a85e1d19fdd22581b6eb87096b39c2a700297e
- ---
- liblog/Android.mk | 2 +-
-
liblog/log_read_kern.c | 169 +++++++++++++++++++++++++++++++++++++++++++++--
- liblog/logd_write_kern.c | 6 +-
- 3 files changed, 170 insertions(+), 7 deletions(-)
- diff --git a/liblog/Android.mk b/liblog/Android.mk
- index 115dd79..1f113c5 100644
- --- a/liblog/Android.mk
- +++ b/liblog/Android.mk
- @@ -27,7 +27,7 @@
- ifneq ($(TARGET_USES_LOGD),false)
- liblog_sources := logd_write.c log_event_write.c
- else
- -liblog_sources := logd_write_kern.c
- +liblog_sources := logd_write_kern.c log_event_write.c
- endif
- # some files must not be compiled when building against Mingw
- diff --git a/liblog/log_read_kern.c b/liblog/log_read_kern.c
- index 69b405c..b1b9a26 100644
- --- a/liblog/log_read_kern.c
- +++ b/liblog/log_read_kern.c
- @@ -1,5 +1,5 @@
- /*
- -** Copyright 2013-2014, The Android Open Source Project
- +** Copyright 2013-2014,2016 The Android Open Source Project
- **
- ** Licensed under the Apache License, Version 2.0 (the "License");
- ** you may not use this file except in compliance with the License.
- @@ -27,6 +27,7 @@
- #include <cutils/list.h>
- #include <log/log.h>
- #include <log/logger.h>
- +#include <cutils/sockets.h>
- #define __LOGGERIO 0xAE
- @@ -37,16 +38,174 @@
- #define LOGGER_GET_VERSION _IO(__LOGGERIO, 5) /* abi version */
- #define LOGGER_SET_VERSION _IO(__LOGGERIO, 6) /* abi version */
- -typedef char bool;
- -#define false (const bool)0
- -#define true (const bool)1
- -
- #define LOG_FILE_DIR "/dev/log/"
- /* timeout in milliseconds */
- #define LOG_TIMEOUT_FLUSH 5
- #define LOG_TIMEOUT_NEVER -1
- +/* branchless on many architectures. */
- +#define min(x,y) ((y) ^ (((x) ^ (y)) & -((x) < (y))))
- +
- +#if (defined(USE_MINGW) || defined(HAVE_WINSOCK))
- +#define WEAK static
- +#else
- +#define WEAK __attribute__((weak))
- +#endif
- +#ifndef __unused
- +#define __unused __attribute__((unused))
- +#endif
- +
- +/* Private copy of ../libcutils/socket_local_client.c prevent library loops */
- +
- +#ifdef HAVE_WINSOCK
- +
- +int WEAK socket_local_client(const char *name, int namespaceId, int type)
- +{
- + errno = ENOSYS;
- + return -ENOSYS;
- +}
- +
- +#else /* !HAVE_WINSOCK */
- +
- +#include <sys/socket.h>
- +#include <sys/un.h>
- +#include <sys/select.h>
- +#include <sys/types.h>
- +
- +/* Private copy of ../libcutils/socket_local.h prevent library loops */
- +#define FILESYSTEM_SOCKET_PREFIX "/tmp/"
- +#define ANDROID_RESERVED_SOCKET_PREFIX "/dev/socket/"
- +/* End of ../libcutils/socket_local.h */
- +
- +#define LISTEN_BACKLOG 4
- +
- +/* Documented in header file. */
- +int WEAK socket_make_sockaddr_un(const char *name, int namespaceId,
- + struct sockaddr_un *p_addr, socklen_t *alen)
- +{
- + memset (p_addr, 0, sizeof (*p_addr));
- + size_t namelen;
- +
- + switch (namespaceId) {
- + case ANDROID_SOCKET_NAMESPACE_ABSTRACT:
- +#if defined(__linux__)
- + namelen = strlen(name);
- +
- + /* Test with length +1 for the *initial* '\0'. */
- + if ((namelen + 1) > sizeof(p_addr->sun_path)) {
- + goto error;
- + }
- +
- + /*
- + * Note: The path in this case is *not* supposed to be
- + * '\0'-terminated. ("man 7 unix" for the gory details.)
- + */
- +
- + p_addr->sun_path[0] = 0;
- + memcpy(p_addr->sun_path + 1, name, namelen);
- +#else
- + /* this OS doesn't have the Linux abstract namespace */
- +
- + namelen = strlen(name) + strlen(FILESYSTEM_SOCKET_PREFIX);
- + /* unix_path_max appears to be missing on linux */
- + if (namelen > sizeof(*p_addr)
- + - offsetof(struct sockaddr_un, sun_path) - 1) {
- + goto error;
- + }
- +
- + strcpy(p_addr->sun_path, FILESYSTEM_SOCKET_PREFIX);
-
+ 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之animation(二)animationset、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,