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中!



  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值