1. svn 获取工程代码命令:svn co svn+ssh://10.20.30.18/svn-repos/msm8916/branches/LA1.1-CS-r113502.2

2. 如何确定那些dtsi文件实际会用到。          修改代码 kernel/arch/arm/kernel/devtree.c中的函数 setup_machine_fdt 中以下这行:          pr_info("Machine: %s, model:%s\n", mdesc_best->name, model); 为          pr_err("Machine: %s, model:%s\n", mdesc_best->name, model);          并在 kenel log中查找关键字"Machine", 找到对应的module。          在目录 kernel/arch/arm/boot/dts下用以下命令查找dts  文件          grep model *.dts | grep "8916 MTP" ,其中 "8916 MTP" 就是以上 kernel log中找到的 model 名字。          用命令 grep include XXXX 查找 dtsi 文件,XXXX就是 上步查找到的dts 文件。

3. 解决JAVA 版本不对导致编译 java 原文件出错的问题。       Ubuntu 原先安装的JAVA版本是 1.6.0_24, 编译android 4.4 时导致编译JAVA文件出错。       需要重新安装版本为1.6.0_26版本的JAVA,方法如下:       (1). 把sun-java-jdk拷贝到unbuntu,给该目录下的3个文件添加可执行权限。 (2). 用以下命令安装:      sudo dpkg -i sun-java6-bin_6.26-0squeeze1_amd64.deb sun-java6-jdk_6.26-0squeeze1_amd64.deb sun-java6-jre_6.26-0squeeze1_all.deb

4. 调试质量不好的SD卡一般方法:       (1). 打开宏 MMC_DEBUG 可以查看以下LOG信息。       (2). 在函数 mmc_init_card 中每个发送命令之间加延时。       (3). 增加命令 cmd->cmd_timeout_ms 与 数据 data->timeout_ns 的超时时间。       (4). 增加GPIO的驱动能力,比如修改 msm8916.dtsi, msm8916-pinctrl.dtsi, 增加GPIO的驱动电流。

5. 获取工程代码,编译出错,错误信息:zip error: Invalid command arguments (cannot repeat names in zip file)    原因:svn 版本较低,需要升级 svn 版本到 1.7.9    解决方案:How to build svn 1.7.9,any puzzle pls contact zhanghongliang:       1, download subversion-1.7.9.tar.bz2 from http://subversion.apache.org/download/ 2, download apr-1.4.6.tar.bz2 & apr-util-1.5.2.tar.bz2 from http://apr.apache.org/download.cgi 3, download sqlite-autoconf-3071602.tar.gz from http://www.sqlite.org/download.html 4, un-tar sqlite-autoconf and make install it:   cd  sqlite-autoconf-3071602 ./configure sudo make sudo make install 5, un-tar apr-1.4.6 apr-util-1.5.2 into subversion folder, rename them to apr & apr-util 6, run ./configure, make, make install

6. 解决Ubuntu 下 adb 权限问题。         连接手机到 Ubuntu 系统,adb devices 提示:         List of devices attached                    ????????????    no permissions 这是因为访问adb设备需要root权限。 用以下命令修改 adb 权限可以解决问题。 sudo chown root:root adb sudo chmod a+x adb sudo chmod a+s adb adb kill-server

7. 用QCAT工具修改手机来电铃声音量。       (1). 在线修改            a. 打开QACT,点击 connect to phone, 连上手机。            b. 在 Audio use case 拦选 Audio PlayBack, Device us case 选 SPKR_PHONE_MONO            c. 在 CODEC_GAIN 栏选相应的增益值,比如9DB            d. 在手机端的设置菜单的铃声音量调节里面可以确认调整后的结果。            e. 可以在file菜单中把结果保存为文件。        (2). 离线修改文件,把改后的文件push 到手机            a. 打开QACT, 电击 Open File            b. 按以上b,c步骤修改增益值。            c. 在 file 菜单中保存文件结果。            d. 用adb 命令把结果文件 QRD_Speaker_cal.acdb push 到目录 /etc/acdbdata/QRD 下。

8. 解决 Ubuntu 系统上 VM VirtualBox 虚拟机识别USB设备问题。          需要修改组配置文件 /etc/group, 把用户加到组 vboxusers 里面去。          比如:vboxusers:x:126:topwise,zxc          vboxsuers是虚拟机的组,zxc是用户。

9. 把RAMDUMP抓到SD卡。           1. 确认2个宏是否定义在boot_proc代码中, FEATURE_BOOT_RAMDUMPS_TO_SD_CARD, SD_PATH           2. 在SD的根目录下创建文件 rdcookie.txt           3. 模拟一个死机条件,可以抓取RAMDUMPS,抓取的RAMDUMPS放在SD卡根目录的数字标号的目录下,抓完RAMDUMPS后手机自动重启。

10. 解析RAMDUP命令:  python ramparse.py --vmlinux /home/zxc/share/ramdump/1/vmlinux --auto-dump /home/zxc/share/ramdump/1 --gdb-path /usr/bin/gdb --nm-path  /usr/bin/nm --print-rtb 输出所有信息 python ramparse.py --vmlinux /home/zxc/share/ramdump/1/vmlinux --auto-dump /home/zxc/share/ramdump/1 --gdb-path /usr/bin/gdb --nm-path  /usr/bin/nm -x 把结果输出到一个目录,比如目录 dumpresult python ramparse.py --vmlinux /home/zxc/share/ramdump/1/vmlinux --auto-dump /home/zxc/share/ramdump/1 --gdb-path /usr/bin/gdb --nm-path /usr/bin/nm -x -o dumpresult

11. 通过 adb 发命令来触发 kernel panic 抓ramdump     adb shell     echo c > /proc/sysrq-trigger          设置 ramdump 属性为1,才能抓ramdump     setprop persist.sys.dload.enable 1          通过QXDM模拟死机抓DUMP,连上QXDM, 在command 里面输入以下命令:     send_data 75 37 03 00          可以用QPST Configuration 来抓RAMDUMP     RAMDUMP保存在目录 C:\Documents and Settings\All Users\Application Data\Qualcomm\QPST\Sahara\ 下.

1. 修改I2C_4的驱动能力解决I2C通信不稳定问题。         由于I2C_4的通信不稳定导致SMB1360充电功能不正常,         解决方案是修改文件msm8916-pinctrl.dtsi 中代码:         i2c_4_active: i2c_4_active {  drive-strength = <4>;  /* 4 MA */  bias-disable = <0>;  /* No PULL */  };

把驱动电流改成4mA, 基本可以解决I2C通信不稳定问题。

2. 功耗相关NV项: 1027 = 0 1895 = 0 1892 = 0 1962 = 0 4679 = 16 4201 = 0 3851 = 0 3852 = 6 7157 = 1 69745 rxd_enable = 0

3. 修改系统默认时间,现在默认时间是1970-1-1, 可以改成别的时间,比如:2010-1-1   修改内核代码中文件 Rtc-lib.c 中的函数 rtc_time_to_tm ,把1970改成2010即可。   8916平台的内核rtc控制文件为 qpnp-rtc.c

4. 解决项目P9388睡眠底电流过大问题。        测试发现睡眠时底电流有9.3mA,跟踪发现系统睡眠时陀螺仪没有进入睡眠模式,        即函数 mpu3050_suspend 没有调用 mpu3050_set_power_mode 进入睡眠模式,        修改函数 mpu3050_suspend, 屏蔽掉语句if (sensor->enable) ,        调用 mpu3050_set_power_mode(client, 0); 让陀螺仪进入睡眠,        底电流可以达到3mA以下。

5. 解决接近传感器睡眠唤醒后不能工作问题。        跟踪代码发现这个问题跟接近传感器tmd2772驱动的suspend/resume的电源控制有关,        原代码并没有实现电源控制的代码,需要在睡眠/唤醒函数 taos_suspend/taos_resume 加上disable/enable vreg_l17的代码。        调用的核心函数为:regulator_disable(data->vdd); regulator_enable(data->vdd);        在resume函数里面还需要调用函数 flush_regs 来恢复 tmd2772 到初始状态。

6. 在内核里面测试一个函数的调用时间。    (1). 先在函数的开头调用 ktime_t starttime = ktime_get(); 得到开始时间。    (2). 在函数的末尾再调用函数 calltime = ktime_get(); 得到结束时间。    (3). 调用函数 ktime_sub(calltime, starttime) 得到时间差。    (4). 用函数 ktime_to_ns 把时间差的单位转成nS级别。    (5). 再用函数 do_div(usecs64, NSEC_PER_USEC); 转成微秒级。    (6). 调用printk打印时间。具体的可以参考函数 dpm_show_time    (7). 完整的例子代码:    ktime_t starttime; ktime_t endtime; u64 usecs64; int usecs; starttime = ktime_get(); //you call your function here ... endtime = ktime_get(); usecs64 = ktime_to_ns(ktime_sub(endtime, starttime)); do_div(usecs64, NSEC_PER_USEC); usecs = usecs64; if (usecs == 0) usecs = 1; printk("%s: after %ld.%03ld msecs\n", __FUNCTION__, usecs / USEC_PER_MSEC, usecs % USEC_PER_MSEC);

7. 把函数改为宏定义,并在宏定义中打印文件名,函数名及行数,    可以确定函数是在哪个文件,函数中调用。   比如把函数 dpm_resume 原来定义的函数名改为 _dpm_resume,   然后在声明的文件 pm.h 中 把声明函数也改为 _dpm_resume,   并且在这个文件中定义宏 #define dpm_resume(state)do{printk("file = %s, func = %s, line = %d\n", __FILE__, __FUNCTION__, __LINE__); _dpm_resume(state);}while(0)   通过打印的LOG就可以确定是在 main.c 的函数 dpm_resume_end 的 866 行调用了这个函数。

8. 按20点所说的方法定位到内核睡眠/唤醒的调用函数为:  state_store->pm_suspend(/kernel/kernel/power/suspend.c)->enter_state->suspend_devices_and_enter->dpm_resume_end->dpm_resume->device_resume  睡眠函数调用流程:  (1). suspend_devices_and_enter (kernel/kernel/power/suspend.c) (2). suspend_enter (kernel/kernel/power/suspend.c) (3). error = suspend_ops->enter(state); (suspend_ops-->lpm_suspend_ops) (4). lpm_suspend_enter (kernel/drivers/cpuidle/lpm_levels.c) (5). lpm_enter_low_power (kernel/drivers/cpuidle/lpm_levels.c) (6). msm_cpu_pm_enter_sleep (kernel/drivers/power/qcom/msm-pm.c) (7). exit_stat = execute[mode](from_idle); (mode=3, execute[mode]=msm_pm_power_collapse) (8). msm_pm_power_collapse (kernel/drivers/power/qcom/msm-pm.c) (9). msm_pm_spm_power_collapse (kernel/drivers/power/qcom/msm-pm.c) (10). cpu_suspend (kernel/arch/arm/kernel/suspend.c) (11). __cpu_suspend (kernel/arch/arm/kernel/sleep.s)

9. 恢复某个文件的老的版本,比如恢复文件 frameworks/base/api/current.txt 的 744 版本。           (1). cd msm8916/branches/LA1.1-CS-r113502.2/LINUX/android/frameworks/base           (2). svn co -r 744 svn+ssh://10.20.30.18/svn-repos/msm8916/branches/LA1.1-CS-r113502.2/LINUX/android/frameworks/base/api

10. 改变USB组合配置,使手机能用DIAG口抓QXDM LOG           1. 登陆ADB              adb shell              su           2. 修改USB配置属性              setprop persist.sys.usb.config mtp,diag,adb              需要组合值需要参考文件 init.qcom.usb.rc, 需要找到这个文件里面定义的值。

11. 设置虚拟电池电量, 比如设置90%的电量      修改文件 init.qcom.post_boot.sh,加上这行代码:      echo 90 > /sys/module/qpnp_bms/parameters/bms_fake_battery

12. 在应用层修改代码调整重力传感器的工作频率。      修改文件 SensorManager.java中的方法 getDelay, 一般用的是 SENSOR_DELAY_UI 对应的值。

13. 控制背光API接口调用流程: LightsService(LightsService.java) ---> setBrightness(JAVA api 方法) ---> setLightLocked(JAVA api 方法)  ---> setLight_native(JNI 接口) ---> set_light(HAL 层接口) ---> set_light_backlight(HAL 层接口) ---> write_int(LCD_FILE, brightness);(打开文件 /sys/class/leds/lcd-backlight/brightness,写相应的值)

14. 修改电池参数配置,使项目能显示线性充电的电量百分比.      (1). 修改项目的配置dtsi文件,加上battery-data, 比如hy506项目的文件 msm8916-qrd-506.dtsi, 加上代码:       / { hy506_batterydata: qcom,battery-data { qcom,rpull-up-kohm = <100>; qcom,vref-batt-therm = <1800000>; #include "batterydata-hy506-4v2-2000mah.dtsi" }; }; (2). 修改项目 dts 文件,比如 msm8916-qrd-506.dts 在 pm8916_bms 里面加上 battery-data, 代码如下: &pm8916_bms { status = "ok"; qcom,force-bms-active-on-charger; qcom,battery-data = <&hy506_batterydata>; };

15. 用SVN查看版本1到版本2之间的修改的文件. svn log -r v1:v2 -v 比如查看 r867 到 r1152之间的修改: svn log -r 867:1152 -v

高通msm mdm 总结的更多相关文章

  1. 高通QSD MSM APQ区别

    高通msm是Mobile Station Modem 的缩写,即移动基带工作站,是指带有基带芯片的移动处理器,实际就是基带内置的手机处理器(soc)系列. qsd是qualcomm snapdrago ...

  2. 高通android开发摘要

    一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载. 将高通产权的代码放到:vendor/qcom/proprietary 1. 设置bms一些参 ...

  3. 高通Android display架构分析

    目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...

  4. 高通Android display分析【转】

    本文转载自:http://blog.csdn.net/zhangchiytu/article/details/6777039 高通7系列硬件架构分析 如上图,高通7系列 Display的硬件部分主要由 ...

  5. 高通MSM8255 GPS 调试分析&&Android系统之Broadcom GPS 移植【转】

    本文转载自:http://blog.csdn.net/gabbzang/article/details/12063031 http://blog.csdn.NET/dwyane_zhang/artic ...

  6. 高通计划停用MSM 以SDM为移动平台命名【转】

    本文转载自:http://www.eeworld.com.cn/xfdz/article_2017061566458.html 据外媒报道,高通公司计划停用骁龙移动平台型号前面的MSM字样,以SDM取 ...

  7. Linux加载DTS设备节点的过程(以高通8974平台为例)

    DTS是Device Tree Source的缩写,用来描述设备的硬件细节.在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码, ...

  8. 高通安卓调试LCD几方面总结

    来公司上班现在已经整整一个月了,蔽人不才,能力有限,学习进度缓慢,不过也是有一点点的收获与心得,在这里写出来与大家分享,养成良好的记录习惯也免得后忘记. 不啰嗦了,开入正题.来公司一个月左右的时间,主 ...

  9. Android图形合成和显示系统---基于高通MSM8k MDP4平台

    介绍了Android SurfaceFlinger层次以下的图形合成和显示系统,主要基于高通MSM8k MDP4x平台. 做为Android Display专题.SurfaceFlinger的详细介绍 ...

随机推荐

  1. 编写高效SQL语句(转)

    转至http://blog.csdn.net/u012150457/article/details/41846299 一.编写高效SQL语句 1) 选择最有效的表名顺序(仅适用于RBO模式) ORAC ...

  2. BZOJ4899 记忆的轮廓(概率期望+动态规划+决策单调性)

    容易发现跟树没什么关系,可以预处理出每个点若走向分叉点期望走多少步才能回到上个存档点,就变为链上问题了.考虑dp,显然有f[i][j]表示在i~n中设置了j个存档点,其中i设置存档点的最优期望步数.转 ...

  3. Luogu 4917 天守阁的地板(莫比乌斯反演+线性筛)

    既然已经学傻了,这个题当然是上反演辣. 对于求积的式子,考虑把[gcd=1]放到指数上.一通套路后可以得到∏D∏d∏i∏j (ijd2)μ(d) (D=1~n,d|D,i,j=1~n/D). 冷静分析 ...

  4. Contest 9

    A:搜索好难啊根本不会啊. B:暴力枚举给哪段前缀乘,维护一些前后缀最大最小值之类的东西就很好算了. #include<iostream> #include<cstdio> # ...

  5. ans menu list

    ans menu list 1. 系统配置 a) 基本设置 i. NTP ii. 配置模式 iii. 主机信息 b) 高可用性 i. 节点 ii. 路由监视器 iii. 故障转移接口群 c) 设备标识 ...

  6. hbase 安装笔记

    1.安装 在官方镜像站点下载hbase2.0,地址:https://www.apache.org/dyn/closer.lua/hbase/ 解压tar xzvf hbase-2.0.4-bin.ta ...

  7. 【MVVM 原生】原生MVVM的使用

    一.前言       前些天需要完成一个任务,该任务属于公司的一些核心代码,为了避免不必要的麻烦,任务要求不能使用第三方的MVVM框架,必须用原生的. 平时习惯了Dev与MVVMLight,遇上原生的 ...

  8. 【CF700E】Cool Slogans(后缀自动机)

    [CF700E]Cool Slogans(后缀自动机) 题面 洛谷 CodeForces 题解 构建后缀自动机,求出后缀树 现在有个比较明显的\(dp\) 设\(f[i]\)表示从上而下到达当前点能够 ...

  9. 【省选水题集Day1】一起来AK水题吧! 题解(更新到B)

    题目:http://www.cnblogs.com/ljc20020730/p/6937936.html 水题A:[AHOI2001]质数和分解 安徽省选OI原题!简单Dp. 一看就是完全背包求方案数 ...

  10. WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)复现

    WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)                                                -----by  ba ...