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

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

 

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

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

 

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

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给大家查看,而开发者也可以修改这些字段,当然因为是编译时由脚本自动产生,所以也没必要修改太多。