無法使用 system/bin/r 讀取 pmic pm8937 hardware regitster 的原因
Platform
Qualcomm MSM8917 + PM8937 + PMI8940
起因
同事問我 PM8937 的 VREG_L17 如何設定成 3.3V,
從 PM8937 hardware register description 文件 查詢到有一個 bit VREG_OK 位於 PM8937 的 0x00015008,
於是想先試著讀取這個 bit 來開始 debug,
沒想到在 adb shell 下執行 system/bin/r 0x00015008 後造成 手機 異常,
原因
1。msm8917,PM8937,PMI8940 的 hardware register description 文件的的描述 都是從 memory 0 開始,
所以不能將 這三個 device 的 memory 看成是一個大的連續 momory,
這三個 device 有各自獨立的 memory area。
2。0x00015008 在 msm8917 hardware register description 文件中是位於 Unused/reserved area。
3。0x00015008 在 pm8937 hardware register description 文件中是描述 LDO17。
4。system/bin/r 是用來讀取 msm memory address,不是用來讀取 pmic memory address,
所以
adb root
adb shell "system/bin/r 0x00015008"
是讀取到 msm invalid memory address。
那寫呢?
adb root
adb shell "system/bin/r 0x00015008 0x3"
嘿嘿,
您沒看錯,
寫入是用 r 指令,
沒有 w 指令,
如何讀取 PMIC memory address
第一種
只要填入不同的 slave id address 即可。
PM8937
PM8937 slave ID 0 or 1 要看存取的 address。
adb root
adb shell mount -t debugfs none /sys/kernel/debug
adb shell "echo 0xc100 > /sys/kernel/debug/spmi/spmi-0/address"
adb shell "echo 0x100 > /sys/kernel/debug/spmi/spmi-0/count"
adb shell "cat /sys/kernel/debug/spmi/spmi-0/data"
PMI8940
PMI8940 slave ID 是 2 or 3 要看存取的 address。
adb root
adb shell mount -t debugfs none /sys/kernel/debug
adb shell "echo 0x2c100 > /sys/kernel/debug/spmi/spmi-0/address"
adb shell "echo 0x100 > /sys/kernel/debug/spmi/spmi-0/count"
adb shell "cat /sys/kernel/debug/spmi/spmi-0/data"
第二種
read data
adb root
adb shell
msm8937_64:/d/spmi/spmi-0 # echo 0x619 > address
msm8937_64:/d/spmi/spmi-0 # cat data
write data
adb root
adb shell
msm8937_64:/d/spmi/spmi-0 # echo 0x619 > address
msm8937_64:/d/spmi/spmi-0 # echo 0x39 > data
pm8937 及 pmi8940 的 register address 在 hardware register spec 有描述,
但是在實際讀寫 register 時,address 會有些許差異如下,
讀寫 pm8937 的 address 要加 0x0 slave id offset
讀寫 pmi8940 的 address 要加 0x20000 slave id offset
單獨讀寫一個 byte
read data
adb root
adb shell
cd /d/spmi/spmi-0
msm8937_64:/d/spmi/spmi-0 # echo 0x619 > address
msm8937_64:/d/spmi/spmi-0 # cat data
write data
adb root
adb shell
cd /d/spmi/spmi-0
msm8937_64:/d/spmi/spmi-0 # echo 0x619 > address
msm8937_64:/d/spmi/spmi-0 # echo 0x39 > data
讀取某個範圍的 register
read data
adb root
adb shell
cd /d/spmi/spmi-0
msm8937_64:/d/spmi/spmi-0 # echo 0x619 > address
msm8937_64:/d/spmi/spmi-0 # echo 0x30 > count
msm8937_64:/d/spmi/spmi-0 # cata data
假如資料太多,
可以 export data
C:\catch_log>adb root
C:\catch_log>adb shell "echo 0x14000 > /d/spmi/spmi-0/address"
C:\catch_log>adb shell "echo 0x166b > /d/spmi/spmi-0/count"
C:\catch_log>adb shell "cat /d/spmi/spmi-0/data" > data.log
無法使用 system/bin/r 讀取 pmic pm8937 hardware regitster 的原因的更多相关文章
- C#-Windows服務以LocalSystem賬戶安裝的話無法獲取我的文檔路徑
如圖,如果Window服務以上圖 Account安裝運行,則無法獲取到 以下路徑: System.Environment.GetFolderPath(Environment.SpecialFolder ...
- PHPExcel讀取excel數據
require_once 'PHPExcel.php'; $PHPReader = new PHPExcel_Reader_Excel2007(); $filePath = 'wjyl.xlsx'; ...
- Android Training精要(五)讀取Bitmap對象實際的尺寸和類型
讀取Bitmap對象實際的尺寸和類型 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecode ...
- Android编译自己的程序到/system/bin
背景 有时候我们想创建一个程序,放在系统中,供其他APP执行.我们知道,在生成system.img的时候,编译系统会将out/target/product/[product]/system/bin目录 ...
- android中:/system/bin/sh: : No such file or directory错误
将一个raspberry下编译好的可执行文件放在android的system/bin下,修改为777权限,运行,出现下面的错误: /system/bin/sh: XXX: No such file o ...
- [转]SQL Server 安全性概論與無法刪除資料庫使用者的解決辦法
經常有人來問我特定 SQL Server 資料庫裡的使用者無法刪除的問題,這問題其實跟 SQL Server 的安全性架構有很大關係,解決這個問題當然還是瞭解觀念的重要性大於知道如何解決問題.除了講解 ...
- C#、VSTO讀取Excel類
之前寫的類存在Excel進程不能結束的Bug,重寫ExcelReader類,類實例清理時Excel進程自動結束. class ExcelReader { // Excel Object public ...
- Android中实现对/system/bin/surfaceflinger进程进行拦截和注入
对于Android for arm上的so注入(inject)和挂钩(hook),网上已有牛人给出了代码inject.由于实现中的ptrace函数是依赖于平台的,所以不经改动只能用于arm平台.本文将 ...
- SSIS 無法將保護的 XML 節點 "DTS:Password" 解密,錯誤為 0x8009000B "機碼用在特定狀態時無效
发现之前部署的SSIS,执行失败,查看日志 來源: 描述: 無法將保護的 XML 節點 -- ::-- ::-- :: DataReader 來源 [] 描述: System.Exception: S ...
随机推荐
- C、C++混合调用——博客收藏
C与C++接口相互调用:https://www.cnblogs.com/feige1314/p/7890982.html C.C++混合调用:https://www.cnblogs.com/xuany ...
- Spark性能优化:开发调优篇
1.前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算 ...
- Detecting iOS
Detecting iOS I am not a fan of User Agent sniffing, but here is how you would do it: var iOS = /iPa ...
- HDU 5739 Fantasia 双连通分量 树形DP
题意: 给出一个无向图,每个顶点有一个权值\(w\),一个连通分量的权值为各个顶点的权值的乘积,一个图的权值为所有连通分量权值之和. 设删除顶点\(i\)后的图\(G_i\)的权值为\(z_i\),求 ...
- msconfig.exe
msconfig.exe 编辑 本词条缺少概述.名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 中文名 微软系统配置实用程序 外文名 msconfig.exe 出品者 Micros ...
- Java并发之(1):volatile关键字(TIJ21-21.3.3 21.3.4)
Java并发Java服务器端编程的一项必备技能. ** 1 简介 volatile是java中的一个保留关键字,它在英语中的含义是易变的,不稳定的.volatile像final.static等其 ...
- gulp基本入门
gulp用于自动化和提高工作流,类似于grunt.gulp适用于nodejs平台. gulp基础: gulp两个主要的功能是读取想要处理的文件,把处理好的文件放到指定的地方gulp.src()找出 ...
- seajs引入jquery
seajs 2.2.1在config文件中preload一次jquery,就可以在整个项目中使用jquery.如下: seajs.on('exec', function(module) { if (m ...
- python中subprocess.Popen的args和shell参数的使用
subprocess模块定义了一个类: Popen class subprocess.Popen( args, bufsize=0, executable=None, ...
- Python+Selenium练习篇之21-如何截图并保存
本文介绍如何利用Selenium的方法进行截图,在测试过程中,是有必要截图,特别是遇到错误的时候进行截图.在selenium for python中主要有三个截图方法,我们挑选其中最常用的一种. ge ...