:-)编译过程如果提示缺少ssl头文件
ubuntu14.04,在原有msm8953的编译环境下增加安装工具sudo apt-get install libssl-dev
即可编译通过
==================================================================================
修改系统DPI
msm8953:/ # wm density 400(V6 默认DPI 480)
代码修改:
root@msm8953_64:/ # getprop | grep "density"
[ro.sf.lcd_density]: [480]
思路:修改ro.sf.lcd_density默認值即可
搜索代码的ro.sf.lcd_density:
device/qcom/common/rootdir/etc/init.qcom.rc:1134: setprop ro.sf.lcd_density ${vendor.display.lcd_density}
再搜索vendor.display.lcd_density
wanghl@server:~/work/sdm632_android$ find device/ -name "*" | xargs grep "setprop vendor.display.lcd_density 480" -n --color 2>/dev/null
device/qcom/common/rootdir/etc/init.qcom.early_boot.sh:81: setprop vendor.display.lcd_density 480
device/qcom/common/rootdir/etc/init.qcom.early_boot.sh:208: setprop vendor.display.lcd_density 480//另外一个平台的
打开device/qcom/common/rootdir/etc/init.qcom.early_boot.sh:81
function set_density_by_fb() {
#put default density based on width
if [ -z $fb_width ]; then
setprop vendor.display.lcd_density 320
else
if [ $fb_width -ge 1600 ]; then
setprop vendor.display.lcd_density 640
elif [ $fb_width -ge 1440 ]; then
setprop vendor.display.lcd_density 560
elif [ $fb_width -ge 1080 ]; then
setprop vendor.display.lcd_density 480//就是设置这里默认值为480
elif [ $fb_width -ge 720 ]; then
setprop vendor.display.lcd_density 320 #for 720X1280 resolution
elif [ $fb_width -ge 480 ]; then
setprop vendor.display.lcd_density 240 #for 480X854 QRD resolution
else
setprop vendor.display.lcd_density 160
fi
fi
}
具体修改方法如下:
diff --git a/device/qcom/common/rootdir/Android.mk b/device/qcom/common/rootdir/Android.mk
index 64c8cab87f..7cea98ba1d 100644
--- a/device/qcom/common/rootdir/Android.mk
+++ b/device/qcom/common/rootdir/Android.mk
@@ -7,7 +7,12 @@ include $(CLEAR_VARS)
LOCAL_MODULE := init.qcom.early_boot.sh
LOCAL_MODULE_TAGS := optional eng
LOCAL_MODULE_CLASS := ETC
+# modify dpi as 420 for msm8953
+ifneq ($(TARGET_OEM_CONFIG_FILE_SUFFIX),)//受自定义的开关宏控制
+LOCAL_SRC_FILES := etc/init.qcom.early_boot_$(TARGET_OEM_CONFIG_FILE_SUFFIX).sh//为msm8953项目定制一个脚本文件
+else
LOCAL_SRC_FILES := etc/init.qcom.early_boot.sh//脚本文件为空则用默认的
+endif
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_EXECUTABLES)
include $(BUILD_PREBUILT)
具体看下宏在哪里定义的:
device/pubtron/v6/v6.mk:100:TARGET_OEM_CONFIG_FILE_SUFFIX := v6
device/pubtron/v5/v5.mk:100:TARGET_OEM_CONFIG_FILE_SUFFIX := v5
device/pubtron/msm8953/msm8953.mk:101:TARGET_OEM_CONFIG_FILE_SUFFIX := msm8953//这就根据项目来划分了。
device/pubtron/v51/v51.mk:100:TARGET_OEM_CONFIG_FILE_SUFFIX := v51
==================================================================================
linux分层/分离设计思想:
linux驱动模型 采用总线管理的模式,比如platform虚拟总线,这个东西其实就是个虚拟的的东西,只是为了帮你做driver端与device端匹配、维护下注册的driver链表和device链表而已,貌似没有其他更加重要的作用,所以你写驱动的话不采用这个总线,也是可以写好一个驱动的;至于具体的如何做匹配,可以参考内核目录driver/base下的platform.c文件,里面就是这个总线的机制:简单来说就是稳定的driver端向这个文件注册driver,device也向这个文件注册设备,然后开始查找注册的链表里面是否有和自己名字一样的东西,有的话就开始connect,connect成功后就调用driver端的probe函数,然后就成功建立了匹配,一个设备也就动态的加入了系统;除了platform总线,还有实实在在存在的总线:比如I2C总线、USB总线、PCI总线等等……采用这些总线就可以不用platform虚拟总线了。
以上便是linux分层/分离思想的简单介绍;
1)对于input输入子系统,也可以采用platform的分离结构,driver端向platform虚拟总线注册设备驱动:platform_driver_register ( struct platform_driver *drv ),device端向platform虚拟总线注册设备:platform_device_register ( struct platform_device *pdev ),在driver端和device端匹配成功后,在driver端的probe函数里面调用input_register_device(struct input_dev *input),这样就完成了一个输入子系统的分层/分离设计;
kernel/msm-4.9/drivers/input/keyboard/gpio_keys.c:897: return platform_driver_register(&gpio_keys_device_driver);
2)LCD字符设备也是一样的处理:向platform虚拟总线注册设备驱动:platform_driver_register ( struct platform_driver *drv ),device端向platform虚拟总线注册设备:platform_device_register ( struct platform_device *pdev ),在driver端和device端匹配成功后,在driver端的probe函数里面调用register_framebuffer ( struct fb_info *fb_info ),这样就完成了一个LCD设备的分层/分离设计;
kernel/msm-4.9/drivers/video/fbdev/msm/mdss_qpic.c:816: ret = platform_driver_register(&mdss_qpic_driver);
kernel/msm-4.9/drivers/video/fbdev/msm/mdss_dsi.c:4460: return platform_driver_register(&mdss_dsi_driver);
kernel/msm-4.9/drivers/video/fbdev/msm/mdss_dsi.c:4480: return platform_driver_register(&mdss_dsi_ctrl_driver);
kernel/msm-4.9/drivers/video/fbdev/msm/mdss_rotator.c:3047: return platform_driver_register(&mdss_rotator_driver);
kernel/msm-4.9/drivers/video/fbdev/msm/mdp3.c:2727: ret = platform_driver_register(&mdp3_driver);
kernel/msm-4.9/drivers/video/fbdev/msm/mdss_edp.c:1251: ret = platform_driver_register(&mdss_edp_driver);
kernel/msm-4.9/drivers/video/fbdev/msm/mdss_spi_panel.c:1707: ret = platform_driver_register(&this_driver);
kernel/msm-4.9/drivers/video/fbdev/msm/mdss_qpic_panel.c:302: return platform_driver_register(&this_driver);
kernel/msm-4.9/drivers/video/fbdev/msm/mdss_hdmi_tx.c:4605: rc = platform_driver_register(&this_driver);
kernel/msm-4.9/drivers/video/fbdev/msm/dsi_host_v2.c:1868: return platform_driver_register(&msm_dsi_v2_driver);
kernel/msm-4.9/drivers/video/fbdev/msm/mdss_fb.c:5122: if (platform_driver_register(&mdss_fb_driver))
kernel/msm-4.9/drivers/video/fbdev/msm/mdss_smmu.c:923: return platform_driver_register(&mdss_smmu_driver);
kernel/msm-4.9/drivers/video/fbdev/msm/mdss_mdp.c:5239: return platform_driver_register(&mdss_mdp_driver);
kernel/msm-4.9/drivers/video/fbdev/msm/mdss_wb.c:218: rc = platform_driver_register(&mdss_wb_driver);
==================================================================================
关于dm-verify 的一点总结:
首先看一个OTA版本升级之后的串口log:
[ 6.711326] device-mapper: init: attempting early device configuration.
[ 6.719634] device-mapper: init: adding target '0 6192024 verity 1 PARTUUID=9d3aac46-65a7-5f1a-4209-ccdb9ad35fff PARTUUID=9d3aac46-65a7-5f1a-4209-ccdb9ad35fff 4096 4'
[ 6.742744] device-mapper: init: dm-0 is ready
[ 6.779869] device-mapper: verity-fec: 179:28: FEC: recursion too deep
[ 6.779920] device-mapper: verity: 179:28: metadata block 774003 is corrupted //坏块
[ 6.787467] mmc-cmdqd/0 (370) used greatest stack depth: 12096 bytes left
[ 6.816336] mdss_fb_release_all: try to close unopened fb 1! from pid:387 name:kworker/u16:7
[ 6.816444] mdss_fb_release_all: try to close unopened fb 0! from pid:387 name:kworker/u16:7
[ 6.826389] reboot: Restarting system with command 'dm-verity device corrupted' //dm-verity device corrupted
[ 6.832352] Going down for restart nAndroid Bootloader - UART_DM Initialized!!!
[0] welcome to lk
搜索:dm-verity device corrupted
dm-android-verity.c (msm-4.9\drivers\md): kernel_restart("dm-verity device corrupted");
dm-verity-target.c (msm-4.9\drivers\md): kernel_restart("dm-verity device corrupted");
msm-poweroff.c (msm-4.9\drivers\power\reset): } else if (!strcmp(cmd, "dm-verity device corrupted")) {
先看:
当dm-verity扫描出分区有损坏的时候,会触发dm-verity-target.c中一个回调函数:verity_handle_err。
dm-verity-target.c (msm-4.9\drivers\md): kernel_restart("dm-verity device corrupted");
/*
* Handle verification errors.
*/
static int verity_handle_err(struct dm_verity *v, enum verity_block_type type,
unsigned long long block)
{
char verity_env[DM_VERITY_ENV_LENGTH];
char *envp[] = { verity_env, NULL };
const char *type_str = "";
struct mapped_device *md = dm_table_get_md(v->ti->table);
/* Corruption should be visible in device status in all modes */
v->hash_failed = 1;
if (v->corrupted_errs >= DM_VERITY_MAX_CORRUPTED_ERRS)
goto out;//跳到out
v->corrupted_errs++;
switch (type) {
case DM_VERITY_BLOCK_TYPE_DATA:
type_str = "data";
break;
case DM_VERITY_BLOCK_TYPE_METADATA:
type_str = "metadata";
break;
default:
BUG();
}
DMERR("%s: %s block %llu is corrupted", v->data_dev->name, type_str,
block);
if (v->corrupted_errs == DM_VERITY_MAX_CORRUPTED_ERRS)
DMERR("%s: reached maximum errors", v->data_dev->name);
snprintf(verity_env, DM_VERITY_ENV_LENGTH, "%s=%d,%llu",
DM_VERITY_ENV_VAR_NAME, type, block);
kobject_uevent_env(&disk_to_dev(dm_disk(md))->kobj, KOBJ_CHANGE, envp);
out:
if (v->mode == DM_VERITY_MODE_LOGGING)
return 0;//如果是DM_VERITY_MODE_LOGGING的状态1,就返回0,那么系统在mount那块的代码就会忽略破坏,继续挂载该分区。
if (v->mode == DM_VERITY_MODE_RESTART)
kernel_restart("dm-verity device corrupted");//如果是DM_VERITY_MODE_RESTART,就是状态2, 那么就重启系统。
return 1;//如果是默认状态,就返回1,返回1之后,系统在mount的那边的代码就会不去挂载该被破坏的分区。其实我觉得这种模式确实没什么用,这种模式在发生corruption之后直接选择不挂载,这样会导致系统hang住,也没什么意义
}
再看msm-poweroff.c (msm-4.9\drivers\power\reset): } else if (!strcmp(cmd, "dm-verity device corrupted")) {
高通平台关机支持的命令在 体现出来了:
static void msm_restart_prepare(const char *cmd)
{
bool need_warm_reset = false;
#ifdef CONFIG_QCOM_DLOAD_MODE
/* Write download mode flags if we're panic'ing
* Write download mode flags if restart_mode says so
* Kill download mode if master-kill switch is set
*/
set_dload_mode(download_mode &&
(in_panic || restart_mode == RESTART_DLOAD));
#endif
if (qpnp_pon_check_hard_reset_stored()) {
/* Set warm reset as true when device is in dload mode */
if (get_dload_mode() ||
((cmd != NULL && cmd[0] != '\0') &&
!strcmp(cmd, "edl")))
need_warm_reset = true;
} else {
need_warm_reset = (get_dload_mode() ||
(cmd != NULL && cmd[0] != '\0'));
}
/* Hard reset the PMIC unless memory contents must be maintained. */
if (need_warm_reset)
qpnp_pon_system_pwr_off(PON_POWER_OFF_WARM_RESET);
else
qpnp_pon_system_pwr_off(PON_POWER_OFF_HARD_RESET);
if (cmd != NULL) {
if (!strncmp(cmd, "bootloader", 10)) {//reboot bootloader
qpnp_pon_set_restart_reason(
PON_RESTART_REASON_BOOTLOADER);
__raw_writel(0x77665500, restart_reason);
} else if (!strncmp(cmd, "recovery", 8)) {//reboot recovery
qpnp_pon_set_restart_reason(
PON_RESTART_REASON_RECOVERY);
__raw_writel(0x77665502, restart_reason);
} else if (!strcmp(cmd, "rtc")) {
qpnp_pon_set_restart_reason(
PON_RESTART_REASON_RTC);
__raw_writel(0x77665503, restart_reason);
} else if (!strcmp(cmd, "dm-verity device corrupted")) {
qpnp_pon_set_restart_reason(
PON_RESTART_REASON_DMVERITY_CORRUPTED);
__raw_writel(0x77665508, restart_reason);
} else if (!strcmp(cmd, "dm-verity enforcing")) {
qpnp_pon_set_restart_reason(
PON_RESTART_REASON_DMVERITY_ENFORCE);
__raw_writel(0x77665509, restart_reason);
} else if (!strcmp(cmd, "keys clear")) {
qpnp_pon_set_restart_reason(
PON_RESTART_REASON_KEYS_CLEAR);
__raw_writel(0x7766550a, restart_reason);
} else if (!strncmp(cmd, "oem-", 4)) {
unsigned long code;
unsigned long reset_reason;
int ret;
ret = kstrtoul(cmd + 4, 16, &code);
if (!ret) {
/* Bit-2 to bit-7 of SOFT_RB_SPARE for hard
* reset reason:
* Value 0 to 31 for common defined features
* Value 32 to 63 for oem specific features
*/
reset_reason = code +
PON_RESTART_REASON_OEM_MIN;
if (reset_reason > PON_RESTART_REASON_OEM_MAX ||
reset_reason < PON_RESTART_REASON_OEM_MIN) {
pr_err("Invalid oem reset reason: %lx\n",
reset_reason);
} else {
qpnp_pon_set_restart_reason(
reset_reason);
}
__raw_writel(0x6f656d00 | (code & 0xff),
restart_reason);
}
} else if (!strncmp(cmd, "edl", 3)) {//reboot edl
enable_emergency_dload_mode();
} else {
__raw_writel(0x77665501, restart_reason);
}
}
flush_cache_all();
/*outer_flush_all is not supported by 64bit kernel*/
#ifndef CONFIG_ARM64
outer_flush_all();
#endif
}
首先要知道dm-verity有三种工作模式,如下:
EIO:不挂载被破坏的分区。0
LOGGIN:忽略破坏的分区,继续挂载该分区。1
RESTART:发现分区被破坏,直接重启系统。2
当bootloader的verify过了之后就进入到system分区等的verify,这个时候就是dm-verity出场的时候。此时就到了图中start的这个问题,先判断dm-verity是否是enforcing的状态,如果是,就去扫描一把需要verity的分区,具体实现就是验证一下这个对应分区的metadata。如果扫描出没问题,ok,mount系统,如果扫描出有问题,dm-verity会向kernel发一个reboot的信号,并且将dm-verity的状态设置成loggin。重启之后,再回到start的地方,此时dm-verity的状态已经是loggin了,所以走向红色的那一块区域,此时就会显示出一个警告的界面,让用户去选择mount还是不mount。后面的工作都会围绕这张流程图展开。在不同的板块去分解这张流程图的实现。
内核使用hash tree来描述system.img的变化
叶节点就是dm-verity所需要verify的分区的划分的一个个小块,它这里规定了每个块以4k的大小来划分。所以举个例子,要验证的system分区如果有800M,那么就有200万个块。所以说通过叶节点以及他的父hash到根hash就是描述了system.img的变化情况。
解释下几个概念:
Verified Boot 是 Android 4.4 开始引入的一个新特性,配合可选的 dm-verify 功能,可以检测系统是否被篡改,以此保存系统的完整性。
dm-verity 基于kernel 的 Device mapper 框架,Device mapper 是Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略。dm-verity 用一个 hash 树来描述整个 system 镜像。这种机制允许 system 分区在读写的时候进行校验,而不是一次性将整个 system 镜像进行校验。当校验 hash 值不一致的时候,返回 IO 错误.相关代码
用户空间代码:system/core/fs_mgr/fs_mgr_verity.cpp//用户空间对dm-verity进行初始化,验签hash_table的签名,传入hash_table等参数
内核空间代码:kernel/msm-4.9/drivers/md/dm-verity* //内核空间根据传入的参数,进行初始化,当有IO操作时,对相应的data block进行验签。data block读取时,不仅当前data block需要hash 校验,上一层的hash block也需要进行校验,知道root hash.每一个data block如果已经验证过,再次读取时就不用进行层层的校验,只校验当前data block的hash是否正确即可。
如何启用:
1.内核配置文件使能:CONFIG_DM_VERITY
2.android相关mk文件配置:
device/qcom/msm8953_64/msm8953_64.mk:373: PRODUCT_SUPPORTS_VERITY := true
device/pubtron/msm8953/msm8953.mk:412: PRODUCT_SUPPORTS_VERITY := true
device/qcom/common/base.mk:1162: PRODUCT_SYSTEM_VERITY_PARTITION=/dev/block/bootdevice/by-name/system
验证:
root@msm8953_64:/ # ls /dev/block/bootdevice/by-name/system
/dev/block/bootdevice/by-name/system
root@msm8953_64:/ # mount | grep "system"
/dev/block/bootdevice/by-name/system /system ext4 ro,seclabel,relatime,discard,data=ordered 0 0
3.更新fstab,system分区添加verify标志
/dev/block/bootdevice/by-name/system /system ext4 ro,barrier=1,discard wait,verify
device/pubtron/msm8953/fstabs-3.18/fstab_non_AB_variant.qti:36:/dev/block/bootdevice/by-name/system / ext4 ro,barrier=1,discard wait,verify
验证:
wanghl@server:~/work/sdm632_android$ cat fstab.qcom | grep "verify"
/dev/block/bootdevice/by-name/system /system ext4 ro,barrier=1,discard wait,verify
关于我们常用的"adb disable-verity"://其实就是关闭verity功能,不去检查系统是否发生了改变
adb remount
adb disable-verity
adb reboot
If you do not,remount may succeed,however,you will not be able to write to these volumes.
remount of system failed:Read-only file system
remount failed
DM(Device Mapper)即设备映射(逻辑设备)。Device Mapper 是 Linux2.6 内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构,Device mapper 是能让用户自己定制管理块设备的策略的一套框架,使用这套框架去写管理块设备的策略比直接去管理块设备肯定要轻松许多。
Device mapper 进一步体现了在 Linux 内核设计中策略和机制分离的原则,将所有与策略相关的工作放到用户空间完成,内核中主要提供完成这些策略所需要的机制。Device mapper 用户空间相关部分主要负责配置具体的策略和控制逻辑,比如逻辑设备和哪些物理设备建立映射,怎么建立这些映射关系等等,而具体过滤和重定向 IO 请求的工作由内核中相关代码完成。因此整个 device mapper 机制由两部分组成--内核空间的 device mapper 驱动、用户空间的device mapper 库以及它提供的 dmsetup 工具。在下文中,我们分内核和用户空间两部分进行介绍。
Device mapper 的内核相关代码已经作为 Linux 2.6 内核发布版的一部分集成到内核源码中了,相关代码在内核源码的 driver/md/ 目录中,其代码文件可以划分为实现 device mapper 内核中基本架构的文件和实现具体映射工作的 target driver 插件文件两部分。
Device mapper 在内核中作为一个块设备驱动被注册的,它包含三个重要的对象概念,mapped device、映射表、target device。
RAID:(Redundant Array of indenpensive Disk) 独立磁盘冗余阵列: 磁盘阵列是把多个磁盘组成一个阵列,当作单一磁盘使用,它将数据以分段(striping)的方式储存在不同的磁盘中,存取数据时,阵列中的相关磁盘一起动作,大幅减低数据的存取时间,同时有更佳的空间利用率。磁盘阵列利用的不同的技术,称为RAID level,不同的level针对不同的系统及应用,以解决数据安全的问题。简单来说,RAID把多个硬盘组合成为一个逻辑扇区,因此,操作系统只会把它当作一个硬盘。
1. 硬件RAID:用RAId接口卡来实现;需要内核支持其驱动,并且该类设备设备显示为SCSI设备,代号为/dev/sd*
2. 软件RAID:用内核中的MD(multiple devices)模块实现,该类设备在/etc/下表示为:md*;在现在的RH 5版本中使用mdadm(mdadm是multiple devices admin的简称,它是Linux下的一款标准的软件 RAID 管理工具)工具管理软RAID;(虽然来说可以用软件模拟实现raid,但是相对对磁盘控制的功能及性能不如硬件实现的好,生产环境中最好使用硬件raid)
DM 和 MD 。。。 一个用于逻辑卷 一个用于软RAID 。都是虚拟的。。。
==================================================================================
camera如何制定编译效果文件的版本:
vendor/qcom/proprietary/mm-camera/Android.mk
ifeq ($(BUILD_SERVER), true)
CHROMATIX_VERSION := 0208
else ifeq ($(BUILD_MM_CAMERA2), true)
ifeq ($(OEM_CHROMATIX_0308), 1)
CHROMATIX_VERSION := 0308E
else ifeq ($(call is-board-platform-in-list,msm8937 msm8953 sdm660 msm8998 apq8098_latv),true)
CHROMATIX_VERSION := 0310//可以看出MSM8953平台指定的效果文件版本是0310,所以我们需要使用0310版本的效果文件,如果强制使用0309版本会编译不过。
else
CHROMATIX_VERSION := 0309
endif
else
ifeq ($(MSM_VERSION),7x27A)
CHROMATIX_VERSION := 0207
else
CHROMATIX_VERSION := 0205
endif
endif
0.首先sensor需要probe成功,kernel log应该看到诸如s5k4h8下面的log:
[ 13.646010] camera id 2 Slave addr 0x20 addr_type 2
[ 13.646018] sensor_id_reg_addr 0x0 sensor_id 0x4088 sensor id mask 0
[ 13.646018] power up size 8 power down size 6
[ 13.646024] position 1
[ 13.646027] mount 90
[ 13.646067] bypass video node creation 0
[ 13.646067] msm_sensor_fill_eeprom_subdevid_by_name:222 Eeprom userspace probe for s5k4h8//E2PROM probe成功
[ 13.668733] msm_cci_init:1442: hw_version = 0x10020005
[ 13.668982] ===msm_sensor_match_id: read id: 0x4088 expected id 0x4088://读到ID
[ 13.677138] s5k4h8 probe succeeded//probe成功
1.EEPROM如果没配,adb logcat的log会提示EEPROM相关的错误
2.效果文件一开始没有使用0310版本,而是使用0309版本,根本没有生成对应的libchromatix_*.so的库文件,所以adb logcat也会提示加载效果文件失败
11-12 10:07:30.700 15286 15286 E mm-camera:
11-12 10:07:30.700 15286 15286 E mm-camera:
11-12 10:07:30.700 15286 15286 E mm-camera:
11-12 10:07:30.700 15286 15286 E mm-camera:
11-12 10:07:30.700 15286 15286 E mm-camera:
11-12 10:07:30.700 15286 15286 E mm-camera:
11-12 10:07:30.700 15286 15286 E mm-camera:
11-12 10:07:30.700 15286 15286 E mm-camera:
sensor初始化失败导致后面一系列错误,最终导致camera打不开。
正常打开的kernel log:
修改: kernel/msm-4.9/drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c
修改: kernel/msm-4.9/drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c
wanghl@server:~/work/sdm632_android$ adb shell cat proc/kmsg
<6>[ 5384.040568] MSM-CPP cpp_release_hardware:1214 cpp hw release done
<6>[ 5385.470084] msm_pm_qos_update_request: update request 100
<6>[ 5385.470136] msm_pm_qos_update_request: update request -1
<6>[ 5385.486952] msm_csid_init: CSID_VERSION = 0x30050001
<3>[ 5385.488100] msm_csid_irq CSID2_IRQ_STATUS_ADDR = 0x800
<6>[ 5385.502127] MSM-CPP cpp_init_hardware:1133 CPP HW Version: 0x40030003
<3>[ 5385.502156] MSM-CPP cpp_init_hardware:1151 stream_cnt:0
<3>[ 5385.646820] msm_csid_irq CSID2_IRQ_STATUS_ADDR = 0x800
正常的logcat:
wanghl@server:~/work/sdm632_android$ adb logcat -c//关闭摄像头,清除log
wanghl@server:~/work/sdm632_android$ adb logcat | grep "mm-camera"
11-13 23:20:36.469 566 1439 I mm-camera:
11-13 23:20:36.470 566 5013 I mm-camera:
11-13 23:20:36.470 566 5013 I mm-camera:
11-13 23:20:36.471 566 5014 I mm-camera:
11-13 23:20:36.472 566 5014 I mm-camera:
11-13 23:20:36.472 566 5016 I mm-camera:
11-13 23:20:36.472 566 5016 I mm-camera:
11-13 23:20:36.472 566 5016 I mm-camera:
11-13 23:20:36.473 566 5017 I mm-camera:
11-13 23:20:36.473 566 5017 I mm-camera:
11-13 23:20:36.473 566 5019 I mm-camera:
11-13 23:20:36.473 566 5019 I mm-camera:
11-13 23:20:36.477 566 5021 I mm-camera:
11-13 23:20:36.477 566 5021 I mm-camera:
11-13 23:20:36.479 566 5021 I mm-camera:
11-13 23:20:36.479 566 5021 I mm-camera:
11-13 23:20:36.479 566 5021 I mm-camera:
11-13 23:20:36.479 566 5014 I mm-camera:
11-13 23:20:36.479 566 5014 I mm-camera:
11-13 23:20:36.479 566 5014 I mm-camera:
11-13 23:20:36.482 566 5013 I mm-camera:
11-13 23:20:36.482 566 5013 I mm-camera:
11-13 23:20:36.482 566 5013 I mm-camera:
11-13 23:20:36.482 566 5017 I mm-camera:
11-13 23:20:36.482 566 5017 I mm-camera:
11-13 23:20:36.482 566 5017 I mm-camera:
11-13 23:20:36.487 566 5019 I mm-camera:
11-13 23:20:36.487 566 5019 I mm-camera:
11-13 23:20:36.487 566 5019 I mm-camera:
11-13 23:20:36.487 566 5016 I mm-camera:
11-13 23:20:36.487 566 5016 I mm-camera:
11-13 23:20:36.487 566 5016 I mm-camera:
11-13 23:20:36.500 566 1439 I mm-camera:
11-13 23:20:36.500 566 1439 I mm-camera:
11-13 23:20:36.500 566 1439 I mm-camera:
11-13 23:20:36.501 566 1439 I mm-camera:
11-13 23:20:36.501 566 1439 I mm-camera:
11-13 23:20:36.501 566 1439 I mm-camera:
11-13 23:20:36.502 566 1439 I mm-camera:
11-13 23:20:36.503 566 1439 I mm-camera:
11-13 23:20:36.503 566 1439 I mm-camera:
11-13 23:20:36.503 566 1439 I mm-camera:
11-13 23:20:36.503 566 1439 I mm-camera:
11-13 23:20:36.503 566 1439 I mm-camera:
11-13 23:20:36.503 566 1439 I mm-camera:
11-13 23:20:36.504 566 1439 I mm-camera:
11-13 23:20:36.505 566 1439 I mm-camera:
11-13 23:20:36.505 566 1439 I mm-camera:
11-13 23:20:36.507 566 1439 E mm-camera:
11-13 23:20:36.507 566 1439 E mm-camera:
11-13 23:20:36.508 566 5015 E mm-camera:
11-13 23:20:36.509 566 5015 E mm-camera:
11-13 23:20:36.510 566 1439 I mm-camera:
11-13 23:20:36.516 566 5011 E mm-camera:
11-13 23:20:36.516 566 5011 E mm-camera:
11-13 23:20:36.516 566 5011 E mm-camera:
11-13 23:20:36.516 566 5011 E mm-camera:
11-13 23:20:36.516 566 5011 E mm-camera:
11-13 23:20:36.516 566 5011 E mm-camera:
11-13 23:20:36.516 566 5011 I mm-camera:
11-13 23:20:36.517 566 5011 E mm-camera:
11-13 23:20:36.519 566 5011 E mm-camera:
11-13 23:20:36.519 566 5011 E mm-camera:
11-13 23:20:36.519 566 5011 E mm-camera:
11-13 23:20:36.519 566 5011 E mm-camera:
11-13 23:20:36.519 566 5011 E mm-camera:
11-13 23:20:36.519 566 5011 E mm-camera:
11-13 23:20:36.520 566 5011 E mm-camera:
11-13 23:20:36.520 566 5011 E mm-camera:
11-13 23:20:36.520 566 5011 E mm-camera:
11-13 23:20:36.520 566 5011 E mm-camera:
11-13 23:20:36.520 566 5011 E mm-camera:
11-13 23:20:36.520 566 5011 E mm-camera:
11-13 23:20:36.600 566 5011 I mm-camera:
11-13 23:20:36.600 566 5011 I mm-camera:
11-13 23:20:36.600 566 5011 I mm-camera:
11-13 23:20:36.600 566 5011 I mm-camera:
11-13 23:20:36.600 566 5011 I mm-camera:
11-13 23:20:36.600 566 5011 I mm-camera:
11-13 23:20:36.600 566 5011 I mm-camera:
11-13 23:20:36.601 566 5011 I mm-camera:
11-13 23:20:36.601 566 5011 I mm-camera:
11-13 23:20:36.601 566 5011 I mm-camera:
11-13 23:20:36.601 566 5011 I mm-camera:
11-13 23:20:36.601 566 5011 I mm-camera:
11-13 23:20:36.601 566 5011 I mm-camera:
11-13 23:20:36.603 566 5011 I mm-camera:
11-13 23:20:36.604 566 5011 W mm-camera:
11-13 23:20:36.604 566 5011 W mm-camera:
11-13 23:20:36.604 566 5011 W mm-camera:
11-13 23:20:36.604 566 5011 W mm-camera:
11-13 23:20:36.606 566 5011 I mm-camera:
11-13 23:20:36.607 566 5011 I mm-camera:
11-13 23:20:36.607 566 5011 I mm-camera:
11-13 23:20:36.607 566 5011 I mm-camera:
11-13 23:20:36.607 566 5011 I mm-camera:
11-13 23:20:36.608 566 5011 I mm-camera:
11-13 23:20:36.609 566 5011 I mm-camera:
11-13 23:20:36.609 566 5011 I mm-camera:
11-13 23:20:36.609 566 5011 I mm-camera:
11-13 23:20:36.609 566 5011 I mm-camera:
11-13 23:20:36.610 566 5011 I mm-camera:
11-13 23:20:36.610 566 5011 I mm-camera:
11-13 23:20:36.611 566 5011 I mm-camera:
11-13 23:20:36.612 566 5011 I mm-camera:
11-13 23:20:36.612 566 5011 I mm-camera:
11-13 23:20:36.612 566 5011 I mm-camera:
11-13 23:20:36.612 566 5011 I mm-camera:
11-13 23:20:36.612 566 5011 W mm-camera:
11-13 23:20:36.612 566 5011 W mm-camera:
11-13 23:20:36.612 566 5011 W mm-camera:
11-13 23:20:36.612 566 5011 W mm-camera:
11-13 23:20:36.612 566 5011 I mm-camera:
11-13 23:20:36.612 566 5011 I mm-camera:
11-13 23:20:36.614 566 5011 I mm-camera:
11-13 23:20:36.614 566 5011 I mm-camera:
11-13 23:20:36.615 566 5011 I mm-camera:
11-13 23:20:36.615 566 5011 I mm-camera:
11-13 23:20:36.615 566 5011 I mm-camera:
11-13 23:20:36.616 566 5011 I mm-camera:
11-13 23:20:36.619 566 5011 I mm-camera:
11-13 23:20:36.620 566 5011 I mm-camera:
11-13 23:20:36.620 566 5011 I mm-camera:
11-13 23:20:36.620 566 5011 I mm-camera:
11-13 23:20:36.622 566 5011 I mm-camera:
11-13 23:20:36.622 566 5011 I mm-camera:
11-13 23:20:36.622 566 5011 I mm-camera:
11-13 23:20:36.627 566 5011 E mm-camera:
11-13 23:20:36.627 566 5011 E mm-camera:
11-13 23:20:36.627 566 5011 E mm-camera:
11-13 23:20:36.627 566 5011 E mm-camera:
11-13 23:20:36.627 566 5011 E mm-camera:
11-13 23:20:36.627 566 5011 E mm-camera:
11-13 23:20:36.628 566 5011 I mm-camera:
11-13 23:20:36.628 566 5011 I mm-camera:
11-13 23:20:36.642 566 5011 I mm-camera:
11-13 23:20:36.642 566 5011 I mm-camera:
11-13 23:20:36.642 566 5011 I mm-camera:
11-13 23:20:36.664 566 5011 I mm-camera:
11-13 23:20:36.664 566 5011 I mm-camera:
11-13 23:20:36.664 566 5011 I mm-camera:
11-13 23:20:36.665 566 5027 I mm-camera:
11-13 23:20:36.665 566 5011 E mm-camera:
11-13 23:20:36.666 566 5011 I mm-camera:
11-13 23:20:36.666 566 5011 I mm-camera:
11-13 23:20:36.666 566 5011 E mm-camera:
11-13 23:20:36.669 566 5027 E mm-camera:
11-13 23:20:36.669 566 5028 E mm-camera:
11-13 23:20:36.669 566 5028 E mm-camera:
11-13 23:20:36.669 566 5028 E mm-camera:
11-13 23:20:36.669 566 5028 E mm-camera:
11-13 23:20:36.670 566 5011 E mm-camera:
11-13 23:20:36.670 566 5011 I mm-camera:
11-13 23:20:36.681 566 5011 I mm-camera:
11-13 23:20:36.681 566 5011 I mm-camera:
11-13 23:20:36.681 566 5011 I mm-camera:
11-13 23:20:36.681 566 5011 I mm-camera:
11-13 23:20:36.681 566 5011 I mm-camera:
11-13 23:20:36.681 566 5011 I mm-camera:
11-13 23:20:36.681 566 5011 I mm-camera:
11-13 23:20:36.681 566 5011 I mm-camera:
11-13 23:20:36.681 566 5011 I mm-camera:
11-13 23:20:36.681 566 5011 I mm-camera:
11-13 23:20:36.681 566 5011 I mm-camera:
11-13 23:20:36.682 566 5011 I mm-camera:
11-13 23:20:36.682 566 5011 I mm-camera:
11-13 23:20:36.682 566 5011 I mm-camera:
11-13 23:20:36.683 566 5011 I mm-camera:
11-13 23:20:36.690 566 5011 I mm-camera:
11-13 23:20:36.690 566 5011 I mm-camera:
11-13 23:20:36.690 566 5011 I mm-camera:
11-13 23:20:36.690 566 5011 I mm-camera:
11-13 23:20:36.690 566 5011 I mm-camera:
11-13 23:20:36.690 566 5011 I mm-camera:
11-13 23:20:36.690 566 5011 I mm-camera:
11-13 23:20:36.690 566 5053 I mm-camera:
11-13 23:20:36.690 566 5053 I mm-camera:
11-13 23:20:36.690 566 5053 I mm-camera:
11-13 23:20:36.690 566 5053 I mm-camera:
11-13 23:20:36.690 566 5053 I mm-camera:
11-13 23:20:36.690 566 5053 I mm-camera:
11-13 23:20:36.690 566 5053 I mm-camera:
11-13 23:20:36.690 566 5053 I mm-camera:
11-13 23:20:36.690 566 5053 I mm-camera:
11-13 23:20:36.690 566 5053 I mm-camera:
11-13 23:20:36.690 566 5053 I mm-camera:
11-13 23:20:36.690 566 5053 I mm-camera:
11-13 23:20:36.691 566 5053 I mm-camera:
11-13 23:20:36.691 566 5053 I mm-camera:
11-13 23:20:36.691 566 5053 I mm-camera:
11-13 23:20:36.691 566 5053 I mm-camera:
11-13 23:20:36.691 566 5053 I mm-camera:
11-13 23:20:36.691 566 5053 I mm-camera:
11-13 23:20:36.691 566 5053 I mm-camera:
11-13 23:20:36.691 566 5053 I mm-camera:
11-13 23:20:36.691 566 5053 I mm-camera:
11-13 23:20:36.691 566 5053 I mm-camera:
11-13 23:20:36.691 566 5053 I mm-camera:
11-13 23:20:36.691 566 5053 I mm-camera:
11-13 23:20:36.700 566 5011 I mm-camera:
11-13 23:20:36.700 566 5022 I mm-camera:
11-13 23:20:36.700 566 5022 I mm-camera:
11-13 23:20:36.706 566 5011 E mm-camera:
11-13 23:20:36.707 566 5011 I mm-camera:
11-13 23:20:36.712 566 5029 I mm-camera:
11-13 23:20:36.714 566 5011 I mm-camera:
11-13 23:20:36.714 566 5011 I mm-camera: