無法使用 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 ...
随机推荐
- Ansible学习 Inventory文件
Ansible可同时操作属于一个组的多台主机,组与主机之间关系配置在inventory文件中,inventory默认的配置文件是/etc/ansible/hosts 1.在/etc/ansible/h ...
- Java集合框架汇总
HashMap是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的.HashMap最多只允许一条记录的键为NUL ...
- 精通Spring Boot---使用@ControllerAdvice处理异常
在Spring 3.2中,新增了@ControllerAdvice.@RestControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@Mode ...
- Python9-MySQL-MySQL存储过程-视图-触发器-函数-day45
视图:某个查询语句设置别名,日后方便使用 CREATE VIEW v1 as SELECT * FROM student WHERE sid >10 -创建: create view 视图名称 ...
- The 2018 ACM-ICPC Asia Qingdao Regional Contest(青岛网络赛)
A Live Love 水 #include <algorithm> #include<cstdio> #include<cstring> using namesp ...
- git初次建立远程仓库问题
git "Could not read from remote repository.Please make sure you have the correct access rights. ...
- 实验一 查看CPU和内存,用机器指令和汇编指令编程
(1):使用debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中内存的变化. 机器码 汇编指令 b8 20 4e mov ax,4E20H 05 ...
- 快速从mysqldump文件中恢复一个表
快速从较大的mysqldump文件中恢复一个表到数据库中: 1.先获取目标表(md_gas_check_record)在文件中的位置 [publish@LF-PRO-DB-01 ~]$ cat dby ...
- 大数据面试(HR电话了解)
1什么是HA集群? 所谓HA,即高可用(7*24小时不中断服务) HA集群是hadoop高可用集群,即有两个namenode,一个active,一个stanby,active的name挂掉之后,sta ...
- 创建数据收集器集(DSC)
TechNet 库 Windows Server Windows Server 2008 R2 und Windows Server 2008 按类别提供的 Windows Server 内容 按类别 ...