camera 开发常用的调试命令

2024-08-05  本文已影响0人  程序员Android1

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 抽取

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

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="
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
上一篇下一篇

猜你喜欢

热点阅读