高通msm mdm 总结
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 总结的更多相关文章
- 高通QSD MSM APQ区别
高通msm是Mobile Station Modem 的缩写,即移动基带工作站,是指带有基带芯片的移动处理器,实际就是基带内置的手机处理器(soc)系列. qsd是qualcomm snapdrago ...
- 高通android开发摘要
一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载. 将高通产权的代码放到:vendor/qcom/proprietary 1. 设置bms一些参 ...
- 高通Android display架构分析
目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...
- 高通Android display分析【转】
本文转载自:http://blog.csdn.net/zhangchiytu/article/details/6777039 高通7系列硬件架构分析 如上图,高通7系列 Display的硬件部分主要由 ...
- 高通MSM8255 GPS 调试分析&&Android系统之Broadcom GPS 移植【转】
本文转载自:http://blog.csdn.net/gabbzang/article/details/12063031 http://blog.csdn.NET/dwyane_zhang/artic ...
- 高通计划停用MSM 以SDM为移动平台命名【转】
本文转载自:http://www.eeworld.com.cn/xfdz/article_2017061566458.html 据外媒报道,高通公司计划停用骁龙移动平台型号前面的MSM字样,以SDM取 ...
- Linux加载DTS设备节点的过程(以高通8974平台为例)
DTS是Device Tree Source的缩写,用来描述设备的硬件细节.在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码, ...
- 高通安卓调试LCD几方面总结
来公司上班现在已经整整一个月了,蔽人不才,能力有限,学习进度缓慢,不过也是有一点点的收获与心得,在这里写出来与大家分享,养成良好的记录习惯也免得后忘记. 不啰嗦了,开入正题.来公司一个月左右的时间,主 ...
- Android图形合成和显示系统---基于高通MSM8k MDP4平台
介绍了Android SurfaceFlinger层次以下的图形合成和显示系统,主要基于高通MSM8k MDP4x平台. 做为Android Display专题.SurfaceFlinger的详细介绍 ...
随机推荐
- 转---秒杀多线程第十四篇 读者写者问题继 读写锁SRWLock
在<秒杀多线程第十一篇读者写者问题>文章中我们使用事件和一个记录读者个数的变量来解决读者写者问题.问题虽然得到了解决,但代码有点复杂.本篇将介绍一种新方法——读写锁SRWLock来解决这一 ...
- Redis windows环境安装 以及 redis整合spring
Redis对于Linux是官方支持的,安装和使用没有什么好说的,普通使用按照官方指导,5分钟以内就能搞定.详情请参考: http://redis.io/download Redis官方是不支持wind ...
- BZOJ3598 SCOI2014方伯伯的商场之旅(数位dp)
看到数据范围就可以猜到数位dp了.显然对于一个数最后移到的位置应该是其中位数.于是考虑枚举移到的位置,那么设其左边和为l,左右边和为r,该位置数为p,则需要满足l+p>=r且r+p>=l. ...
- BZOJ3743 COCI2015Kamp(树形dp)
设f[i]为由i开始遍历完子树内所要求的点的最短时间,g[i]为由i开始遍历完子树内所要求的点最后回到i的最短时间.则g[i]=Σ(g[j]+2),f[i]=min{g[i]-g[j]+f[j]-1} ...
- P3629 [APIO2010]巡逻
题目描述 在一个地区中有 n 个村庄,编号为 1, 2, ..., n.有 n – 1 条道路连接着这些村 庄,每条道路刚好连接两个村庄,从任何一个村庄,都可以通过这些道路到达其 他任一个村庄.每条道 ...
- Going in Cycle!! UVA - 11090(二分+判断环路 )
题意: 给定一个n个点m条边的加权有向图,求平均权值最小的回路 解析: 首先肯定是想到找出环路 然后..呵..呵..呵呵... 显然不现实!! 二分大法好 ....去猜结果 然后带入验证 ...真是 ...
- linux内核分析 第四周 扒开系统调用的三层皮(上)
一.用户态.内核态和中断处理过程 系统调用是用户通过库函数方式:库函数帮我们把系统调用封装起来. 内核态:高级别执行,可以使用特权指令,访问任意的物理地址. 用户态:低级别执行,代码范围受到限制. C ...
- 【linux】/dev/null与/dev/zero详解
引用别人的资源,收藏: http://www.cnblogs.com/xianghang123/archive/2012/03/23/2413381.html
- 【分块】【P2801】教主的魔法
Description 给你一个长度为 \(n\) 的序列,要求资瓷区间加,查询区间大于等于 \(k\) 的数的个数 Input 第一行是 \(n~,~Q\) 代表序列长度和操作个数 下面一行代表序列 ...
- [USACO12DEC] 逃跑的BarnRunning Away From…(主席树)
[USACO12DEC]逃跑的BarnRunning Away From- 题目描述 It's milking time at Farmer John's farm, but the cows hav ...