android note

1.重要的property属性

 #define ANDROID_RB_PROPERTY "sys.powerctl"  // 控制启动状态
 property_set(ANDROID_RB_PROPERTY, "shutdown,");
 property_set(ANDROID_RB_PROPERTY, "reboot,bootloader");
 property_set(ANDROID_RB_PROPERTY, "reboot,");
 property_set(ANDROID_RB_PROPERTY, "reboot,edl");

1
2
3
4
5
6
2.propety属性的管理

init.c

   if (is_charger)
        {
                action_for_each_trigger("charger", action_add_queue_tail);
        }
        else
        {
                if (is_ffbm)
                {
                         action_for_each_trigger("ffbm", action_add_queue_tail);
                }
                else
                {
                        // 正常开机模式进入最后的 late-init 阶段
                        action_for_each_trigger("late-init", action_add_queue_tail);
                }
        }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
init.rc

on late-init
     trigger load_all_props_action  // 在late-init阶段加载所有的属性

----------

on load_all_props_action
    load_all_props
1
2
3
4
5
6
7
keywords.h property_service.c

    KEYWORD(load_all_props,  COMMAND, 0, do_load_all_props)        //keywords.h
                                            -> do_load_all_props   // builtins.c
                                                ->load_all_props   // property_service.c
                                                    // 依次从下面几个路径中加载所有的属性
                                                    "system/build.prop"  (常用)
                                                    "system/default.prop"
                                                    
1
2
3
4
5
6
7
build/tools/buildinfo.sh

☆ 生成 system/build.prop 文件,需要添加prop只需要在这个编译脚本中添加即可!!!

in system/build.prop

# begin build properties
  3 # autogenerated by buildinfo.sh
  4 ro.build.id=LMY47V
  5 ro.build.display.id=LMY47V.WW_Phone.12.0.0.020-20160719_userdebug
  6 ro.build.display.wtid=LMY47V.WW_Ph
1
2
3
4
5
6
7
// device/qcom/msm89xx/xxx_8937.mk
PRODUCT_PROPERTY_OVERRIDES += \
    persist.sys.exttable=1

1
2
3
4
3.属性值的获取设置

1. 在system.prop里面添加需要使用的系统属性,添加完后需要编译生成system.img

2. 在native层,使用property_set(...)和property_get(...)来存取系统属性

3. 在Java层, 使用SystemProperties.set(...)和SystemProperties.get(...)来存取系统属性

4. 在adb shell命令行,使用getprop和setprop来存取系统属性
1
2
3
4
5
6
7
3.charger

# init.rc
on charger
    class_start charger


----------


# init.qcom.rc
service charger /charger
    class charger


----------


#system/core/healthd/Android.mk 

LOCAL_MODULE := healthd
...
# Symlink /charger to /sbin/healthd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
4.屏幕截图 & 屏幕录制

adb shell screencap /sdcard/test.png
adb shell screenrecord  sdcard/sss.mp4
1
2
5.关闭selinux

setenforce 0
1
6.adb devices 串号

(1)init.rc

 write /sys/class/android_usb/android0/iSerial ${ro.serialno}

                                         
1
2
3
(2)cat /pro/cmdline

adb root;adb shell cat /proc/cmdline

androidboot.serialno=YOGABOOK12 
1
(3)init.cpp


process_kernel_cmdline
  ->import_kernel_cmdline(false, import_kernel_nv);
   ->import_kernel_nv
 


----------


    char *value = strchr(name, '=');
    (!strncmp(name, "androidboot.", 12) && name_len > 12) {
        char *boot_prop_name = name + 12;
        char prop[PROP_NAME_MAX];
        snprintf(prop, sizeof(prop), "ro.boot.%s", boot_prop_name);
           property_set(prop, value);
           } 


----------


           
static void export_kernel_boot_props() {
    struct {
        const char *src_prop;
        const char *dst_prop;
        const char *default_value;
    } prop_map[] = {
        ...
        { "ro.boot.serialno",   "ro.serialno",   "", },
        ...
    };
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
7.system/bin/input 命令

demo

 input keyevent   keycodeNum    //4 表示KEYCODE_BACK
1
常用的几种事件:

//键值对应 android/keycodes.h
26 --> KEYCODE_POWER         // 电源 
82 -->  "KEYCODE_MENU"       //菜单
3 -->  "KEYCODE_HOME"        //返回home
4 -->  "KEYCODE_BACK"        //返回上一级菜单
19 -->  "KEYCODE_DPAD_UP"            //向上
20 -->  "KEYCODE_DPAD_DOWN"        //向下
21 -->  "KEYCODE_DPAD_LEFT"        //向左
22 -->  "KEYCODE_DPAD_RIGHT"        //向右
24 -->  "KEYCODE_VOLUME_UP"        //音量加
25 -->  "KEYCODE_VOLUME_DOWN"    //音量减
66 -->  "KEYCODE_ENTER"        //确定键
1
2
3
4
5
6
7
8
9
10
11
12
重新挂载某个分区
mount -o remount,rw system system
1
9.命令行查看分辨率

frameworks/base/cmds/wm/

窗口分辨率

wm size

10.android init阶段 bootanimation之前的一张启动画面

// 在init.c中通过 “console_init” 这个action触发
    queue_builtin_action(console_init_action, "console_init");

1
2
3
11.aplog

1.位置

/data/logs/aplog.n
data/local/log/aplog
1
2
2.crash信息

//logs\crashlog0_72612f74d4e263a53665\crashfile 中表明了crash原因

EVENT=CRASH
ID=61c96fdba2162a052323
SN=4cca94f595db403f749622792dfe73a6167ded48
DATE=2016-10-08/08:09:56  
UPTIME=0000:00:19
BUILD=YB-Q501L_USR_S000014_1610010228_WW12_ROW,Lenovo/yogi_12_row_lte/YOGABOOK12:6.0.1/MMB29M/1610010228:user/release-keys,3.14.55-x86_64,queen@fyy-SMBIOSfyy,unknown,YOGI.T2000AH.V015,,,,
BOARD=Lenovo YB-Q501L
IMEI=
TYPE=SWWDT_UNHANDLED  // crash 类型 看门狗
DATA_READY=1
OPERATOR=UNKNOWN
DATA0=SWWDT_RESET //
_END


----------
EVENT=CRASH
ID=72612f74d4e263a53665
SN=7f406c2f2e2675c73a5a85d52a237d80f747c2ea
DATE=2016-10-07/21:23:08  
UPTIME=0000:00:22
BUILD=YB-Q501L_USR_S000014_1610010228_WW12_ROW,Lenovo/yogi_12_row_lte/YOGABOOK12:6.0.1/MMB29M/1610010228:user/release-keys,3.14.55-x86_64,queen@fyy-SMBIOSfyy,unknown,YOGI.T2000AH.V015,,,,
BOARD=Lenovo YB-Q501L
IMEI=
TYPE=IPANIC    // // crash 类型 kernel panic
DATA_READY=1
OPERATOR=UNKNOWN
_END


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
3. " BUG: "

搜索“ BUG: ”会有栈回溯或者null point信息
1
2.kernel启动信息/重启信息

beginning of kernel
10-07 21:22:46.780 0 0 I KERNEL : [ 0.000000] Initializing cgroup subsys cpuset
10-07 21:22:46.780 0 0 I KERNEL : [ 0.000000] Initializing cgroup subsys cpu
10-07 21:22:46.780 0 0 I KERNEL : [ 0.000000] Initializing cgroup subsys cpuacct
10-07 21:22:46.780 0 0 I KERNEL : [ 0.000000] Linux version 3.14.55-x86_64 (queen@fyy-SMBIOSfyy) (gcc version 4.9.2 (GCC) ) #1 SMP PREEMPT Sat Oct 1 03:04:35 CST 2016
10-07 21:22:46.780 0 0 I KERNEL : [ 0.000000] Command line: androidboot.bootloader=yogi_t2000ah_v015_kernelflinger-02_1f androidboot.diskbus=10.0 androidboot.verifiedbootstate=green androidboot.bootreason=kernel_panic androidboot.mode=0 :

指定工程的 .config
KERNEL_DEFCONFIG

device/intel/cherrytrail/cht_ffd/AndroidBoard.mk

Android.mk中添加打印
 $(warning "print info")
1
14.U盘插入拔出打印

1.mountservice 完整流程

     MountService: Volume public:8,1 broadcasting checking to UserHandle{0}  // 插入后检测挂载
     MountService: Volume public:8,1 broadcasting mounted to UserHandle{0}
     MountService: Volume public:8,1 broadcasting ejecting to UserHandle{0}  // 点击弹出umount
     MountService: Volume public:8,1 broadcasting unmounted to UserHandle{0}
     MountService: Volume public:8,1 broadcasting removed to UserHandle{0}    // 拔出U盘


    


1
2
3
4
5
6
7
8
9
10
11
12
2.kernelU盘插入拔出kernel打印


 usb 2-1: new SuperSpeed USB device number 2 using xhci_hcd       // 插上
 30375936 512-byte logical blocks: (15.5 GB/14.4 GiB)              // 读取大小
 USB disconnect, device number                                      // 拔出    
1
2
3
4
15.U盘插入拔出mount/umount代码流程

1.监听subsystem为block 的uevent事件

    NetlinkHandler::onEvent
        VolumeManager::handleBlockEvent
            case add:
                Disk::create   // disk.cpp
                      disk::readMetadata();
                      disk::readPartitions();
                      notifyEvent(ResponseCode::DiskCreated, StringPrintf("%d", mFlags));
            case chager:
                  disk::readMetadata();
                  disk::readPartitions();
          
            case remove:
                Disk::destroy()
                    destroyAllVolumes();
                    notifyEvent(ResponseCode::DiskDestroyed);
                


                    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2.发送广播


    
    Disk::notifyEvent
             VolumeManager::Instance()->getBroadcaster()->sendBroadcast
                         


                    
1
2
3
4
5
6
7
8
3.mountService接收来着vold的广播

     
    MountService.onEvent
        MountService.onEventLocked
            case VoldResponseCode.VOLUME_STATE_CHANGED:  //每一次状态的改变都会调用这个分支
                    onVolumeStateChangedLocked(vol, oldState, newState);  // 状态改变做相应操作
                        mHandler.obtainMessage(H_VOLUME_BROADCAST, userVol).sendToTarget();  // mountService发广播给mountService

                    
                        
1
2
3
4
5
6
7
8
9
3.mountService接收来着mountService的广播


MountServiceHandler.handleMessage  //接收广播

    case H_VOLUME_MOUNT:          // 挂载
        mConnector.execute("volume", "mount", vol.id, vol.mountFlags,vol.mountUserId);
    
    case H_VOLUME_BROADCAST:      // 发送广播给用户告知状态
        Slog.d(TAG, "Volume " + userVol.getId() + " broadcasting " + envState + " to "+ userVol.getOwner());
        mContext.sendBroadcastAsUser(intent, userVol.getOwner());   
                        
1
2
3
4
5
6
7
8
9
10
16.查看android分区及dd命令烧写分区

#ls /dev/block/by-name/
    android_boot
    android_bootloader
    android_bootloader2
    android_cache
    android_config
    android_data
    android_factory
    android_metadata
    android_misc
    android_persistent
    android_recovery
    android_system

----------


push boot.img到及机子的任意目录,在此目录执行 ,dd if=boot.img of=/dev/block/by-name/android_boot,重启之后,boot.img烧写成功.其他分区也类似.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
17.android 各层次获取时间的方法

1. 在Java层,long now = SystemClock.uptimeMillis();

2. 在native层,nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);

3. 在驱动层,s64 time = ktime_to_us(ktime_get());
1
2
3
4
5
18.android 分区大小设置

vendor/qcom/non-hlos/MSM8953.LA.2.0/common/config/partition.xml
device/qcom/xxx_8937/BoardConfig.mk
1
2
19.android framwork打印调用栈

// c++ 代码
#include <utils/CallStack.h>  
...  
CallStack stack;  
stack.update();  
stack.dump();


----------


// java 代码
Log.d(TAG,Log.getStackTraceString(new Throwable()));  
1
2
3
4
5
6
7
8
9
10
11
12
13
20.快速编译打包bootimage和system

make kernel:只重新编译kernel部分镜像,但是不会打包更新boot.img
make bootimage-nodeps:不会编译kernel以及ramdisk,只会将out目录中现有的kernel和ramdisk.img重新打包一次生成boot.img
make ramdisk:只重新编译ramdisk镜像,生成ramdisk.img,但是不会打包更新boot.img
make ramdisk-nodeps:不会编译ramdisk,只会将out目录中现有的文件重新打包一次。out/target/product/hq6737t_66_1ha_m0/root,比如更改了init..rc之类的文件,只需要修改out/…/root/中对应的文件,然后重新用此命令打包一次,就会生成一个包含更改过init..rc的ramdisk.img
make snod:打包system

21.modern

./mk johnson-eng update-none-hlos.bin

vendor/qcom/non-hlos/MSM8953.LA.2.0/common/build/bin/asic/NON-HLOS.bin
1
2
3
22.Qcom 开机后继续打印串口log

主要是修改 persist.console.silent.config 属性,
           persist.console.silent.config = 1是不打印,
           persist.console.silent.config = 0继续打印。
   修改的文件,
 将手机中的build.prop导出, 直接修改,再push进去;
修改 device/qcom/msmXXX/system.prop,编译systemimage。
1
2
3
4
5
6
23.关闭selinux


when build, open the CONFIG_SECURITY_SELINUX_DEVELOP, add then append the " androidboot.selinux=permissive" in commandline.

or in device/qcom/msmxxxx/system.prop, add ro.boot.selinux=disable
1
2
3
4
24.sbl检测电池是否在位

Non-HOLS/BOOT.BF.3.3/boot_images/core/systemdrivers/pmic/app/chg/src/pm_app_smbchg.c 里有个检测电池在不在的函数,Check Battery presence
1
25.charge log mask

qpnp-smbcharger.c:
+ #define DEBUG
- static int smbchg_debug_mask;
+ static int smbchg_debug_mask = 0xFF; 
1
2
3
4
26.各模块JNI层代码

26.1 surfaceflinger

android_view_Surface.cpp
static const JNINativeMethod gSurfaceMethods[] = {


demo
SurfaceTest.cpp
1
2
3
4
5
6
27.input keyevent 命令

对应的键值 frameworks/native/include/android/keycodes.h

$adb shell input keyevent 26            // power

$adb shell input keyevent 4            //模拟返回键(BACK)

$adb shell input keyevent 82          //模拟菜单键(MENU)

$adb shell input keyevent 3            //模拟主页键(HOME)
1
2
3
4
5
6
7
28.inpudispatch中添加tp报点

--- a/frameworks/native/services/inputflinger/InputDispatcher.cpp
+++ b/frameworks/native/services/inputflinger/InputDispatcher.cpp
@@ -2483,15 +2483,16 @@ bool InputDispatcher::shouldSendKeyToInputFilterLocked(const NotifyKeyArgs* args
 }
 
 void InputDispatcher::notifyMotion(const NotifyMotionArgs* args) {
-#if DEBUG_INBOUND_EVENT_DETAILS
-    ALOGD("notifyMotion - eventTime=%lld, deviceId=%d, source=0x%x, policyFlags=0x%x, "
+       ALOGE("zch----in notifyMotion");
+#if 1
+    ALOGE("notifyMotion - eventTime=%lld, deviceId=%d, source=0x%x, policyFlags=0x%x, "
             "action=0x%x, actionButton=0x%x, flags=0x%x, metaState=0x%x, buttonState=0x%x,"
             "edgeFlags=0x%x, xPrecision=%f, yPrecision=%f, downTime=%lld",
             args->eventTime, args->deviceId, args->source, args->policyFlags,
             args->action, args->actionButton, args->flags, args->metaState, args->buttonState,
             args->edgeFlags, args->xPrecision, args->yPrecision, args->downTime);
     for (uint32_t i = 0; i < args->pointerCount; i++) {
-        ALOGD("  Pointer %d: id=%d, toolType=%d, "
+        ALOGE("  Pointer %d: id=%d, toolType=%d, "
                 "x=%f, y=%f, pressure=%f, size=%f, "
                 "touchMajor=%f, touchMinor=%f, toolMajor=%f, toolMinor=%f, "
                 "orientation=%f",

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
29.wifi连接adb

1. 在目标板上通过使用以太网连接来配置adb守护进程,使用setprop来设置守护进程的端口号
     # setprop service.adb.tcp.port 5555

2. 如果以上配置成功,再重启目标板上的adbd服务
     # stop adbd
     # start adbd

3. 在主机端使用如下命令建立adb连接
     export ADBHOST=<target's ip address>
     adb kill-server
     adb start-server
     adb connect <target_ip_address>:5555

4. 使用如下命令确认设备连接成功
     adb devices
    设备连接成功后将出现设备序列号和名称
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
30.ramdump开关

diff --git a/kernel/msm-3.18/drivers/power/reset/msm-poweroff.c b/kernel/msm-3.18/drivers/power/reset/msm-poweroff.c
index ee3e72b..98521a0 100644
--- a/kernel/msm-3.18/drivers/power/reset/msm-poweroff.c
+++ b/kernel/msm-3.18/drivers/power/reset/msm-poweroff.c
@@ -488,6 +488,51 @@ static struct attribute_group reset_attr_group = {
 };
 #endif
 
+
+
+
+static ssize_t show_ramdump(struct kobject *kobj, struct attribute *attr,
+                char *buf)
+{
+    return snprintf(buf, sizeof(download_mode), "%u\n", download_mode);
+
+}
+
+static size_t store_ramdump(struct kobject *kobj, struct attribute *attr,
+                const char *buf, size_t count)
+{
+    uint32_t enabled;
+    int ret;
+    ret = kstrtouint(buf, 0, &enabled);
+     if( download_mode != enabled)
+      {
+         download_mode = enabled;
+         set_dload_mode(download_mode);
+
+     }
+    return count;
+
+}
+
+
+
+RESET_ATTR(enable_ramdump, 0644, show_ramdump, store_ramdump);
+
+
+static struct attribute *ramdump_attrs[] = {
+    &reset_attr_enable_ramdump.attr,
+    NULL
+};
+
+
+
+static struct attribute_group ramdump_attr_group = {
+    .attrs = ramdump_attrs,
+};
+
+
+
+
 static int msm_restart_probe(struct platform_device *pdev)
 {
     struct device *dev = &pdev->dev;
@@ -544,6 +589,12 @@ static int msm_restart_probe(struct platform_device *pdev)
         pr_err("%s:Error in creation sysfs_create_group\n", __func__);
         kobject_del(&dload_kobj);
     }
+
+       ret = sysfs_create_group(&dload_kobj, &ramdump_attr_group);
+    if (ret) {
+        pr_err("%s:Error in creation sysfs_create_group\n", __func__);
+        kobject_del(&dload_kobj);
+    }
 skip_sysfs_create:
 #endif
     np = of_find_compatible_node(NULL, NULL,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
31.qcom单编boot后wifi不能用

diff --git a/arch/arm/configs/msm8937-perf_defconfig b/arch/arm/configs/msm8937-perf_defconfig
index 546ab81..02730eb 100644
--- a/arch/arm/configs/msm8937-perf_defconfig
+++ b/arch/arm/configs/msm8937-perf_defconfig
@@ -1,5 +1,4 @@
 CONFIG_EARLY_IOREMAP=y
-CONFIG_LOCALVERSION="-perf"
 CONFIG_AUDIT=y
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
@@ -33,10 +32,6 @@ CONFIG_ARCH_MMAP_RND_BITS=16
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-CONFIG_MODULE_SIG=y
-CONFIG_MODULE_SIG_FORCE=y
-CONFIG_MODULE_SIG_SHA512=y
 CONFIG_PARTITION_ADVANCED=y
 CONFIG_ARCH_MSM=y
 CONFIG_ARCH_MSM8916=y
diff --git a/arch/arm/configs/msm8937_defconfig b/arch/arm/configs/msm8937_defconfig
index 1f5b851..c8d3b37 100644
--- a/arch/arm/configs/msm8937_defconfig
+++ b/arch/arm/configs/msm8937_defconfig
@@ -34,10 +34,6 @@ CONFIG_ARCH_MMAP_RND_BITS=16
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-CONFIG_MODULE_SIG=y
-CONFIG_MODULE_SIG_FORCE=y
-CONFIG_MODULE_SIG_SHA512=y
 CONFIG_PARTITION_ADVANCED=y
 CONFIG_ARCH_MSM=y
 CONFIG_ARCH_MSM8916=y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/work2/sku6_8.1/vendor/qcom/opensource/wlan/prima

32 secureboot 签名

cd None-HLOS/MSM8937.LA.3.0/common/sectools
python sectools.py secimage -i  xxx.mbn    -c .\config\8937\8937_secimage.xml -sa


1
2
3
4
// 8937_secimage.xml 中包含了需要签名的分区,且指定了签名的key

 <general_properties>
 。。。
        <selected_cert_config>xxxxx_certs</selected_cert_config>
。。。
1
2
3
4
//签名使用的key的目录


MSM8937.LA.3.0.1/common/sectools/resources/data_prov_assets/Signing/Local/xx_certskey2048_exp65537
1
2
33 fastboot unlock


#fastboot getvar secret-key-opt 2>&1
    secret-key-opt: 17425620170519
    finished. total time: 0.002s

    echo 17425620170519 > default_key.bin
    fastboot flash frp-unlock default_key.bin
    fastboot flashing unlock
    fastboot flashing unlock_critical
1
2
3
4
5
6
7
8
9
helathd 打开adb
=================
on charger
    wait /dev/block/bootdevice/by-name/system
    mount ext4 /dev/block/bootdevice/by-name/system /system ro barrier=1
    load_all_props
    setprop sys.usb.configfs 0
    setprop persist.sys.usb.config adb
    start qcom-post-boot
    setprop persist.sys.usb.config adb
    start hvdcp_opti
1
2
3
4
5
6
7
8
9
framworj/base/core/res/res/values/config.xml 配置
===================================================
// 亮度变化响应时间
config_autoBrightnessBrighteningLightDebounce     
config_autoBrightnessDarkeningLightDebounce


//最小亮度、默认亮度
config_screenBrightnessSettingMinimum
config_screenBrightnessSettingDefault
1
2
3
4
5
6
7
8
36.sbl1 battery status check

// boot_images/core/systemdrivers/pmic/target/msm8937_pm8937_pmi8937/system/src/pm_sbl_boot.c
pm_sbl_chg_init (void)
{
        err_flag |= pm_sbl_chg_check_weak_battery_status(device_index); 

}

// boot_images/core/systemdrivers/pmic/app/chg/src/pm_app_smbchg.c
pm_err_flag_type pm_sbl_chg_check_weak_battery_status(uint32 device_index)
{
...
     while(vbatt_weak_status)  //While battery is in weak state
    {

...
          if (vbat_adc >=  bootup_threshold)  //Compare it with SW bootup threshold
        {
            LOGD("Battery good, bootup");
            pm_chg_indication_led_et6326_init(vbat_adc, 0);
            vbatt_weak_status = FALSE;
            break; //bootup
        }

...
     /* new add did not voltage limit when insert charger*/
    pm_comm_read_byte(0, 0x808, &chg_sts, 0);
    snprintf(s_buf, LOG_BUF_SIZE, "chg_sts = 0x%x", chg_sts);
    boot_log_message(s_buf);
    if (chg_sts == PM8940_CHARGER_EXIST) {
        break; //bootup
    }
    /* end */
     }
...

    if(!bat_present)
    {
        // If battery absent, set Vsysmin to 3.6V
        err_flag |= pm_smbchg_bat_if_set_min_sys_volt(device_index, 3600);
    }
    else
    {
        // If battery present, set Vsysmin to 3.15V
        err_flag |= pm_smbchg_bat_if_set_min_sys_volt(device_index, 3150);
    }

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
system.img/ vendor .img 解包打包
================================
1.解包为元数据
/work/d1S_androidP/out/host/linux-x86/bin/simg2img system.img system.raw

2.挂载
sudo mount -t ext4 system.raw ./my_sysdir

3.umount
sudo umount my_sysdir/

4.重新打包
/work/d1S_androidP/out/host/linux-x86/bin/img2simg system.raw system2.img
(img2simg工具默认是没有编译出来的,可以在编译环境建立后,make img2simg-host 来生成)
1
2
3
4
5
6
7
8
9
10
11
12
fingerprint TZ modify
=========================


trustzone_images/apps/bsp/trustzone/qsapps/build/secimage.xml   
trustzone_images/core/bsp/trustzone/qsapps/build/secimage.xml   

trustzone_images/core/bsp/trustzone/qsapps/fpctzappfingerprint/ 
trustzone_images/core/bsp/trustzone/qsapps/goodixfp/    

trustzone_images/core/kernel/libstd/build/SConscript 
trustzone_images/core/kernel/libstd/build/fpctzappfingerprint/
trustzone_images/core/kernel/libstd/build/goodixfp/

// TA
trustzone_images/core/securemsm/secrsa/build/SConscript
trustzone_images/core/securemsm/trustzone/qsapps/fpctzappfingerprint/
trustzone_images/core/securemsm/trustzone/qsapps/goodixfp/

trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/common_applib/build/SConscript
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/common_applib/build/fpctzappfingerprint
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/common_applib/build/goodixfp

trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/proxy/build/SConscript
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/proxy/build/fpctzappfingerprint/
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/proxy/build/goodixfp/


trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/qsee/build/SConscript
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/qsee/build/fpctzappfingerprint/    
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/qsee/build/goodixfp


trustzone_images/core/securemsm/trustzone/qsapps/libs/biometric/build/SConscript
trustzone_images/core/securemsm/trustzone/qsapps/libs/biometric/build/goodixfp/    
trustzone_images/core/securemsm/trustzone/qsapps/libs/biometric/build/fpctzappfingerprint


trustzone_images/core/securemsm/trustzone/qsee/mink/libstd/build/SConscript    
trustzone_images/core/securemsm/trustzone/qsee/mink/libstd/build/fpctzappfingerprint/   
trustzone_images/core/securemsm/trustzone/qsee/mink/libstd/build/goodixfp/



trustzone_images/core/securemsm/trustzone/qsee/mink/oem/config/msm8953/oem_config.xml
trustzone_images/core/securemsm/trustzone/qsee/mink/oem/config/common/keymaster_oem_config.xml
trustzone_images/core/buses/qup_accesscontrol/bear/config/QUPAC_8953_Access.xml


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
39. user debug 版本宏

 TARGET_BUILD_VARIANT
    eng    user userdebug 
1
2
40 dm-verify

 关键字 : veritykeyid
 
 
 关键宏:VERITY_LE  BUILD_SIGN_FOR_SECBOOT   HQ_BUILD_FLAG
 
#ifneq ($(BUILD_SIGN_FOR_SECBOOT),)
#DEFINES += HQ_BUILD_FLAG=1
#endif
1
2
3
4
5
6
7
8
41. bugreport 关键字

beginning of|KERNEL LOG|LAST KMSG|LAST LOGCAT


当 warm reset的时候才会有last log,当关机再开机后就不会保存有last log
LAST KMSG
cat /sys/fs/pstore/console-ramoops   
--------------------- 
作者:这个ID洒家要了 
来源:优快云 
原文:https://blog.youkuaiyun.com/u012719256/article/details/52094982 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值