从Android源码修改cpu信息

cpuinfo

网上的文章都是怎么查看/proc/cpuinfo,一直以为这种东西没法改呢,我还是太天真了。/proc/cpuinfo是个文件,只读,想直接写肯定不行的。今天研究了一下,发现它的输出逻辑在:
kernel/[品牌]/[机型代号]/arch/[cpu架构]/kernel/setup.c,修改c_show(struct seq_file *m, void *v)方法,用seq_printf,想输出啥都可以。特地下Linux内核源码下来看,不止Android,其他Linux路径都是类似的。

cpu频率

平常我们通过shell命令查看cpu频率的办法,都是读取/sys/devices/system/cpu/cpu0/cpufreq下的cpuinfo_min_freqcpuinfo_max_freq,它们分别代表cpu的最小频率和最大频率,这个几个文件也是可以修改的,修改后并不是你的cpu就会变快,而是可以骗过某些软件,修改方法如下:在kernel/[品牌]/[型号]/drivers/cpufreq/cpufreq.c找到

show_one(cpuinfo_min_freq, cpuinfo.min_freq);
show_one(cpuinfo_max_freq, cpuinfo.max_freq);

把它们注释掉,修改成以下两行

show_cpu_min_freq(cpuinfo_min_freq, cpuinfo.min_freq);
show_cpu_max_freq(cpuinfo_max_freq,cpuinfo.max_freq);

上面的show_one其实是一个宏定义,那我们也要创建相应的宏。

#define show_cpu_min_freq(file_name, object)            \
static ssize_t show_##file_name             \
(struct cpufreq_policy *policy, char *buf)      \
{                           \
    return sprintf(buf, "%u\n", 307200);    \
}

#define show_cpu_max_freq(file_name, object)            \
static ssize_t show_##file_name             \
(struct cpufreq_policy *policy, char *buf)      \
{                           \
    return sprintf(buf, "%u\n", 1593600);   \
}

上面的307200和1593600就是我们要修改成的最小频率和最大频率。

测试

在Android,修改后执行make bootimage编译内核源码,编译成功后会生成boot.img。让手机进fastboot模式,在源码目录执行fastboot flash boot $OUT/boot.img就把boot.img刷入手机了,重启手机就可以测试。

猜你喜欢

转载自blog.csdn.net/e_one/article/details/80267336