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 的原因的更多相关文章

  1. C#-Windows服務以LocalSystem賬戶安裝的話無法獲取我的文檔路徑

    如圖,如果Window服務以上圖 Account安裝運行,則無法獲取到 以下路徑: System.Environment.GetFolderPath(Environment.SpecialFolder ...

  2. PHPExcel讀取excel數據

    require_once 'PHPExcel.php'; $PHPReader = new PHPExcel_Reader_Excel2007(); $filePath = 'wjyl.xlsx'; ...

  3. Android Training精要(五)讀取Bitmap對象實際的尺寸和類型

    讀取Bitmap對象實際的尺寸和類型 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecode ...

  4. Android编译自己的程序到/system/bin

    背景 有时候我们想创建一个程序,放在系统中,供其他APP执行.我们知道,在生成system.img的时候,编译系统会将out/target/product/[product]/system/bin目录 ...

  5. android中:/system/bin/sh: : No such file or directory错误

    将一个raspberry下编译好的可执行文件放在android的system/bin下,修改为777权限,运行,出现下面的错误: /system/bin/sh: XXX: No such file o ...

  6. [转]SQL Server 安全性概論與無法刪除資料庫使用者的解決辦法

    經常有人來問我特定 SQL Server 資料庫裡的使用者無法刪除的問題,這問題其實跟 SQL Server 的安全性架構有很大關係,解決這個問題當然還是瞭解觀念的重要性大於知道如何解決問題.除了講解 ...

  7. C#、VSTO讀取Excel類

    之前寫的類存在Excel進程不能結束的Bug,重寫ExcelReader類,類實例清理時Excel進程自動結束. class ExcelReader { // Excel Object public ...

  8. Android中实现对/system/bin/surfaceflinger进程进行拦截和注入

    对于Android for arm上的so注入(inject)和挂钩(hook),网上已有牛人给出了代码inject.由于实现中的ptrace函数是依赖于平台的,所以不经改动只能用于arm平台.本文将 ...

  9. SSIS 無法將保護的 XML 節點 "DTS:Password" 解密,錯誤為 0x8009000B "機碼用在特定狀態時無效

    发现之前部署的SSIS,执行失败,查看日志 來源: 描述: 無法將保護的 XML 節點 -- ::-- ::-- :: DataReader 來源 [] 描述: System.Exception: S ...

随机推荐

  1. JZOJ 5838. 旅游路线 最大子段和

    5838. 旅游路线 Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limits   Goto ProblemSet Descrip ...

  2. Java总结 - List实现类ArrayList&LinkedList

    本文是根据源码进行学习的,如果我有什么理解不对的地方请多指正,谢谢您 上面基本就是List集合类的类图关系了,图中省略掉了比如Cloneable等标记接口,那么List分别具体的主要实现类有:Arra ...

  3. Charles Babbage【查尔斯·巴贝奇】

    Charles Babbage When Babbage was working at Cambridge, a new idea occurred to him. 巴贝奇在剑桥工作的时候,脑海中有了 ...

  4. stm32的systick原理与应用

    /* SysTick滴答定时器 一.功能 SysTick定时器是一个简单的定时器,CM3\CM4内核芯片都具备此定时器.SysTick定时器常用来做延时,采用实时系统时则用来做系统时钟.无论用作延时还 ...

  5. printf("\033[1;33m ***** \033[0m \n");

    printf("\033[1;33m Hello World. \033[0m \n"); 颜色如下: none = "\033[0m" black = &qu ...

  6. Problem E. TeaTree - HDU - 6430 (树的启发式合并)

    题意 有一棵树,每个节点有一个权值. 任何两个不同的节点都会把他们权值的\(gcd\)告诉他们的\(LCA\)节点.问每个节点被告诉的最大的数. 题解 第一次接触到树的启发式合并. 用一个set维护每 ...

  7. U1

    如果 activity_main.xml没有xml代码可以对图像右键 go to mxl同时可以在design  和  text  切换 在安装了Android Studio3.3版本之后,第一个He ...

  8. 关于mongodb的安装运行

    最近在学习node.js,在实例的项目中要用到mongodb做数据库.于是便记录一下mongodb的安装流程和遇到的坑: 1.下载地址:http://www.mongodb.org/downloads ...

  9. 云中Active Directory是如何工作的?

    [TechTarget中国原创] 微软公司1999年在Windows Server 2000中引入Active Directory功能.后期的Windows Server版本中陆续进行改善提升,Win ...

  10. 无法启动此程序,因为计算机中丢失OgreMain_d.dll。尝试重新安装该程序以解决此问题。

    这个问题很奇怪啊,不明白什么原因? 打开VS2010,打开项目,运行,就提示”无法启动此程序,因为计算机中丢失OgreMain_d.dll.尝试重新安装该程序以解决此问题.“ 然后就去配置环境变量,包 ...