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_freq
和cpuinfo_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刷入手機了,重啟手機就可以測試。