文档章节

[Android]关于Android 唯一设备号(ro.serialno)

清水湾2012
 清水湾2012
发布于 2014/04/03 19:30
字数 316
阅读 12386
收藏 15

1.ro.serialno不存在于任何属性文件,比如build.prop, default.prop等,而是在/system/core/init/init.c里由ro.boot.serialno 转换而来,见export_kernel_boot_props()。

2.而ro.boot.serialno的来源是/proc/cmdline,也就是linux kernel启动时被传入的cmdline, 由bootloader传入。 bootloader传进来的是androidboot.serialno, 而不是ro.boot.serialno,因为还要解析过cmdline 3.ro.serialno的用处是来保存唯一设备号,在settings->about->status里会显示,也会用在USB device name里。 about->status 里获取serialno的流程: Build.SERIAL
->getString("ro.serialno") ->SystemProperties.get() ->SystemProperties.native_get() ->SystemProperties_getSS() in android_os_SystemProperties.cpp
->property_get() in Properties.c ->__system_property_get() in System_properties.c in bionic

获取到的前提是之前已经有设置好,也就是有调用property_set() in init.c

4.其他类似ro属性还有: ro.boot.mode ro.boot.baseband ro.boot.bootloader ro.boot.hardware

static void export_kernel_boot_props(void) { char tmp[PROP_VALUE_MAX]; int ret; unsigned i; struct { const char *src_prop; const char *dest_prop; const char *def_val; } prop_map[] = { { "ro.boot.serialno", "ro.serialno", "", }, { "ro.boot.mode", "ro.bootmode", "unknown", }, { "ro.boot.baseband", "ro.baseband", "unknown", }, { "ro.boot.bootloader", "ro.bootloader", "unknown", }, };

for (i = 0; i < ARRAY_SIZE(prop_map); i++) {
    ret = property_get(prop_map[i].src_prop, tmp);
    if (ret > 0)
        property_set(prop_map[i].dest_prop, tmp);
    else
        property_set(prop_map[i].dest_prop, prop_map[i].def_val);
}

ret = property_get("ro.boot.console", tmp);
if (ret)
    strlcpy(console, tmp, sizeof(console));

/* save a copy for init's usage during boot */
property_get("ro.bootmode", tmp);
strlcpy(bootmode, tmp, sizeof(bootmode));

/* if this was given on kernel command line, override what we read
 * before (e.g. from /proc/cpuinfo), if anything */
ret = property_get("ro.boot.hardware", tmp);
if (ret)
    strlcpy(hardware, tmp, sizeof(hardware));
property_set("ro.hardware", hardware);

snprintf(tmp, PROP_VALUE_MAX, "%d", revision);
property_set("ro.revision", tmp);

摘自Android Kitkat 4.4

© 著作权归作者所有

共有 人打赏支持
清水湾2012
粉丝 8
博文 114
码字总数 30735
作品 0
杭州
高级程序员
私信 提问
加载中

评论(1)

iptvphone
iptvphone
save ~
android手机获取手机唯一识别号

一些特殊的代码,对于手机还是挺有用的 显示IMEI: #06# 开启语音拨号记录 ##8351## 关闭语音拨号记录 ##8350## 手机信息/设置 ##4636## 现场测试 ##7262626## PUK解锁 (从紧急拨号界面) 05<...

xiahuawuyu
2012/10/13
0
0
不需要任何权限获得Android设备的唯一ID

Is there a unique Android device ID? Android设备有没有唯一的id?如果有的话,我怎么通过java代码获得这个id? 我读了stack OverStack上每一个答案,谷歌的开发者博客和Android文档,我认...

TCTW
2017/10/25
0
0
Android 设备到底侵犯了微软的什么专利?

最近关于微软通过从Android设备上收取专利授权费用而大赚特赚的消息铺天盖地,这是一件看起来非常讽刺的事情,因为明明是Google基于Linux开发的手机操作系统,怎么会轮到毫不相干的大对头微软...

红薯
2011/07/12
2K
18
Android USB与AOA协议设备端(主机模式,配件模式)

-- UsbManager public static final String ACTIONUSBACCESSORYATTACHED = "android.hardware.usb.action.USBACCESSORYATTACHED"; public static final String ACTIONUSBACCESSORYDETACHED =......

desaco
2018/12/26
0
0
微软到底从 Android 上捞了多少好处?

微软长期以来依靠自己的大批专利数向Android手机厂商收取巨额的专利费已经不是什么秘密了。早在2011年就有消息称微软当时和三星谈判谋求 签订一份让三星每出货一部Android手机就向微软支付1...

oschina
2015/04/12
8.1K
39

没有更多内容

加载失败,请刷新页面

加载更多

day11

architect刘源源
7分钟前
0
0
论学好Linux系统的超级重要性

不知道各位在日常的工作生活中有没有接触过“rm -rf /*”这个命令,因为这个命令搞出来的事情可还不少呢!前段时间就在一个群里看到了有个小伙子,老板让他去维护一下服务器,这小伙也不太懂...

Linux就该这么学
昨天
0
0
git 使用

1,首先在github配置好信息和仓库,然后在本地进行操作 git init git config user.name 'zhangwuer' git config user.email '56789053@qq.com' 2,与远程分支建立连接 git checkout -b test......

天王盖地虎626
昨天
2
0
git checkout 命令详解

在日常的git操作中,git checkout——检出,是我们的常用命令。最为常用的两种情形是创建分支和切换分支。 在下面的命令中,使用了一些简写,在这里说明一下: git st # git statusgit ci ...

shzwork
昨天
7
0
【Nginx】Nginx多级代理,获取客户端真实请求IP以及每级代理IP

Nginx多级代理,获取客户端真实请求IP以及每级代理IP 如图所示,每一级nginx里的location配置里需要加上对应的配置,最后一级nginx是直接到应用,测试时为了方便,直接用echo模块去测试,打印...

薛定谔的旺
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部