一、问题描述
自己定义一个系统属性,实现对属性值的修改。
系统版本:android13
平台:mtk
二、参考修改示例
(一)方法一:系统配置
1. device.mk 设置系统属性
文件路径:device/mediateksample/xxx/device.mk
PRODUCT_PROPERTY_OVERRIDES += persist.vendor.chaoqing=1 |
(二)源码中修改
1. 源码中设置属性
文件路径:vendor/mediatek/proprietary/hardware/audio/xxx/aud_drv/AudioALSADeviceParser.cpp
// 使用此方法,不需要在 device.mk 中进行设置 const char *PROPERTY_CHAOQING_STATE = "persist.vendor.chaoqing"; ... // 在需要设置函数内调用 property_set void AudioALSADeviceParser::getCardName() { #if defined(MTK_AUDIO_KS) char version_value[PROP_VALUE_MAX]; // 用于存储属性值的缓冲区 // 设置自定义系统属性值
if (ret > 0) { } |
除了上述添加,还需要添加 selinux 权限,未添加 selinux 权限提示信息如下图:
2. 添加系统属性 selinux 权限
文件路径:device/mediatek/sepolicy/base/vendor/property.te
typeattribute vendor_mtk_drm_prop mtk_core_property_type; typeattribute vendor_chaoqing_prop mtk_core_property_type; ... vendor_restricted_prop(vendor_mtk_drm_prop) vendor_restricted_prop(vendor_chaoqing_prop) |
文件路径:device/mediatek/sepolicy/base/vendor/property_contexts
# mtk drm properties persist.vendor.mtk.drm. u:object_r:vendor_mtk_drm_prop:s0 persist.vendor.chaoqing u:object_r:vendor_chaoqing_prop:s0 |
文件路径:device/mediatek/sepolicy/base/vendor/vendor_init.te
# Purpose: allow vendor_init to set default value of the properties set_prop(vendor_init, vendor_mtk_drm_prop) set_prop(vendor_init, vendor_chaoqing_prop) |
文件路径:device/mediatek/sepolicy/base/vendor/mtk_hal_audio.te
allow mtk_hal_audio sysfs_HDMI_rx_status:file { getattr open read }; allow mtk_hal_audio vendor_chaoqing_prop:property_service { set }; |
3. 结果展示
注:
添加 selinux 权限时,系统属性一定要遵循 android 标准,即 persist.vendor.xxx、vendor.xxx、ro.vendor.xxx 等前缀。
三、相关知识
1. 查看命令
- 查看系统属性命令 getprop
- 设置系统属性命令 setprop [ 属性 ] 值
- 属性文件 system/bulid.prop
2. PRODUCT_PROPERTY_OVERRIDES 含义
PRODUCT_PROPERTY_OVERRIDES 变量来定义新的系统属性或覆盖默认属性,例如:
PRODUCT_PROPERTY_OVERRIDES += \ ro.product.name=MyDeviceName \ persist.service.debug=1 |
这里定义了两个属性,ro.product.name 是一个只读属性,用于标识设备的名称;persist.service.debug 是一个持久属性,可以被设置为调试模式。