32. mtk平台androidN cts步骤及调试日志

新增1.判断前摄还是后摄fail

grep "camera 0 | camera 1"
	后摄failed:
		camera 0 is opened
	前摄failed:
		camera 0 is opened
		camera 1 is opened

grep "openID"
	后摄failed:
		openID:0
		openID:1
		openID:0
		openID:0
		openID:0
		openID:0
	前摄failed:
		openID:0
		openID:1
		openID:0
		openID:0
		openID:1
		openID:1

新增2.Verifier测试结果:
 1、Camera Video:后摄选择480P格式,2个视频的大小不一样
    前摄任意格式下点击“test”,整个界面变的 很暗,看不清,且选择HIGH/480P格式,2个视频的大小不一样
	alps\vendor\mediatek\proprietary\custom\mt6735\hal\D2\sendepfeature\config.ftbl.gc2385smipi_raw.h
    //  Preview Size
    FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
        KEY_AS_(MtkCameraParameters::KEY_PREVIEW_SIZE), 
        SCENE_AS_DEFAULT_SCENE(
            ITEM_AS_DEFAULT_("640x480"), 
            ITEM_AS_VALUES_(
-                "176x144",      "320x240",      "352x288",
-                "640x480",      "1280x720",
+                "176x144",      "320x240",      "352x288",      "480x320",      
+                "640x480",      "720x480",      "1280x720",

            )
        ), 
    )
		
		
		
一、局部测试某项fail的步骤:
	1. 设置手机中的相关选项
	(1)将“显示-休眠”的时长设为“30分钟”或“永不”;
	(2)将“安全-屏幕锁定方式”的时长设为“无”;
	(3)手机需连接上可以的wifi网络,wifi用户名:CTS-WIFI,wifi密码:qazwsxedc703
	
	2. 用USB线将电脑和手机连接起来,在手机上弹出的“允许USB调试吗?”对话框中勾选“一律允许使用这台计算机进行调试”后点“确定”

	3. 执行./cts-tradefed脚本后,执行run cts –m 模块名 –t 包、类名,具体如下
	(1)
	Cts测试电脑1: \\192.168.108.185\mht-50\Desktop\CTS\cts-7.0-r13\android-cts\tools
	./cts-tradefed
	Cts测试电脑2: \\192.168.108.186\mht-51\Desktop\CTS\cts-7.0-r13\android-cts\tools
	./cts-tradefed

	(2)
	run cts –m CtsCameraTestCases –t android.hardware.cts.CameraGLTest#testCameraToSurfaceTextureMetadata

	参考文档:https://source.android.com/compatibility/cts/run

二、常见报错 - 像素错误,参照《[FAQ17749][M]CTS 配置Camera Feature Table Preview/Picture/Video Size的原则》的以下几点修改
	(1)Picture Size请按照16倍数来添加: 1920x1080这种近似16倍数的size在cts 6.0 R2也可以了;
	(2)Camera App录制除了MTK Low(176x144)/Mid(640x480)/High(1280x720)/Fine(1920x1088)的级别,还有320x240,352x288,720x480,这几个是为了CTS 测试可以pass,
		关于1080P: 1920x1080和1920x1088, 底层有时会在设置1080P的时候,使用1920x1088来配置,所以这两组一起加进来;
	(3)Preview Size中必须包含至少一个Video Size值,否则mediaserver初始化会失败;
	(4)Preview Size最大请不要超过1080P;
	(5)最大的Picture Size的宽和高需要大于(或者等于)所有的Preview Size的相应宽和高;
	(6)最大的Picture Size和最大Preview Size请用同样的ratio;
	(7)如果最大的Picture Size超过(或者等于)HD(1280x720),就必须包含HD(1280x720)的size,同时(320x240)、(640x480)、(1920x1088)也要添加进来;
	
	以下config.ftbl.gc0310_mipi_yuv.h和config.ftbl.imx045_mipi_raw.h是经验证ok的配置,供参考。
	config.ftbl.gc0310_mipi_yuv.h
	#if 1
		//  Picture Size
		FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
			KEY_AS_(MtkCameraParameters::KEY_PICTURE_SIZE), 
			SCENE_AS_DEFAULT_SCENE(
						   ITEM_AS_DEFAULT_("640x480"),
							   ITEM_AS_VALUES_(
							   "320x240", "640x480", /* 4:3 */
							   "320x192", "640x368", /* 16:9 */
							   "400x240", "640x384", /* 5:3 */
								)
			), 
		)
	#endif
		//==========================================================================
	#if 1
		//  Preview Size
		FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
			KEY_AS_(MtkCameraParameters::KEY_PREVIEW_SIZE), 
			SCENE_AS_DEFAULT_SCENE(
				ITEM_AS_DEFAULT_("640x480"), 
				ITEM_AS_VALUES_(
					"176x144",      "320x240",      "352x288",
					"640x480", 
				)
			), 
		)
	#endif
		//==========================================================================
	#if 1
		//  Video Size
		FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
			KEY_AS_(MtkCameraParameters::KEY_VIDEO_SIZE), 
			SCENE_AS_DEFAULT_SCENE(
				ITEM_AS_DEFAULT_("640x480"), 
				ITEM_AS_VALUES_(
					"176x144",      "320x240",		"352x288",      "480x320",      "640x480",		
					"720x480",      "1280x720",     "1920x1080", 	"1920x1088",
				)
			), 
		)
	#endif

	config.ftbl.imx045_mipi_raw.h
	#if 1
		//  Picture Size (Both width & height must be 16-aligned)
		FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
			KEY_AS_(MtkCameraParameters::KEY_PICTURE_SIZE), 
			SCENE_AS_DEFAULT_SCENE(
										   ITEM_AS_DEFAULT_("2560x1920"),
											   ITEM_AS_VALUES_(
											   "320x240", "640x480", "1600x1200", "2048x1536", "2560x1920",	/* 4:3 200w-300w-500w*/
											   "1280x720", "1600x912",	"1920x1088", "2048x1152", "2560x1440",  /* 16:9 220w-490w*/
											   "1280x768", "1600x960",	"2560x1536", /* 5:3 100w-400w-500w*/
												)
			), 
		)
	#endif
		//==========================================================================
	#if 1
		//  Preview Size
		FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
			KEY_AS_(MtkCameraParameters::KEY_PREVIEW_SIZE), 
			SCENE_AS_DEFAULT_SCENE(
				ITEM_AS_DEFAULT_("640x480"), 
				ITEM_AS_VALUES_(
					"176x144",      "320x240",      "352x288",
					"640x480",      "1280x720",
				)
			), 
		)
	#endif
		//==========================================================================
	#if 1
		//  Video Size
		FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
			KEY_AS_(MtkCameraParameters::KEY_VIDEO_SIZE), 
			SCENE_AS_DEFAULT_SCENE(
				ITEM_AS_DEFAULT_("640x480"), 
				ITEM_AS_VALUES_(
					"176x144",      "320x240",		"352x288",      "480x320",      "640x480",
					"720x480",      "1280x720",     "1920x1080", 	"1920x1088",
				)
			), 
		)
	#endif

三、android.hardware.cts.CameraGLTest#testCameraToSurfaceTextureMetadata测试失败的解决办法
	出现这个报错的问题,请参考《[FAQ14945]CTS Camera性能导致测试fail的解决方法》,这个FAQ讲得很详细。这个问题比较难弄,需要优先联系fae处理。
	做几点补充:
	(1)	CTS测试中摄像头需要在明亮的环境下测试,怎么确认环境的亮度值:
	i.编译出工程版的软件;
	ii.用raw的摄像头,打开摄像头进入预览状态,把mtklog拷贝出来,在main log中搜索aaa_state_camera_preview: lv,此值一般要在60以上。
	iii.我们的测试环境亮度在70-80左右,testCameraToSurfaceTextureMetadata能测试通过的话,在专业的CTS认证机构那里也能测试通过。
	(2)	怎么确认摄像头的帧率值:
	i.	编译出工程版的软件;
	ii.	用yuv和raw的摄像头均可,打开摄像头进入预览状态,把mtklog拷贝出来,在main log中搜索handleReturnBuffer,如下
	D MtkCam/DisplayClient: [handleReturnBuffers] + (99) 34ms < Duration(99), Show frame:0 1 [ion:325 0xe65c4000/3110400 89925290000]
	其中Duration(99)就是代表此帧是99ms返回,比较理想的环境下,此值一般为33。
	在log中查看到的Duration值能达到30-40的话, testCameraToSurfaceTextureMetadata的测试一般都能通过测试。
	(3)	raw的摄像头一般联系fae过来优化摄像头的驱动提高帧率即可,像gc0310这样yuv的摄像头,除了要在驱动中提高摄像头帧率,还需在config.ftbl.gc0310_mipi_yuv.h中把15000的帧率配置注释掉才行,如下
		//  Preview Frame Rate Range
		FTABLE_CONFIG_AS_TYPE_OF_USER(
			KEY_AS_(MtkCameraParameters::KEY_PREVIEW_FPS_RANGE), 
			SCENE_AS_DEFAULT_SCENE(
				ITEM_AS_DEFAULT_("5000,30000"),
				ITEM_AS_USER_LIST_(
		+		   // "(15000,15000)",
					"(20000,20000)",
					"(24000,24000)",
					"(5000,30000)",
					"(30000,30000)",
				)
			), 
		)
	(4)	一般都会有前后摄像头,不能确定是前摄还是后摄造成testCameraToSurfaceTextureMetadata测试失败,除了参考《[FAQ14945]CTS Camera性能导致测试fail的解决方法》中通过查看log的方法确定外,还可以通过单独给前摄上电或单独给后摄上电,单独测试前摄或单独测试后摄进行确认。

四、如果前置摄像头有闪光灯,测试前闪失败的修改
	参照FAQ17593把前摄的 MTK_FLASH_INFO_AVAILABLE_FALSE 改为 MTK_FLASH_INFO_AVAILABLE_TRUE 即可,具体如下:
	vendor\mediatek\proprietary\custom\mt6580\hal\imgsensor_metadata\common\config_static_metadata_common.h
    case 0:
        //======================================================================
        CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_ORIENTATION)
            CONFIG_ENTRY_VALUE(90, MINT32)
        CONFIG_METADATA_END()
        //======================================================================
        CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_WANTED_ORIENTATION)
            CONFIG_ENTRY_VALUE(90, MINT32)
        CONFIG_METADATA_END()
        //======================================================================
        CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_FACING)
            CONFIG_ENTRY_VALUE(MTK_LENS_FACING_BACK, MUINT8)
        CONFIG_METADATA_END()
         //======================================================================
        CONFIG_METADATA_BEGIN(MTK_HAL_VERSION)
            CONFIG_ENTRY_VALUE(MTK_HAL_VERSION_1_0, MINT32)
        CONFIG_METADATA_END()
        //======================================================================
        CONFIG_METADATA_BEGIN(MTK_FLASH_INFO_AVAILABLE)
            CONFIG_ENTRY_VALUE(MTK_FLASH_INFO_AVAILABLE_TRUE, MUINT8)
        CONFIG_METADATA_END()
        //======================================================================
        break;

    case 1:
        //======================================================================
        CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_ORIENTATION)
            CONFIG_ENTRY_VALUE(270, MINT32)
        CONFIG_METADATA_END()
        //======================================================================
        CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_WANTED_ORIENTATION)
            CONFIG_ENTRY_VALUE(270, MINT32)
        CONFIG_METADATA_END()
        //======================================================================
        CONFIG_METADATA_BEGIN(MTK_SENSOR_INFO_FACING)
            CONFIG_ENTRY_VALUE(MTK_LENS_FACING_FRONT, MUINT8)
        CONFIG_METADATA_END()
         //======================================================================
        CONFIG_METADATA_BEGIN(MTK_HAL_VERSION)
            CONFIG_ENTRY_VALUE(MTK_HAL_VERSION_1_0, MINT32)
        CONFIG_METADATA_END()
        //======================================================================
        CONFIG_METADATA_BEGIN(MTK_FLASH_INFO_AVAILABLE)
    -        CONFIG_ENTRY_VALUE(MTK_FLASH_INFO_AVAILABLE_FALSE, MUINT8)
    +        CONFIG_ENTRY_VALUE(MTK_FLASH_INFO_AVAILABLE_TRUE, MUINT8)		// 此处
        CONFIG_METADATA_END()
        //======================================================================
        break;

五、ctsVerifier中,Camera FOV Calibration测项失败的修改
	参照《[FAQ17557]Camera FOV Calibration failed(L版本/M版本)》这个文档,测试出前后摄像头的每个picture size下的FOV值,取其平均的值,修改如下代码中的MainSensorHorFOV值和SubSensorHorFOV值
	vendor\mediatek\proprietary\custom\mt6580\hal\imgsensor_src\cfg_setting_imgsensor.cpp
	getSensorViewAngle()
	{
		static SensorViewAngle_T const inst = {
			MainSensorHorFOV  : 47,
			MainSensorVerFOV  : 49,
			SubSensorHorFOV  : 49,
			SubSensorVerFOV  : 40,
			Main2SensorHorFOV  : 0,   //not support
			Main2SensorVerFOV  : 0,
		};
		return inst;
	}
	如果我们测试FOV的条件简陋,可以先粗略地测试出FOV值,合入代码后,把编译的软件包发到专业的CTS认证机构,他们测试出来的FOV值是准确的,
	然后读取他们反馈回来的ctsVerifierReport.xml的FOV值,取平均值,再次修改代码中的MainSensorHorFOV值和SubSensorHorFOV值,FOV测试就能通过。

六、若设备没有光感,ctsVerifier光感测试失败的修改
	(1)在ProjectConfig.mk中将CUSTOM_KERNEL_ALSPS配置为空
	(2)在defconfig中不配置CONFIG_CUSTOM_KERNEL_ALSPS
	
	
cts调试案例
案例一	: 指纹相关: android.hardware.fingerprint.cts.FingerprintManagerTest#test_hasFingerprintHardware
	现象	: 
	平台	: androidN,MTK6737
	排查过程: 1. 查看cts测试log中报错信息:
				avc: denied { call } for scontext=u:r:dumpstate:s0 tcontext=u:r:fingerprintd:s0 tclass=binder permissive=0
				
			  2. 修改alps/device/mediatek/common/sepolicy/bsp/dumpstate.te
					allow dumpstate GoogleOtaBinder:binder call;
				+	allow dumpstate fingerprintd:binder call;
			  
			  3. make -j8 kernel bootimage 2>&1 | tee build.log,刷boot.img
			  
			  4. 单项测试通过
				run cts -m CtsHardwareTestCases -t android.hardware.fingerprint.cts.FingerprintManagerTest#test_hasFingerprintHardware

	总结	: 权限的修改参考【17. 权限添加-解决运行报错(te文件)】
	
案例二	: camera - android.hardware.camera2.cts.Robustness#testAbandonRepeatingRequestSurface
	现象	: 
	平台	: androidN,MTK6737
	排查过程: 1. 刚开始以为是摄像头驱动问题,比如拍照延时等,联系FAE过来,对方也没头绪,不过对方联系了他们其他客户,有碰到过类似的问题,
				发过来一个补丁0916613.diff,经验证该补丁有有效果,testAbandonRepeatingRequestSurface可以测试通过。

			  2. 我们同时也将此问题提交给MTK,MTK反馈的解决办法,和摄像头FAE提供的补丁是一致的,如下:
					SurfaceTextureRenderer_old-c9dc2c3241ddc93e0e3f0afe04b20768.java
					SurfaceTextureRenderer_new-65364183d1dd53081ac41eb6677dd437.java
					0916613.diff
			  3. 
			  
	处理方案: 
	总结	: 

案例三	: camera - android.hardware.cts.CameraTest#testFaceDetection
	现象	: 
	平台	: androidN,MTK6737
	排查过程: 1. 
			  2. 
			  3. 
			  
	处理方案: 
	总结	: 

案例四	: CtsSimpleperfTestCases
	现象	: 
	平台	: androidN,MTK6737
	排查过程: 1. cts的log中查看有以下权限问题,添加相应的权限后测试验证并未通过,说明不是这里的原因造成
				10-25 05:43:26.320  5538  5538 W CtsSimpleperfTe: type=1400 audit(0.0:60): avc: denied { getattr } for path="/proc/mrdump_rst" dev="proc" ino=4026534335 scontext=u:r:shell:s0 tcontext=u:object_r:proc_mrdump_rst:s0 tclass=file permissive=0
				10-25 05:43:26.320  5538  5538 W CtsSimpleperfTe: type=1400 audit(0.0:61): avc: denied { getattr } for path="/proc/lk_env" dev="proc" ino=4026533704 scontext=u:r:shell:s0 tcontext=u:object_r:proc_lk_env:s0 tclass=file permissive=0
				10-25 05:43:26.320  5538  5538 W CtsSimpleperfTe: type=1400 audit(0.0:62): avc: denied { getattr } for path="/proc/sysrq-trigger" dev="proc" ino=4026533637 scontext=u:r:shell:s0 tcontext=u:object_r:proc_sysrq:s0 tclass=file permissive=0
				10-25 05:43:26.320  5538  5538 W CtsSimpleperfTe: type=1400 audit(0.0:63): avc: denied { getattr } for path="/proc/iomem" dev="proc" ino=4026533620 scontext=u:r:shell:s0 tcontext=u:object_r:proc_iomem:s0 tclass=file permissive=0
				10-25 05:43:26.580  5538  5538 W CtsSimpleperfTe: type=1400 audit(0.0:64): avc: denied { read } for name="notes" dev="sysfs" ino=61 scontext=u:r:shell:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0

			  2. 同时将此项测试FAIL项,提交给MTK,MTK的回复如下
				【CTS】CtsSimpleperfTestCases fail--“Event type 'cpu-cycles' is not supported by the kernel”
				Mediatek , 2017-10-26 16:42
				Dear Customer,
				請幫忙修正為以下 (compatible部份), 再验证此项case。
				arch\arch\arm\mt6735.dtsi
					pmu {
						compatible = "arm,cortex-a7-pmu";
						interrupts = ,
							,
							,
							;
						interrupt-affinity = <&cpu0>,
								 <&cpu1>,
								 <&cpu2>,
								 <&cpu3>;
					};
						
			  3. 直接按照以上MTK提供的代码,测试还是失败的,经查验37_n_base.git上原生的mt6735m.dtsi中关于这块的配置是这么写的,这样修改后ok
				  pmu {
						compatible = "arm,armv8-pmuv3";		// 此处有区别
						interrupts = ,
						   ,
						   ,
						   ;
						interrupt-affinity = <&cpu0>,
								<&cpu1>,
								<&cpu2>,
								<&cpu3>;
				   };
	处理方案: 
	总结	: mt6735m.dtsi这个文件可能是从37 6.0上移植过来的,没有以上配置,导致CtsSimpleperfTestCases会测试失败,
			后续在新的git上移植原有老项目代码时,一定要基于新的git代码基础上对比修改,而不是把原有老项目的代码配置直接拷贝过来。
		
案例五	: CtsHardwareTestCases - 指南针相关
	现象	: 
	平台	: androidN,MTK6737
	排查过程: 1. android.hardware.cts.SensorBatchingTest#testGeomagneticRotationVector_50hz_batching
	
			  2. 我们刚开始创建xxx的mk配置中,有配置指南针和陀螺仪,而实际上xxx这个项目的板子并没有指南针和陀螺仪,
				导致在进行CTS测试CtsHardwareTestCases的时候,获取不到相应sensor的数据超时了,
				
			  3. 在ProjectConfig.mk、defconfig中将指南针、陀螺仪去掉
			  
	处理方案: 
	总结	: 

案例六	: 
	现象	: 
	平台	: androidN,MTK6737
	排查过程: 1. 
			  2. 
			  3. 
			  
	处理方案: 
	总结	: 





你可能感兴趣的:(32. mtk平台androidN cts步骤及调试日志)