RK3399 Android7.1修改安兔兔等第三方软件读到的内核版本信息

内核版本信息可以通过adb进入shell查看:

cat /proc/version

其定义是在kernel/fs/proc/version.c和kernel/init/version.c两个文件中。

kernel/init/version.c中如下代码:

const char linux_proc_banner[] =
    "%s version %s"
    " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")"
    " (" LINUX_COMPILER ") %s\n";

以上就是内核版本的组成格式,其中的宏定义可以从内核代码中找到。另外几个格式符(%s)的内容就是在kernel/fs/proc/version.c中的如下代码中合成:

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;
}

3个%s分别对应“utsname()->sysname”,“ utsname()->release”,“utsname()->version)”三个变量信息。

如果想要修改内核版本信息,可以直接在以上两个代码段中修改为字符串即可。

如果改动较大,系统设置中的内核版本号可能会显示不出来,这时候需要在“frameworks\base\packages\SettingsLib\src\com\android\settingslib\DeviceInfoUtils.java”中配合修改代码,才能正常显示。如下部分代码:

 public static String formatKernelVersion(String rawKernelVersion) {
        // Example (see tests for more):
        // Linux version 3.0.31-g6fb96c9 (android-build@xxx.xxx.xxx.xxx.com) \
        //     (gcc version 4.6.x-xxx 20120106 (prerelease) (GCC) ) #1 SMP PREEMPT \
        //     Thu Jun 28 11:02:39 PDT 2012

        final String PROC_VERSION_REGEX =
                "Linux version (\\S+) " + /* group 1: "3.0.31-g6fb96c9" */
                "\\((\\S+?)\\) " +        /* group 2: "x@y.com" (kernel builder) */
                "(?:\\(gcc.+? \\)) " +    /* ignore: GCC version information */
                "(#\\d+) " +              /* group 3: "#1" */
                "(?:.*?)?" +              /* ignore: optional SMP, PREEMPT, and any CONFIG_FLAGS */
                "((Sun|Mon|Tue|Wed|Thu|Fri|Sat).+)"; /* group 4: "Thu Jun 28 11:02:39 PDT 2012" */

        Matcher m = Pattern.compile(PROC_VERSION_REGEX).matcher(rawKernelVersion);
        if (!m.matches()) {
            Log.e(TAG, "Regex did not match on /proc/version: " + rawKernelVersion);
            return "Unavailable";
        } else if (m.groupCount() < 4) {
            Log.e(TAG, "Regex match on /proc/version only returned " + m.groupCount()
                    + " groups");
            return "Unavailable";
        }
        return m.group(1) + "\n" +                 // 3.0.31-g6fb96c9
                m.group(2) + " " + m.group(3) + "\n" + // x@y.com #1
                m.group(4);                            // Thu Jun 28 11:02:39 PDT 2012
    }

        以上代码中的版本号格式“PROC_VERSION_REGEX” 是与内核中的“linux_proc_banner”呼应的,如果对应不上,系统设置中就无法正确识别和显示了。

        如果只修改系统设置中的内核版本号可以只修改这个DeviceInfoUtils.java文件即可(直接在return后面修改即可)。如果修改使所有app生效,就需要修改内核中的配置了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安兔评测 版 本 号:5.6 开 发 者:北京安兔科技有限公司 发布时间:2015-01-09 文件大小:35.17MB 支持固件:4.0 及以上版本 分享到 安兔评测介绍 安兔评测是一款专门为智能手机、平板电脑、智能电视等设备评测硬件性能(跑分)的软件。 在全球累积已超过1亿用户,凭借简单易用的操作和科学合理的专业测试赢得了国内外用户的广泛认可。 全球用户量第一的硬件性能评测工具 在2014 Google I/O大会上被使用 各大媒体曝光度最高的评测工具 主要特点: 1、最完备的安卓设备评测工具: 集硬件性能评测、HTML5测试、电池测试、视频测试、稳定性测试等五个测试项于一体全面测试设备的硬件、系统及电池等各项性能。 2、最全面的硬件性能评测: 它能一键运行全部12个硬件性能测试项目,包括'多任务'、'Android运行环境'、'RAM运算 '、'RAM速度'、'CPU整数性能'、'CPU浮点性能'、'单线程CPU整数性能'、'单线程CPU浮点性能'、'2D绘图性能'、'3D绘图性能'、'存储I/O'、'数据库I/O',完成测试后给出总分及每项测试分数。 3、最高效准确的验机: 基于安兔庞大的数据库资源,准确制定验机标准,不断分析市场上的新设备,升级验机接口,验机准确率高达99%以上。 4、最直观HTML5性能测试: 酷炫的HTML5测试场景,每个测试项目过度流畅,直观显示该设备的HTML5性能。 v5.6更新: 增加64位测试插件,充分体现64位系统性能 适配沉浸式通知栏和虚拟按键 支持NVIDIA Denver架构识别 修复在某些设备崩溃问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值