Qcom android L ro.sf.lcd_density属性修改
Posted Eliot_shao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qcom android L ro.sf.lcd_density属性修改相关的知识,希望对你有一定的参考价值。
在kernel里面kernel/drivers/video/fbsysfs.c会导出数据/sys/class/graphics/fb0/virtual_size
在Y:\\LA.BR.1.2.4-05310-8x16.0\\device\\qcom\\common\\init\\init_msm8916.c 中获取virtual_size值,根据不同的屏幕大小设置ro.sf.lcd_density。
其中 PROP_LCDDENSITY的值在device/qcom/common/init/init_msm.h中定义:#define VIRTUAL_SIZE "/sys/class/graphics/fb0/virtual_size"
#define BUF_SIZE 64
void init_msm_properties(unsigned long msm_id, unsigned long msm_ver, char *board_type)
char platform[PROP_VALUE_MAX];
int rc;
unsigned long virtual_size = 0;
char str[BUF_SIZE];
UNUSED(msm_id);
UNUSED(msm_ver);
rc = property_get("ro.board.platform", platform);
if (!rc || !ISMATCH(platform, android_TARGET))
return;
rc = read_file2(VIRTUAL_SIZE, str, sizeof(str));
if (rc)
virtual_size = strtoul(str, NULL, 0);
if(virtual_size >= 1080)
if (ISMATCH(board_type, "SBC"))
property_set(PROP_LCDDENSITY, "240");
property_set(PROP_QEMU_NAVKEY, "0");
else
property_set(PROP_LCDDENSITY, "480");
else if (virtual_size >= 720)
// For 720x1280 resolution
property_set(PROP_LCDDENSITY, "320");
else if (virtual_size >= 480)
// For 480x854 resolution QRD.
property_set(PROP_LCDDENSITY, "240");
else
property_set(PROP_LCDDENSITY, "320");
if (msm_id >= 239 && msm_id <= 243)
property_set("media.msm8939hw", "1");
if (msm_id >= 268 && msm_id <= 271)
property_set("media.msm8929hw", "1");
if (msm_id == 206)
property_set("vidc.enc.narrow.searchrange", "0");
kernel/drivers/video/fbsysfs.c
static ssize_t show_virtual(struct device *device,
struct device_attribute *attr, char *buf)
struct fb_info *fb_info = dev_get_drvdata(device);
return snprintf(buf, PAGE_SIZE, "%d,%d\\n", fb_info->var.xres_virtual,
fb_info->var.yres_virtual);
在Msm_fb.c (drivers\\video\\msm) 定义fb_info->var.xres_virtual
var->xres_virtual = panel_info->xres;
var->yres_virtual = panel_info->yres * mfd->fb_page +
((PAGE_SIZE - remainder)/fix->line_length) * mfd->fb_page;
所以ro.sf.lcd_density最终是有分辨率决定的。
init_msm_properties函数被谁调用了呢?暂时没找到
为了更加便捷的修改ro.sf.lcd_density,后面做了一个实验:
1、 在android系统运行的时候通过adb 修改/system/build.prop文件,添加一行:
ro.sf.lcd_density=480
后重启,发现字体变大了!
2、 所以通过修改/system/build.prop是有效的,后面网上查了一下build.prop的过程,它是由android编译系统生成的文件,主要属性配置来源与三个方面:
① build/tools/buildinfo.sh执行脚本,并输出到build.prop
② 把$(TARGET_DEVICE_DIR)/system.prop的内容追加到build.prop中
③ 收集ADDITIONAL_BUILD_PROPERTIES中的属性,追加到build.prop中。
3、 通过修改
device\\qcom\\msm8916_64_slm755_meig_02\\system.prop
添加一行:
ro.sf.lcd_density=480,编译系统 make –j8
4、 刚开始
out\\target\\product\\msm8916_64_slm755_meig_02\\system\\build.prop
文件中出现了ro.sf.lcd_density=480可是后面又变回到原来的样子,ro.sf.lcd_density=480消失了!!不解!
5、 后来发现是因为在out\\target\\product\\msm8916_64_slm755_meig_02\\system\\下面还有一个
文件:build.prop.bakforspec
这个鬼东西一直会把修改后的build.prop强制还原到以前的状态,坑爹!后来把它删掉,build.prop中新增了修改项:ro.sf.lcd_density=480
所以综上:一般修改属性,或者添加属性,可以修改一下两个文件:
1、 build/target/product/core_base.mk
2、$(TARGET_DEVICE_DIR)/system.prop
(device\\qcom\\msm8916_64_slm755_meig_02\\system.prop)
在编译system的时候会更新到build.prop中!
参考文章: Android属性之build.prop生成过程分析
以上是关于Qcom android L ro.sf.lcd_density属性修改的主要内容,如果未能解决你的问题,请参考以下文章