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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM