【on property:init.svc.xxx=xxx】Android监测进程的运行状态

本文详细描述了在Android9.0平台中遇到的锁屏界面无法解锁问题,发现是由于keymaster进程崩溃重启导致keystore服务不可用。通过在init.target.rc文件中添加特定代码,实现了在keymaster重启时同步重启keystore服务,从而解决了keystore服务的可用性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在Android 9.0平台上遇到锁屏界面解不了锁,抓logcat发现keymaster有发生过crash而重启过。问题在于不是keymaster现在不能用而是keystore不能用。为了测试,进入adb mode,主动kill keymaster进程,发现此时keystore再也不能用了。对比Android 8.0发现,不管我怎么把keymaster kill,keystore仍然可用。这样一来,在Android 9.0上keystore服务进程必须在keymaster服务进程后面进行初始化,即当keymaster服务进程重启了,keystore服务进程也需要重启。

device/qcom/{$PLATFORM}/init.target.rc添加如下代码(此方法可以防止偶现keymaster发生重启导致keystore不能用的问题,但不能解决keymaster总发现异常的问题,且暂不知道会不会有其他影响,记录的目的是在某种情况下可以通过此方式来监测服务进程的运行状态):

#keystore和vendor.keymaster分别是对应服务的名字
#keystore服务定义来自system/security/keystor.rc文件
service keystore /system/bin/keystore /data/misc/keystore
    class main
    user keystore
    group keystore drmrpc readproc log
    writepid /dev/cpuset/foreground/tasks

on property:init.svc.vendor.keymaster-3-0=running
   stop keystore
   start keystore

<think>我们正在处理一个关于Android系统USB配置的问题。用户希望了解如何根据不同USB配置设置vendor.usb.pid属性值。根据提供的引用信息,我们可以逐步分析。 首先,引用[2]提到USB设备和主机之间的通信过程,以及主机如何识别USB设备(通过描述符集合)。在Android系统中,USB配置通常通过系统属性来控制。 引用[1]提到: >而persist.vendor.usb.config.extra属性并没有设置,所以为none。通过 adb shellgetprop| find"sys.usb.config"可以查看当前USB配置这表明我们可以通过系统属性(如`sys.usb.config`)来查看当前的USB配置。同时,`persist.vendor.usb.config`和`persist.vendor.usb.config.extra`等属性用于设置USB配置。用户特别关注`vendor.usb.pid`属性,这个属性通常用于设置USB产品的ID(ProductID)。在Android系统中,USB模式(如UDisk模式)对应不同的PID值。 设置规则通常如下:1.Android系统在启动时会根据默认配置或持久化属性设置USB的PID。2.当USB配置改变时(例如切换到UDisk模式),系统会重新设置PID属性。 3. `vendor.usb.pid`属性可能由`init`进程或`usbd`服务根据当前的USB配置模式进行设置。 具体步骤:-首先,系统会读取默认的USB配置(例如在`init.usb.rc`或类似init脚本中定义)。-然后,根据用户设置或系统设置,通过设置系统属性来改变USB配置。例如,设置`persist.vendor.usb.config`属性可以改变USB的配置模式。 -当USB配置模式改变时,系统会相应地设置`vendor.usb.pid`属性。不同的配置模式(如MTP、PTP、RNDIS、UDisk等)通常对应不同的PID。例如,在UDisk模式下,系统可能会设置:```vendor.usb.pid =0x1234#假设UDisk模式的PID为0x1234```在代码层面,这通常是在USB配置切换时,由底层服务(如`usbd`)设置系统属性。此外,引用[4]提到了通过vendor和product的值来创建kl文件(键盘布局文件),但这与设置PID属性关系不大,主要涉及输入设备的映射。因此,设置`vendor.usb.pid`的规则可以总结为: -系统根据当前的USB配置模式(如`persist.vendor.usb.config`的值)来动态设置`vendor.usb.pid`属性。 -具体PID值由系统预先定义,不同的配置模式对应不同的PID值。这些定义通常位于设备特定的源码中(如`device/<manufacturer>/<device>/init.usb.rc`)或内核配置中。 操作步骤:1.确定当前USB配置:通过`adb shellgetpropsys.usb.config`查看当前配置。2.设置USB配置:通过`setprop persist.vendor.usb.config <config_string>`设置持久化配置(例如`setproppersist.vendor.usb.configudisk`)。3.系统在应用该配置时,会自动设置对应的`vendor.usb.pid`属性。注意:具体的PID值需要查看设备特定的文档或源码,因为不同设备厂商可能使用不同的PID值。 相关问题: 1.如何查看Android设备当前USB配置的PID值? 2.如何自定义Android设备在特定USB模式下的PID值?3.Android系统中USB配置切换的流程是怎样的?</think>### Android系统中根据不同USB配置设置vendor.usb.pid的规则 在Android系统中,`vendor.usb.pid`属性用于设置USB设备的产品ID(Product ID),其配置规则与USB模式切换密切相关。以下是关键规则和操作步骤: #### 1. **USB配置与属性映射规则** - **动态属性绑定**: 当USB模式切换时(如切换到UDisk模式),系统通过`init`进程或`usbd`服务动态设置`vendor.usb.pid`属性。该值通常与`sys.usb.config`属性同步更新[^2]。 - **模式特定PID**: 不同USB模式(MTP、PTP、RNDIS、UDisk等)对应不同的预设PID值。例如: ```bash # UDisk模式可能设置 vendor.usb.pid = 0x1234 # 示例值 ``` 具体PID值由设备厂商在系统源码中预定义(如`device/<vendor>/<device>/init.usb.rc`)。 #### 2. **配置优先级与持久化** - **属性加载顺序**: 系统按以下顺序应用配置: 1. `persist.vendor.usb.config`(持久化存储的配置) 2. `sys.usb.config`(运行时动态配置) 3. 默认配置(`default.prop`或`init.usb.rc`) - **持久化设置**: 通过`setprop`命令设置持久化属性: ```bash adb shell setprop persist.vendor.usb.config udisk ``` 重启后系统自动应用该配置并设置对应的`vendor.usb.pid`[^1]。 #### 3. **验证与调试** - **查看当前配置**: ```bash adb shell getprop | grep "usb" # 关键输出示例 [sys.usb.config]: [udisk] [vendor.usb.pid]: [0x1234] ``` - **内核日志检查**: 通过`adb logcat | grep usb`查看USB模式切换时的内核事件和PID更新过程。 #### 4. **自定义PID值** 若需修改默认PID值: 1. **编辑init脚本**: 在`init.usb.rc`中添加模式对应的PID: ```rc on property:sys.usb.config=udisk setprop vendor.usb.pid 0x5678 # 自定义PID ``` 2. **编译系统镜像**: 修改后需重新编译`vendor.img`或`system.img`以生效[^4]。 > **注意**:PID值需符合USB-IF规范,避免与标准设备冲突。厂商通常保留`0x0xxx-0x5xxx`范围的PID用于自定义设备[^2]。 --- ### 相关问题 1. 如何在不重新编译系统的情况下临时修改Android设备的USB PID值? 2. USB枚举过程中,主机如何通过PID识别不同的设备模式? 3. 当多个USB模式共存(如`udisk+adb`)时,vendor.usb.pid的取值规则是什么? 4. Android 11+的USB配置机制相比旧版本有哪些重大变更?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值