(1)系统启动时设置属性

//vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.cint boot_linux_fdt(void *kernel, unsigned *tags,unsigned machtype,void *ramdisk, unsigned ramdisk_sz){void *fdt = tags;int ret;int offset;char tmpbuf[TMPBUF_SIZE];dt_dram_info mem_reg_property[128];//...//add startsnprintf(tmpbuf, TMPBUF_SIZE, "hct_cts_flag=%d", read_hct_cts_info());cmdline_append(tmpbuf);pal_log_info("dxf_ tmpbuf %s\n",tmpbuf);if(strstr(tmpbuf, "hct_cts_flag=1") != NULL) {cmdline_append(tmpbuf);}//add end//add startsnprintf(tmpbuf, TMPBUF_SIZE, "androidboot.cts.flag=%s","true");cmdline_append(tmpbuf);//add end//...
}

通过cmdline可以读取到如下信息:

//cat proc/cmdlineconsole=tty0 console=ttyS0,921600n1 root=/dev/ram vmalloc=400M slub_debug=OFZPU page_owner=on swiotlb=noforce cma=0
firmware_class.path=/vendor/firmware loop.max_part=7 has_battery_removed=0 loop.max_part=7
androidboot.boot_devices=bootdevice,soc/11230000.mmc,11230000.mmc,soc/11230000.msdc,11230000.msdc,soc/11270000.ufshci,11270000.ufshci ramoops.mem_address=0x47c90000 ramoops.mem_size=0xe0000 ramoops.pmsg_size=0x10000 ramoops.console_size=0x40000 bootopt=64S3,32N2,64N2 buildvariant=userdebug
root=/dev/ram androidboot.vbmeta.device=PARTUUID=d722c721-0dee-4cb8-8a83-2c63cd1393c7 androidboot.vbmeta.avb_version=1.2
androidboot.vbmeta.device_state=locked androidboot.veritymode=enforcing androidboot.veritymode.managed=yes
androidboot.slot_suffix=_a androidboot.slot=a androidboot.verifiedbootstate=green androidboot.atm=disabled
androidboot.force_normal_boot=1 androidboot.meta_log_disable=0 lpddr_used_index=15 flash_type=3 hct_cts_flag=0
androidboot.cts.device=0 androidboot.cts.p901b=0 mtk_printk_ctrl.disable_uart=0 androidboot.serialno=0123456789ABCDEF
androidboot.bootreason=PMIC_cold_reboot gpt=1 usb2jtag_mode=0 androidboot.dtb_idx=0 androidboot.dtbo_idx=0

(2)不同的语言读取属性

在系统启动时会在init.cpp文件中调用property_service.cpp的PropertyInit函数,进而调用ProcessKernelCmdline函数并将androidboot.替换成ro.boot.来进行使用。

//system/core/init/property_service.cppstatic void ProcessKernelCmdline() {bool for_emulator = false;ImportKernelCmdline([&](const std::string& key, const std::string& value) {if (key == "qemu") {for_emulator = true;} else if (StartsWith(key, "androidboot.")) {InitPropertySet("ro.boot." + key.substr(12), value);}});if (for_emulator) {ImportKernelCmdline([&](const std::string& key, const std::string& value) {// In the emulator, export any kernel option with the "ro.kernel." prefix.InitPropertySet("ro.kernel." + key, value);});}}

可以参考如下使用:

(A)C++中使用

(A.1)

 CUSTOM_CFG *pCustomCfg;char value[PROPERTY_VALUE_MAX] = {'\0'};//这里被替换成ro.boot.属性进行使用int debugDumpSize = property_get("ro.boot.cts.flag",value, NULL);ALOGE("dxf_%s:    property_get: %d  ,%s", __FUNCTION__, debugDumpSize, value);if (debugDumpSize == 4) {pCustomCfg = &gCustomCfgCts[IMGSENSOR_SENSOR_IDX_MIN_NUM];} else {pCustomCfg = &gCustomCfg[IMGSENSOR_SENSOR_IDX_MIN_NUM];}

(A.2)

#include <cutils/properties.h>char value[PROPERTY_VALUE_MAX] = {'\0'};int size = property_get("ro.boot.cts.m602", value, "false");if(size == 5){MY_LOG("dxf_isp_30_if: %d %d\n", i4NewAEMinFps, i4NewAEMaxFps);i4NewAEMinFps = 5000;i4NewAEMaxFps = 30000;}

(A.3)

using android::base::GetProperty;
using android::base::SetProperty;std::string bootscript = GetProperty("ro.boot.init_rc", "");
SetProperty("ro.boot.avb_version", avb_version);android::base::GetBoolProperty("ro.oem_unlock_supported", false);
std::string adb_enabled = android::base::GetProperty("init.svc.adbd", "");
//system/core/base/properties.cppbool GetBoolProperty(const std::string& key, bool default_value)
T GetIntProperty(const std::string& key, T default_value, T min, T max)
T GetUintProperty(const std::string& key, T default_value, T max)
std::string GetProperty(const std::string& key, const std::string& default_value)
bool SetProperty(const std::string& key, const std::string& value)

(B)Java中使用

import android.os.SystemProperties;
SystemProperties.getBoolean("ro.boot.cts.flag", false);

Mtk平台系统启动设置属性相关推荐

  1. android MTK平台驱动设置

    1. LCD 1.1怎样新建一个LCD驱动 LCD模组主要包括LCD显示屏和驱动IC.比如LF040DNYB16a模组的驱动IC型号为NT35510.要在MT577平台上新建这个lcd的驱动,步骤如下 ...

  2. MTK驱动(46)---- Android CPU频率设置(MTK平台)

    Android CPU频率设置(MTK平台) 1.CPU 频率设置 主要设置CPU的最大和最小频率 mPerfServiceWrapper.userReg 注册 mPerfServiceWrapper ...

  3. MTK平台设置不同的预览Size

    这边文章记录的是1280x800=1.6屏幕分辨率预览窗口大小,sensor预览实际出图为4656x3496. (1)App设置不同的预览Size的Log分析 (A)预览Size=960x720=1. ...

  4. MTK平台GPIO的使用与调试

    一,DWS的配置 二,Kernel中配置和使用GPIO 三,使用ADB获取/配置GPIO 我们在LINUX外设驱动的开发与调试中,GPIO的正确使用是一门必修课,本文主要描述MTK平台GPIO的使用和 ...

  5. Android 系统(205)---MTK平台分区回读

    MTK平台分区回读 有时遇到各种开机卡死或重启问题,往往我们依靠分区回读的方法来验证是否为软件问题. 在MTK平台我们利用flash_tool工具来回读分区,简单归结为一下步骤. 1.首先选择Down ...

  6. MTK平台性能优化---(1)综述

    1.概述 手机性能优化越来越重要,本文介绍了性能评估.分析和优化的方法.在接下来的章节中,将会分别介绍关于系统.开机启动时间.应用启动速度性能优化,同时也会介绍如何使用一些有用的工具去评测性能瓶颈. ...

  7. MTK平台俄罗斯方块游戏评审

    MTK平台俄罗斯方块小游戏 游戏评审 游戏效果的展示 游戏介绍 游戏流程图 游戏的设计 俄罗斯方块的设计 初始方块的随机生成 检查方块的是否可以移动 方块下移 方块左右移 方块旋转 方块消行 定时器 ...

  8. Android系统定制源码修改 - MTK平台

                                         Android系统定制源码修改 -  MTK平台  1.修改开机弹出欢迎使用SIM MTK工程/mediatek/packag ...

  9. AndroidQ(10.0) MTK平台添加新分区

    65 平台增加一个新分区,用于保存特殊数据,修改文件列表如下 modified: build/make/core/Makefilemodified: build/make/core/config.mk ...

最新文章

  1. 聊天机器人中的深度学习技术(引言)
  2. vc设置按钮文字颜色
  3. Android 系统(124)---Android 如何快速写满存储空间
  4. python60行绘图程序_不敢相信,60行python代码就写出了贪吃蛇游戏
  5. nginx实现动态分离,解决css和js等图片加载问题
  6. 简单的移动端图片裁剪vue插件[旋转,平移,缩放,印花]
  7. qt tcp不可以循环发送_不知道低温冷却液循环泵的冷却剂选择和更换条件?这这里可以找到答案...
  8. qps多少才算高并发_AGV小车价格多少才算合适?
  9. 使用ComponentOne C1WebGrid控件
  10. Centos重置root密码
  11. HTML5+CSS3教程1
  12. 增量式与绝对值编码器的区别
  13. html标记语言格式,标记语言——打印样式
  14. 除了编码,还要会说话(1)
  15. Mat类型中的CV_8UC3、CV_32FC3以及对应的迭代器模板参数Vec3b,Vec3f的一点自己的理解
  16. 2023 USAMO(美国数学奥林匹克)试题答案解析
  17. 大陆证券(期货)交易所手续费计算方式详解
  18. 2884: 水果分级
  19. koa2使用ioredis存储session
  20. python N叉树

热门文章

  1. electerm可用的 Termius Dark主题
  2. 全阶滑模观测器程序_感应电动机全局高阶滑模观测器
  3. 种子网站(大型单机游戏,古老电影必备)
  4. Go实战--golang中OAuth2.0的使用(使用google账号进行登陆验证)
  5. 1小时快速搭建一个网站
  6. 国际主权债重组:博奕视角的分析*
  7. J2EE总结:Java命名与目录接口JNDI
  8. the myth of innovation
  9. 倾斜摄影在道路测绘设计中的应用
  10. 如何备考高校/大学教师资格证?