美文网首页
camera 开发常用的调试命令

camera 开发常用的调试命令

作者: 程序员Android1 | 来源:发表于2024-08-05 08:01 被阅读0次

    1. camx trace 基本log开关

    camx trace log

    adb wait-for-device
    adb root
    adb remount
    ::log tag CSL HAL Sensor CHI
    adb shell setprop persist.vendor.camera.logInfoMask 0x40482
    adb shell setprop persist.vendor.camera.logVerboseMask 0x40482
    ::trace tag 
    adb shell setprop persist.vendor.camera.traceGroupsEnable 0x40482
    ::aps trace
    adb shell setprop persist.oplus.aps.trace true
    ::ux trace 9999
    adb shell "echo 1 > proc/oplus_scheduler/sched_assist/debug_enabled"
    :: camera app trace *2872*324*66#
    pause
    

    手机抓取并pull trace

    adb wait-for-device
    adb root
    adb remount
    adb pull /data/local/traces/ .
    pause
    

    2. Camx log

    1. /vendor/etc/camera/camxoverridesettings.txt
      设置完需要重启后才可以生效
    2. adb shell setprop <key> <value>
    Name Default Value Setprop
    logVerboseMask Verbose log mask.Default: 0 persist.vendor.camera.logVerboseMask
    logEntryExitMask Entry/exit log mask.Default: 0 persist.vendor.camera.logEntryExitMask
    logInfoMask Log mask information.Default: 0xFFFFFFFF persist.vendor.camera.logInfoMask
    logWarningMask Warning log mask.Default: 0xFFFFFFFF persist.vendor.camera.logWarningMask
    systemLogEnable Enables the system log.Default: TRUE persist.vendor.camera.systemLogEnable

    Camx UMD Log Group 举例如下:

    typedef UINT32 CamxLogGroup;
    static const CamxLogGroup CamxLogGroupNone          = (1 << 0);     /0x1        //< Generic group   
    static const CamxLogGroup CamxLogGroupSensor        = (1 << 1);     /0x2        //< Sensor
    static const CamxLogGroup CamxLogGroupIFace         = (1 << 2);     /0x4        //< IFace
    static const CamxLogGroup CamxLogGroupISP           = (1 << 3);     /0x8        //< ISP
    static const CamxLogGroup CamxLogGroupPProc         = (1 << 4);     /0x10       //< Post Processor
    static const CamxLogGroup CamxLogGroupImgLib        = (1 << 5);     /0x20       //< Image Lib
    static const CamxLogGroup CamxLogGroupCPP           = (1 << 6);     /0x40       //< CPP
    static const CamxLogGroup CamxLogGroupHAL           = (1 << 7);     /0x80       //< HAL
    static const CamxLogGroup CamxLogGroupJPEG          = (1 << 8);     /0x100      //< JPEG
    static const CamxLogGroup CamxLogGroupStats         = (1 << 9);     /0x200      //< Stats
    static const CamxLogGroup CamxLogGroupCSL           = (1 << 10);    /0x400      //< CSL
    static const CamxLogGroup CamxLogGroupApp           = (1 << 11);    /0x800      //< Application
    static const CamxLogGroup CamxLogGroupUtils         = (1 << 12);    /0x1000     //< Utilities
    static const CamxLogGroup CamxLogGroupSync          = (1 << 13);    /0x2000     //< Sync
    static const CamxLogGroup CamxLogGroupMemSpy        = (1 << 14);    /0x4000     //< MemSpy
    static const CamxLogGroup CamxLogGroupAssert        = (1 << 15);    /0x8000     //< Asserts
    static const CamxLogGroup CamxLogGroupCore          = (1 << 16);    /0x10000    //< Core
    static const CamxLogGroup CamxLogGroupHWL           = (1 << 17);    /0x20000    //< HWL
    static const CamxLogGroup CamxLogGroupChi           = (1 << 18);    /0x40000    //< CHI
    static const CamxLogGroup CamxLogGroupDRQ           = (1 << 19);    /0x80000    //< DRQ
    static const CamxLogGroup CamxLogGroupFD            = (1 << 20);    /0x100000   //< FD
    static const CamxLogGroup CamxLogGroupIQMod         = (1 << 21);    /0x200000   //< IQ module
    static const CamxLogGroup CamxLogGroupLRME          = (1 << 22);    /0x400000   //< LRME
    static const CamxLogGroup CamxLogGroupNCS           = (1 << 23);    /0x800000   //< NCS
    static const CamxLogGroup CamxLogGroupMeta          = (1 << 24);    /0x1000000  //< Metadata
    static const CamxLogGroup CamxLogGroupAEC           = (1 << 25);    /0x2000000  //< AEC
    static const CamxLogGroup CamxLogGroupAWB           = (1 << 26);    /0x4000000  //< AWB
    static const CamxLogGroup CamxLogGroupAF            = (1 << 27);    /0x8000000  //< AF
    

    如果打开不同group 的log,那么修改对应的值即可。
    比如:
    单独打开 CSL HAL Sensor CHI 三组Info Log Mask

                   CHI       CSL  HAL  Sensor  
     0    0    0    4    0    4    8    2  =0x40482
    0000 0000 0000 0100 0000 0100 1000 0010 
    

    logInfoMask=0x00040482
    logWarningMask=0x40482
    此时log mask 可以使用上面两种,注意,前面的0可以省略,后面的0不可以省略。

    比如:
    打开所有的 Verbose Log Mask
    0xFFFFFFFF 打开所有的log
    logVerboseMask=0xFFFFFFFF

    3. kill Camera HAL Camera FWK 脚本

    adb wait-for-device
    adb root
    adb remount
    adb shell ps | findstr camera
    
    for /f "delims=" %%i in ('adb shell pidof android.hardware.camera.provider@2.4-service_64') do (set CameraHalProcess=%%i)
    adb shell kill %CameraHalProcess%
    
    for /f "delims=" %%i in ('adb shell pidof cameraserver') do (set CameraServerProcess=%%i)
    adb shell kill %CameraServerProcess%
    
    adb shell ps | findstr camera
    
    pause
     
    

    5. Offline log开关

    设置log开关

    // Camx log 
     adb shell "echo overrideLogLevels=0xFF >  /vendor/etc/camera/camxoverridesettings.txt"
     adb shell "echo logVerboseMask=0x100>>  /vendor/etc/camera/camxoverridesettings.txt"
     adb shell "echo logInfoMask=0x10198>>  /vendor/etc/camera/camxoverridesettings.txt"
     // 允许adb  获取camx chi log
     adb shell echo “systemLogEnable=TRUE >> /vendor/etc/camera/camxoverridesettings.txt”
     //离线log
    adb shell " echo enableAsciiLogging=1 >>  /vendor/etc/camera/camxoverridesettings.txt "
    // 删除之前保存的log
    adb shell rm /data/vendor/camera/*.txt
    

    pull && merge log

    // 导出log
    adb pull /data/vendor/camera .
    //merge log
    python merge_text_logs.py -o merge_locat.txt -d “path_of_the_log”
    
    

    python merge_text_logs.py 脚本目录:
    chi-cdk\tools\binary_log\merge_text_logs.py

    6. Disable All log

    //logD logcat
    adb shell stop logd 
    adb shell stop logcat 
     //camx 
    logVerboseMask=0x00000 
    logInfoMask=0x00000
    logEntryExitMask=0x00000  
    //trace
    traceGroupsEnable=0x00000 
    //camx chi adb  log 
    systemLogEnable=FALSE 
    adb shell "echo 0x0> /sys/module/cam_debug_util/parameters/debug_mdl" 
    

    7. odex 抽取

    • odex 抽取目的:

    通过命令在后台抽取 apk 内部压缩的odex 方法。
    类似windows 的解压缩包,避免解压过程影响app调用。
    主要是为了避免测试机刚刷机后odex在后台抽取,而对比机已使用很久,odex 已后台完成 ,排除测试机、对比机后台差异带来的影响,测试机,对比机可以都执行这个命令。

    • odex trace查看:

    trace 中可以查看Jit thread pool 是否在不停的占用CPU 资源进行后台odex抽取。

    ::odex 抽取
    adb shell cmd package bg-dexopt-job
    ::查看app 抽取后是否是speed 模式
    adb shell dumpsys package com.oplus.camera|adb shell grep "reason="
    
    • 确认 app speedmode
    C:\Users\>adb shell dumpsys package com.oplus.camera|adb shell grep "reason="
         arm64: [status=speed-profile] [reason=start-app] [primary-abi]
    C:\Users\>
    

    7. Top 进程前30

    adb shell top -b -m 30
    

    8. ISO Range ,Max Gain

    adb shell "dumpsys media.camera |grep  'android.sensor.info.sensitivityRange|android.sensor.maxAnalogSensitivity| static information' -iE  -A 1"
    

    举例如下:

    C:\Users\>adb shell "dumpsys media.camera |grep  'android.sensor.info.sensitivityRange|android.sensor.maxAnalogSensitivity| static information' -iE  -A 1"
    == Camera HAL device device@3.7/legacy/0 (v3.7) static information: ==
      Resource cost: 33
    --
          android.sensor.info.sensitivityRange (f0001): int32[2]
            [100 6400 ]
    --
          android.sensor.maxAnalogSensitivity (e000d): int32[1]
            [6400 ]
    --
    == Camera HAL device device@3.7/legacy/1 (v3.7) static information: ==
      Resource cost: 33
    --
          android.sensor.info.sensitivityRange (f0001): int32[2]
            [100 1600 ]
    --
          android.sensor.maxAnalogSensitivity (e000d): int32[1]
            [1600 ]
    --
    == Camera HAL device device@3.7/legacy/2 (v3.7) static information: ==
      Resource cost: 33
    --
          android.sensor.info.sensitivityRange (f0001): int32[2]
            [100 1550 ]
    --
          android.sensor.maxAnalogSensitivity (e000d): int32[1]
            [1550 ]
    
    C:\Users\>
    

    9. pidof 获取进程 pid 方法

    adb wait-for-device
    adb root
    adb remount
    
    echo meminfo cameraprovider 
    for /f "delims=" %%i in ('adb shell pidof android.hardware.camera.provider@2.4-service_64') do (set pidnum=%%i)
    echo %pidnum%
    adb shell ps | findstr camera
    adb shell dumpsys meminfo %pidnum%  
    
    pause
     
    

    11. repo && Git 命令

    放弃本地所有修改

    repo forall -vc "git reset --hard"
    

    repo 初始化

    repo init 
    

    repo 更新代码

    repo sync -c
    

    12. 内存相关命令

    dumpsys 10次 app 预览 meminfo

    ::@echo off
    adb wait-for-device
    adb root
    adb remount
    :: dump 10 次 camera app 内存
    for /L %%i in (1,1,10) do (
    
    adb shell am start -n com.android.camera/.Camera
    timeout /T 10
    echo  -------------------dumpsys camera app memmory  %%i ---------------- >>  %cd%\meminfo_camera_app.txt
    adb  shell  dumpsys meminfo  -p com.android.camera  >>  %cd%\meminfo_camera_app.txt
    :: 返回桌面
    adb shell input keyevent 3
    timeout /T 5
    
    )
    pause
    

    13. 拍照脚本

    ::@echo off
    adb wait-for-device
    adb root
    adb remount
    :: 10 次拍照
    for /L %%i in (1,1,2) do (
    
    adb shell am start -n com.android.camera/.Camera
    timeout /T 20
    adb shell input keyevent 27
    timeout /T 10
    :: 返回桌面
    adb shell input keyevent 3
    timeout /T 5
    
    )
    
    pause
    

    14. 跳过开机向导的方法

    adb wait-for-device
    adb root
    adb remount
    adb shell settings put global device_provisioned 1
    adb shell settings put secure user_setup_complete 1
    adb reboot
    

    15. Qcom Dump RAW 图 YUV图方法

    log开关

    camxoverridesettings.txt 打开如下开关后,重启复现问题

    autoimageDump = TRUE
    autoimageDumpMask=0x2
    autoinputimageDumpMask=0x2
    dumpinputatOutput=TRUE
    

    RAW YUV 图保存位置

    使用adb 命令将保存的RAW 图以及YUV 图 pull 出来,注意复现问题尽量时间短一点,不然会保存大量的图

    /data/vendor/camera
    

    16 . Android 常用编译方法

    1.frameworks/av/camera/目录:

    make cameraserver -j32
    

    cameraserver目录下:编译module是 ---> make cameraserver -j32

    ndk目录下:编译module是 ---> make libcamera2ndk -j32

    2.frameworks/av/services/camera/目录:

    make libcameraservice -j32
    

    libcameraservice目录下:编译module是 ---> make libcameraservice -j32

    编译生成的文件是:out/target/product/lavender/system/lib/libcameraservice.so

    3.基础编译 mm mmm

    执行source ./build/envsetup.sh
    lunch 对应的项目
    然后就可以执行 模块 的mm 编译

    4.vendorimage.img 镜像编译

    make vendorimage
    

    相关文章

      网友评论

          本文标题:camera 开发常用的调试命令

          本文链接:https://www.haomeiwen.com/subject/fbrxkjtx.html