日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發(fā)布時(shí)間:2023/12/15 Android 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RK3399 Android7.1修改安兔兔等第三方软件读到的内核版本信息 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)核版本信息可以通過adb進(jìn)入shell查看:

cat /proc/version

其定義是在kernel/fs/proc/version.c和kernel/init/version.c兩個(gè)文件中。

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

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

以上就是內(nèi)核版本的組成格式,其中的宏定義可以從內(nèi)核代碼中找到。另外幾個(gè)格式符(%s)的內(nèi)容就是在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個(gè)%s分別對(duì)應(yīng)“utsname()->sysname”,“?utsname()->release”,“utsname()->version)”三個(gè)變量信息。

如果想要修改內(nèi)核版本信息,可以直接在以上兩個(gè)代碼段中修改為字符串即可。

如果改動(dòng)較大,系統(tǒng)設(shè)置中的內(nèi)核版本號(hào)可能會(huì)顯示不出來,這時(shí)候需要在“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
??? }

????????以上代碼中的版本號(hào)格式“PROC_VERSION_REGEX” 是與內(nèi)核中的“l(fā)inux_proc_banner”呼應(yīng)的,如果對(duì)應(yīng)不上,系統(tǒng)設(shè)置中就無法正確識(shí)別和顯示了。

????????如果只修改系統(tǒng)設(shè)置中的內(nèi)核版本號(hào)可以只修改這個(gè)DeviceInfoUtils.java文件即可(直接在return后面修改即可)。如果修改使所有app生效,就需要修改內(nèi)核中的配置了。

總結(jié)

以上是生活随笔為你收集整理的RK3399 Android7.1修改安兔兔等第三方软件读到的内核版本信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。