Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(9):摄像头GPS传感器

一、传感器

先从最简单的传感器开始吧
传感器这部分没有源代码,只要从官方rom里提取相关lib就行了

#sensor
lib/hw/sensors.msm8960.so
lib/hw/sensors_native_hal.so
lib/hw/sensors_qcom.so
lib/libsensor_reg.so
lib/libsensor1.so
lib/libyas530.so

一般msm8960平台就这几个lib,其中libyas530是电子罗盘的lib

再说说找lib方法,有2种方法互补
首先,把lib/hw/sensorxxx传送到手机,然后重启系统,通过log查看缺少的lib并补齐
如果还缺,就用ultraedit打开lib/hw/sensorxxx,然后搜索lib关键字,找到其依赖的其它缺少的lb,在通过打开这些缺的lib再次搜索缺少的lib

补齐了所有lib后,用z硬件测试来试验所有传感器是否正常。

二、相机

1.修改BoardConfig.mk

#Camera
USE_DEVICE_SPECIFIC_CAMERA := true
BOARD_USES_CAMERA_FAST_AUTOFOCUS := true
USE_CAMERA_STUB := true

提示:USE_DEVICE_SPECIFIC_CAMERA 这句意思是不编译提供的通用相机代码,我们通过使用官方lib去实现相机功能。但对于aosp来说这项不起作用,这项是给cm用的。

2.寻找相机lib

摄像头(相机)与传感器类似,但lib更多
摄像头(相机)hw可以通过编写代码而编译出来,但显然不适合没有基础的初学者,我们只要使用官方的hw和lib就行了
某些手机会把相机的firmware集成到boot.img里,就像泛泰CExxx.bin,那么在ramdisk就得添加相应的内容,其它手机可能不需要

首先system/lib下含chromatix的lib全都要添加,这里以泛泰a870为例

lib/libchromatix_imx074_default_video.so
lib/libchromatix_imx074_preview.so
lib/libchromatix_imx074_video_hd.so
lib/libchromatix_imx074_zsl.so
lib/libchromatix_imx091_default_video.so
lib/libchromatix_imx091_preview.so
lib/libchromatix_imx091_video_hd.so
lib/libchromatix_imx135_default_video.so
lib/libchromatix_imx135_preview.so
lib/libchromatix_imx135_video_hd.so
lib/libchromatix_imx135_video_hdr.so
lib/libchromatix_imx135_zsl.so
lib/libchromatix_mt9e013_default_video.so
lib/libchromatix_mt9e013_preview.so
lib/libchromatix_mt9e013_video_hfr.so
lib/libchromatix_ov2720_default_video.so
lib/libchromatix_ov2720_hfr.so
lib/libchromatix_ov2720_preview.so
lib/libchromatix_ov2720_zsl.so
lib/libchromatix_ov5647_default_video.so
lib/libchromatix_ov5647_preview.so
lib/libchromatix_ov8825_default_video.so
lib/libchromatix_ov8825_preview.so
lib/libchromatix_ov8825_video_hfr.so
lib/libchromatix_ov8825_video_hfr_60fps.so
lib/libchromatix_ov8825_video_hfr_90fps.so
lib/libchromatix_ov8825_video_hfr_120fps.so
lib/libchromatix_ov8825_zsl.so
lib/libchromatix_ov9726_default_video.so
lib/libchromatix_ov9726_preview.so
lib/libchromatix_s5k3l1yx_default_video.so
lib/libchromatix_s5k3l1yx_hfr_60fps.so
lib/libchromatix_s5k3l1yx_hfr_90fps.so
lib/libchromatix_s5k3l1yx_hfr_120fps.so
lib/libchromatix_s5k3l1yx_preview.so
lib/libchromatix_s5k3l1yx_video_hd.so
lib/libchromatix_s5k3l1yx_zsl.so
lib/libchromatix_s5k4e1_default_video.so
lib/libchromatix_s5k4e1_preview.so

然后传送官方rom的lib/hw/camera.msm8960.so到手机
并通过前面介绍的2种找lib方法来补齐所有lib
以下同样是泛泰a870的参考

#camera mm-qcamera-daemon
lib/hw/camera.msm8960.so
lib/liboemcamera.so
lib/libmmjpeg.so
lib/libgemini.so
lib/libmercury.so
lib/libmmcamera_faceproc.so
lib/libmmcamera_frameproc.so
lib/libmmcamera_hdr_lib.so
lib/libmmcamera_image_stab.so
lib/libmmcamera_imx091.so
lib/libmmcamera_interface.so
lib/libmmcamera_interface2.so
lib/libmmcamera_plugin.so
lib/libmmcamera_statsproc31.so
lib/libmmcamera_wavelet_lib.so
lib/libadsprpc.so
lib/libmmjpeg_interface.so
lib/libmmstillomx.so
lib/libimage-jpeg-dec-omx-comp.so
lib/libimage-jpeg-enc-omx-comp.so
lib/libimage-omx-common.so
lib/libOlaEngine.so
lib/libmorpho_easy_hdr.so
lib/libVDFaceAPI.so
lib/libmmipl.so

最后是这个特殊的lib,如果编译出来的能用,那测试一下没问题就用编译出来的
如果不能用就必须从官方rom提取出来替换到编译的aosp里才行
lib/libcamera_client.so

如果这时硬件编解码相关的lib没有缺的话,就能正常使用摄像头了,顺带的,闪光灯也应该能用了。

关于此部分的内容,可以参考进阶教程:
http://blog.csdn.net/benjaminwan/article/details/45112505

3.相机程序的分辨率支持

反编译官方的Camera程序以及自己编译相机程序进行对比
找res\values\arrays.xml和strings.xml,类似如下这种

<string-array name="pref_camera_picturesize_entryvalues">
        <item>5248x3936item>
        <item>4992x3744item>

把支持的像素值加进去,测试好了就可以加到device/pantech/a870/overlay里

三、GPS

笔者直接改用了CM的gps代码,因为简单好用。

1.修改源代码

对比cm与 msm-aosp的hardware/qcom/gps
gps文件夹整个替换成cm的,全!部!替!换!

然后修改hardware/qcom/gps/loc_api/Android.mk
去掉第一行和最后一行

ifneq ($(TARGET_PROVIDES_GPS_LOC_API),true)
endif#TARGET_PROVIDES_GPS_LOC_API

修改hardware/qcom/gps/loc_api/Android.mk
去掉第一行和最后一行

ifneq ($(TARGET_PROVIDES_GPS_LOC_API),true)
endif#TARGET_PROVIDES_GPS_LOC_API

2.修改BoardConfig.mk

# GPS
TARGET_NO_RPC := true
BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE := $(TARGET_BOARD_PLATFORM)
或把这句改成这样也行
BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE :=msm8960

3.libloc_api_v02.so

如果最后没有生成libloc_api_v02.so的话,从其它手机的cm11里提取一个libloc_api_v02.so来用,最后如果测试可用后,集成到device.mk里

4.gps.conf

可以从官方rom里提取,或读者自己可以去网上找到很多优化好的配置文件

5.修改device.mk

去除原来的gps项,添加如下项目

# GPS
PRODUCT_PACKAGES += \
    libloc_adapter \
    libloc_eng \
    libloc_api_v02 \
    libgps.utils \
    gps.msm8960

6.不要使用任何官方的gps lib

这些官方lib都不要使用:
system/lib/ liblocxxx
vendor/lib/liblocxxx,liblocationservice,libgeofence.so
也不要使用使用官方的lib/hw/gps.default.so
否则会造成冲突

7.重新编译

如果正常,会生成lib\hw\gps.msm8960.so以及相关lib,然后刷机测试

你可能感兴趣的:(android)