[Linux Device Driver] 高通平台分区学习

本文详细介绍了Android系统的各个分区及其作用,包括SSD、persist、misc等,并解释了这些分区如何影响设备的安全性和功能性。

1. 分区名字 && 作用

ssd ———ssd diag模块的分区,存储加密的RSA密钥。

persist ———其中包含在设备出厂后不应该更改的数据,例如:芯片的校准数据(WIFI,bt,相机等),证书和其他与安全性相关的文件。可以进行高级恢复或安卓系统维护工作。

misc ———Miscellaneous的简称,cpu加电之后,启动bootloader,就会读取MISC分区获得来自Main system和Recovery的消息,并以此决定做何种操作。

keystore ———密钥库服务分区,隶属于高通QSEE组件(高通安全执行环境,Qualcomm Security Executing Environment),用于加密data分区,旨在保障用户数据的安全。

metadata ———这个也是用于加密的,这里面放了一个key,如果没有这个key,userdata数据不能访问。logcat就有类似找不到这个key的错误:
No key found in /metadata/vold/metadata_encryption/key。

frp ———Factory Reset Protection的简称,自Android 5.0后引入,为了防止手机被盗后被刷机而引入的一种保护机制。下面是一个例子,但是其作用更加复杂,远不止一下一种,总之为了保护用户安全以及权益:
比如手机被盗了,偷窃者通过recovery模式恢复出厂设置,但是在设备的数据都被清除之后,重启进入设备需要输入原来的账号密码。

super ———包含system.img、vendor.img、product.img; android11还会包含odm.img和system_ext.img。

system ———包含device、 frameworks、packages以及部分的权限 。

vendor ———包含部分的权限,以及hardware。

odm ———放一些标志位、sn号、gpio测试、国家码。

product ———product分区目前不知道干啥的,看名字和产品有关。

userdata ———这个分区也叫用户数据区,包含了用户的数据:联系人、短信、设置、用户安装的程序;擦除这个分区,本质上等同于手机恢复出厂设置,也就是手机系统第一次启动时的状态,或者是最后一次安装官方或第三方ROM后的状态。该分区挂在/data目录下。在Recovery程序中进行的“data/factory reset ”操作就是在擦除这个分区。

rawdump ———系统crash发生时,抓取crash ramdump。

PrimaryGPT ———android系统分区相关。

BackupGPT ———android系统分区相关。

xbl&abl ——— 高通引入了UEFI,用来代替LK(Little Kernel); 其实这玩意在电脑上早被应用了,用于取代bios,手机&物联网IOT也是最近才开始应用。高通UEFI由XBL和ABL两部分组成。XBL负责芯片驱动及充电等核心应用功能。ABL包括芯片无关的应用如fastboot。 XBL核心是none-HLOS boot_image代码的一部分,属于高通私有代码;ABL则在开源Linux Android代码树里。LK的设备驱动都放在了XBL核心,Linux加载启动及fastboot等功能组件则作为独立的UEFI应用存在。编译方法就是make aboot。

ALIGN_TO_128K_1 ———暂时不知道干啥的,目前被清空。

cdt ———高通平台使用CDT(Configure Data Table)来存储平台信息和内存参数,CDT默认以数组方式存放在boot_images的源文件中,并最终编译到sbl1中;CDT也可以保存到emmc或eeprom中,在启动过程中加载;此外,我们可以修改部分平台信息比如说msm-id来代码兼容(满足客制化的特殊需求)。

ddr ———根据名字,应该是存储内存相关参数或者配置的,这个我司目前是清空。

last_parti ———不知道干啥的,目前啥也没烧录。

aop ———modem侧的,不知道干啥的。

tz ———modem那边trustzone的修改,和安全有关。

multiimgoem_a ———modem侧的,不知道干啥的。

hyp ———管理程序映像。

modem ———负责处理通讯协议相关的基带镜像:NON-HLOS.bin。

bluetooth ———根据名字,应该是蓝牙相关的。

dsp ———modem侧的,烧录adsp,比如高通的音视频算法就在这里,语音增强,回声抑制、降噪等。

keymaster ———加密相关的。

boot ———目前android10、android11是kernel、以及部分vendor下面的代码以及设备树。

recovery ———这是专门为备份而设计的,恢复分区可以视为备用启动分区。

vbmeta ———存放校验签名,给bootloader用的。

dtbo ———kernel以及vendor下面的设备树文件。

imagefv ———不知道干啥的。

core_nhlos ———烧录Core_NON-HLOS.bin,这个不晓得干啥的,问了高通说不用管,可能是把一些高通一些机密的modem代码封装了。

fsg ———存射频相关的参数。比如有的产品要出口欧洲,有的要出口北美,这个地方就有差异。

2. 参考链接

  1. https://blog.youkuaiyun.com/ly890700/article/details/67634784
  2. https://www.cnblogs.com/zzb-Dream-90Time/p/6557716.html
<think>嗯,用户的问题是关于高通平台芯片上,user版本无法使用QCAP解压,而user_debug版本却可以正常解析的原因。我需要先理解QCAP是什么,以及user和user_debug版本的区别。 首先,QCAP应该是高通的某种抓取或分析工具生成的数据包,可能用于调试或日志分析。用户提到解压失败,可能涉及权限、工具链差异或编译选项的不同。 接下来,user和user_debug版本的区别通常在于编译配置。user_debug版本可能启用了更多的调试功能,比如adb root权限、更详细的日志记录,或者内核符号和驱动模块的开启。而user版本为了安全和性能考虑,通常会关闭这些调试功能,可能限制某些底层访问权限。 可能的原因有几个方面:权限问题,比如user版本没有足够的权限访问某些设备节点或文件;调试工具链的缺失,比如user版本可能没有包含QCAP依赖的库或工具;内核配置差异,比如某些调试接口在user版本中被禁用;还有可能是签名或安全策略的限制,导致user版本无法执行解压操作。 需要进一步考虑的是,QCAP解压是否需要特定的调试符号或内核模块支持,而这些在user版本中被移除以减少体积或提高安全性。此外,安全启动机制如DM-Verity可能会在user版本中阻止修改系统分区,影响解压过程。 可能还需要查看日志,比如adb logcat或内核日志,来确认解压失败的具体错误信息。如果权限被拒绝,可能需要检查SELinux策略是否有差异,user_debug版本可能有更宽松的策略。 总结起来,主要原因可能集中在权限、调试功能启用、工具链完整性和安全策略这几个方面。需要逐一对比两个版本的编译配置和运行时环境,找出具体差异点。</think>在高通平台芯片上,user版本与user_debug版本的QCAP解压行为差异主要与以下系统级配置和权限控制相关: ### 一、核心原因分析 1. **调试工具链差异** user_debug版本默认包含完整的调试工具链(如$adb\ root$权限、$diag\ char\ driver$驱动模块),而user版本为优化安全性和体积会移除这些组件。QCAP解析依赖$QDSS/QDLogger$等调试接口,在user版本中可能被禁用或阉割[^1]。 2. **内核配置限制** 关键调试节点权限不同: ```bash # user_debug版本 /dev/diag 0660 system system # user版本 /dev/diag 0640 radio system ``` user版本通过$CONFIG_SECURITY_SELINUX$强制限制非特权进程访问诊断接口[^2]。 3. **签名验证机制** user版本启用严格的分区验证($dm-verity$),会拦截对$system/bin/debuggerd$等调试组件的修改尝试,而QCAP解压可能涉及临时文件写入操作[^3]。 ### 二、技术验证方法 1. 通过$adb shell ls -lZ /sys/bus/coresight/devices$检查调试设备节点SELinux标签 2. 对比编译配置差异: ```makefile # user_debug版本编译配置 BOARD_USES_FULL_DEBUG_SYMBOLS := true BOARD_GENERATE_DEX_DEBUG := true ``` 3. 检查内核日志过滤: ```dmesg | grep "diag:" [user版本] diag: Process 1234 attempted invalid access to diag char device ``` ### 三、解决方案建议 1. **临时调试方案**: ```bash adb root adb shell setenforce 0 ``` 2. **正式版本适配**: 在$device.mk$中添加: ```makefile PRODUCT_PACKAGES += qcap_parser PRODUCT_PROPERTY_OVERRIDES += persist.vendor.dbg.qcap.enable=1 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值