linux内核dts 设置android 上层属性的方法
不同的board 一般有不同的dts,有时上层需要不同的属性来标识做判断 这时候顺便把属性在dts 设置了上层就不用设置属性,比较方便。
在内核对应dts增加节点
prop_config{
status = "okay";
lcd_width{
property_name="lcd_primary_width";
property_value="1200";
};
lcd_height{
property_name="lcd_primary_height";
property_value="1920";
};
};
在android system/core/init/init.cpp 增加代码
static char prop_config_dir[] = "/sys/firmware/devicetree/base/prop_config/";
static char *get_dts_char(char* path,char *buff) {
FILE *fp = fopen(path, "r");
while (fgets(buff,100,fp)) {
}
fclose(fp);
return buff;
}
static void prop_config_set(void)
{
DIR *dir;
struct dirent *ptr;
char pro_name[150];
char pro_value[150];
char buff_name[100];
char buff_value[100];
PLOG(ERROR) << "set prop-config start";
if ((dir=opendir(prop_config_dir)) == NULL){
PLOG(ERROR) <<"open dt prop-config dir error";
return;
}
while ((ptr=readdir(dir)) != NULL){
if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0)
continue;
if(ptr->d_type != DT_DIR) continue;
sprintf(pro_name, "/sys/firmware/devicetree/base/prop_config/%s/property_name", ptr->d_name);
sprintf(pro_value, "/sys/firmware/devicetree/base/prop_config/%s/property_value", ptr->d_name);
property_set(get_dts_char(pro_name,buff_name),get_dts_char(pro_value,buff_value));
}
closedir(dir);
}
在system/core/init/init.cpp --> main() 中调用prop_config_set
|