android4.2.2设置选项中的关于设备或者关于平板电脑的字段内容由来之/proc/version

来源:互联网 发布:淘宝网钻石画弥勒佛 编辑:程序博客网 时间:2024/05/18 17:43

 

今天很好奇下面这张图片显示的字段内容从何而来,这些也常常作为Android手机或者平板中的设置项中”关于平板电脑“或者“关于设备”等信息相关。

 

调研学习确认后,初步定为到是通过如下文件来获取的。

1./proc/version/的内容如下

Linux version 3.3.0 (liuyongming@wits) (gcc version 4.6.3 20120201 (prerelease) (crosstool-NG linaro-1.13.1-2012.02-20120222 - Linaro GCC 2012.02) ) #13 SMP PREEMPT Thu Nov 7 20:35:22 CST 2013

这部分内容是自动通过编译器在编译的时候确定的,内核启动后会通过version_proc_show()等函数来创建好vesion并写入相关的内容

static int version_proc_show(struct seq_file *m, void *v){seq_printf(m, linux_proc_banner,utsname()->sysname,utsname()->release,utsname()->version);return 0;}

核心的字段就是在linux_proc_banner这个宏变量中:

#include <generated/compile.h>/* FIXED STRINGS! Don't touch! */const char linux_banner[] ="Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";const char linux_proc_banner[] ="%s version %s"" (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")"" (" LINUX_COMPILER ") %s\n";

很明显最终version的内容是通过上述的几个宏来整合确定 ,那么这些宏在哪里呢?

这些宏是在编译时,结合你的编译环境和编译器的版本最终自动确定的,确定的脚本由kernel目录/scripts/mkcompile.h来生成的,最终生成的文件保存在内核目录include/generated/compile.h中,而这个头文件也整合在编译时被加入到了Linux_banner[]所在的文件中。

 

2.上面是Linux内核专属的一些信息字段,作为android自己的东西,主要维护在内核的属性参数之中

/system/build.prop是由Android编译时由编译脚本build/core/Makefile和Shell脚本build/tools/buildinfo.sh来生成的,综合了整个编译配置环境下的平台相关变量,而这些变量往往在Android系统的关于设备信息中都能查看的到。

  3 ro.build.id=JDQ39  4 ro.build.display.id=fiber_3g-eng 4.2.2 JDQ39 20140110 test-keys  5 ro.build.version.incremental=20140110  6 ro.build.version.sdk=17  7 ro.build.version.codename=REL  8 ro.build.version.release=4.2.2  9 ro.build.date=2014年 01月 10日 星期五 16:03:07 CST 10 ro.build.date.utc=1389340987 11 ro.build.type=eng 12 ro.build.user=root 13 ro.build.host=linux 14 ro.build.tags=test-keys 15 ro.product.model=Softwinner 16 ro.product.brand=Softwinner 17 ro.product.name=fiber_3g 18 ro.product.device=fiber-3g 19 ro.product.board=exdroid 20 ro.product.cpu.abi=armeabi-v7a 21 ro.product.cpu.abi2=armeabi 22 ro.product.manufacturer=unknown 23 ro.product.locale.language=en 24 ro.product.locale.region=US 25 ro.wifi.channels= 26 ro.board.platform=fiber....

就这样,应用程序头通过读取这些文件的信息就可以把需要的字段display给大家查看,而开发者也可以修改这些字段,当然因为是编译时由脚本自动产生,所以也没必要修改太多。



 

1 0