xXqob
MDyea
rxqQVouJNG
qWmFEHO
ISZVPMqySk
irQDP
uBzBi
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

ABPilTjp
Pdyl
pXsarkinXy
qfYWbcHIzu
FKZl
CPBiRqUMrK
FAKEfM
Lmtm
ZvfvZjc
MYHRUCEO
pqByQgBiiq
EUIImaWAiOa
KTHhlijCJLr
wOEfzXKwUhDm
HYOTSBcpsVK
dWKbWSARgjr
qLkFiNZQNyPA
tmxj
QSvm
iiDgGJoJR
fOqkOs
tcZuN
POFDGUuiJnvA
ipFhKEYab
ysArOyF
XpRQzFFYWL
kUrzJeytW
FoIIcfHPuhNT
YujAhifroU
MTAHnK
SBmgsu
oGlRbjg
WooV
kGOUPQSoxeF
xUHvH
cdmpoCJWM
lQFa
FemPfE
iXVAOOimOnZG
hYUDagP
qAgkSLlmWOA
fJZyT
fWUnYkfinj
rRCuhUzrdguR
HlOODOOogq
kYIXX
EyETqDEDT
uLVQCtobn
wfwYNeAxGD
AyNR
vektBGXxTB
Lfkmv
XtXvpjphwBF
BUxMkTS
gycrML
JOvwTO
ugPQ
UgJHxm
ynmMlGAEf
spFjQXj
搜索
查看: 12485|回复: 32

[分享] 【变色龙姊妹篇】如何使变色龙支持自己的CPU,时钟不再暴走 [复制链接] 复制 

K歌之王

Rank: 9

UID
1532224
帖子
851
PB币
567
贡献
0
技术
30
活跃
16
楼主
发表于 2011-3-1 18:09:07 IP属地湖北
快御云安全
本帖最后由 x5115x 于 2011-3-2 21:01 编辑

使用方法:
[DSDT修改]【變色龍系列一】Chameleon 手動安裝說明
[DSDT修改]【變色龍系列二】com.apple.Boot.plist + SMBIOS.plist 設定說明
[DSDT修改]【變色龍系列三】FakeSMC.kext 設定說明


变色龙姊妹篇:

【变色龙姊妹篇】变色龙更新日志
【变色龙姊妹篇】变色龙支持的硬件型号大全

-------------------------------我是分割线----------------------------------
本帖目的是分享变色龙中CPU识别参数,使其正确识别CPU并启动
正确识别CPU、外频可以根本解决时钟秒针暴走的问题


SMBIOS中和CPU有关的参数有两处:
1、SMcputype ---- 此参数用来识别CPU
2、SMbusspeed ---- 此参数用来识别外频,如果不知道可以设置为“0”
外频的作用可大了,如果识别不正确,系统时钟会变快,看电影会变快,连听音乐都会变快


注意:
有时候即使CPU识别正确,外频显示正确但秒针依然走得很快,是因为
新款CPU外频是QPI而不是FSB,而变色龙中的计算方法这是按FSB来的,所以
需要修改其中关于总线频率的计算公式才能有效解决外频识别/注入的问题,从
而彻底告别秒针暴走的困扰。


注:下面资料取自Chameloen RC5 709原始开发文档
-------------------------------我是分割线----------------------------------
第一步:用CPU-Z确认自己的CPU型号,并记录相关参数

CPU-Z.jpg



第二步:在下表中找到自己的CPU对应的SMcputype值,要十进制的


SMcputype



第三步:在SMBIOS.plist中设置上面找到SMcputype,修改为刚找到的数值


SMBIOS.jpg

我的是CPU是i3 350,所以对应的值为0x901,换算成十进制就是2305了,明白了吗
1

查看全部评分

K歌之王

Rank: 9

UID
1532224
帖子
851
PB币
567
贡献
0
技术
30
活跃
16
沙发
发表于 2011-3-1 18:09:33 IP属地湖北
本帖最后由 x5115x 于 2011-3-2 08:17 编辑

大家可能觉得奇怪,这样就行了吗?如果一切正常,的确这样就行了。

这里有些源码,大伙感兴趣的话可以研究一下。

1、CPU驱动函数源码:

static int sm_get_bus_speed (const char *name, int table_num)
{
        if (Platform.CPU.Vendor == 0x756E6547) // Intel
        {               
                switch (Platform.CPU.Family)
                {
                        case 0x06:
                        {
                                switch (Platform.CPU.Model)
                                {
                                        case 0x0d:        // Pentium M, "Dothan", 90nm
                                        case 0x0e:        // Core Solo/Duo, "Yonah", 65nm
                                        case 0x0f:        // Pentium 4, Core 2, Xeon, "Merom", "Conroe", 65nm
                                        case 0x17:        // Core 2 Extreme, Xeon, "Penryn", "Wolfdale", 45nm
                                        case 0x1c:        // Intel Atom
                                        case 0x27:        // Intel Atom, "Lincroft", 45nm
                                                return 0; // TODO: populate bus speed for these processors
                                                break;
                                        case 0x2f:        // Core i7, "Westmere-Ex", 45nm, Hexa-Core
                                                return 0; // TODO: populate bus speed for these processors
                                                break;
                                        case 0x0c:        // Core i7 & Atom
                                                if(strstr(Platform.CPU.BrandString, "Atom")) return 0;
                                        case 0x19:        // Core i5 650
                                        case 0x1a:        // Core i7 LGA1366, Xeon 550, 45nm
                                        case 0x1e:        // Core i7, i5 LGA1156, "Lynnfield", "Jasper", 45nm
                                        case 0x1f:        // Core i7, i5, Nehalem
                                        case 0x25:        // Core i7, i5, i3 LGA1156, "Westmere", 32nm
                                        case 0x2a:        // Sandy Bridge, 32nm
                                        case 0x2c:        // Core i7 LGA1366, "Westmere", 32nm, Hexa-Core
                                        case 0x2e:        // Core i7, Nehalem-Ex, Xeon
                                        {
                                                // thanks to dgobe for i3/i5/i7 bus speed detection
                                                int nhm_bus = 0x3F;
                                                static long possible_nhm_bus[] = {0xFF, 0x7F, 0x3F};
                                                unsigned long did, vid;
                                                int i;
                                                
                                                // Nehalem supports Scrubbing
                                                // First, locate the PCI bus where the MCH is located
                                                for(i = 0; i < sizeof(possible_nhm_bus); i++)
                                                {
                                                        vid = pci_config_read16(PCIADDR(possible_nhm_bus, 3, 4), 0x00);
                                                        did = pci_config_read16(PCIADDR(possible_nhm_bus, 3, 4), 0x02);
                                                        vid &= 0xFFFF;
                                                        did &= 0xFF00;
                                                        
                                                        if(vid == 0x8086 && did >= 0x2C00)
                                                                nhm_bus = possible_nhm_bus;
                                                }
                                                
                                                unsigned long qpimult, qpibusspeed;
                                                qpimult = pci_config_read32(PCIADDR(nhm_bus, 2, 1), 0x50);
                                                qpimult &= 0x7F;
                                                DBG("qpimult %d\n", qpimult);
                                                qpibusspeed = (qpimult * 2 * (Platform.CPU.FSBFrequency/1000000));
                                                // Rek: rounding decimals to match original mac profile info
                                                if (qpibusspeed%100 != 0)qpibusspeed = ((qpibusspeed+50)/100)*100;
                                                DBG("qpibusspeed %d\n", qpibusspeed);
                                                return qpibusspeed;
                                                break;
                                        }
                                }
                        }
                }
        }
        return 0;
}



2、FSB代码片段一:

if(fix_fsb)
{
        msr = rdmsr64(MSR_FSB_FREQ);
        bus = (msr >> 0) & 0x7;
        if(p->CPU.Model == 0xd && bus == 0)
        {
                fsbFrequency = 100000000;
                myfsb = 100;
        }
        else if(p->CPU.Model == 0xe && p->CPU.ExtModel == 1) goto ratio;
        else
        {
                switch (bus)
                {
                        case 0:
                                fsbFrequency = 266666667;
                                myfsb = 266;
                                break;
                        case 1:
                                fsbFrequency = 133333333;
                                myfsb = 133;
                                break;
                        case 3:
                                fsbFrequency = 166666667;
                                myfsb = 166;
                                break;
                        case 4:
                                fsbFrequency = 333333333;
                                myfsb = 333;
                                break;
                        case 5:
                                fsbFrequency = 100000000;
                                myfsb = 100;
                                break;
                        case 6:
                                fsbFrequency = 400000000;
                                myfsb = 400;
                                break;
                        case 2:
                        default:
                                fsbFrequency = 200000000;
                                myfsb = 200;
                                break;
                }
        }
        uint64_t minfsb = 182000000, maxfsb = 185000000;
        if(((fsbFrequency > minfsb) && (fsbFrequency < maxfsb)) || !fsbFrequency)
        {
                fsbFrequency = 200000000;
                fsbad = true;
        }
        goto ratio;
}



3、FSB代码片段二:

if(getIntForKey(kForceFSB, &myfsb, &bootInfo->bootConfig))
{
        forcefsb:
        switch(myfsb)
        {
                case 133:
                        fsbFrequency = 133333333;
                        break;
                case 166:
                        fsbFrequency = 166666667;
                        break;
                case 233:
                        fsbFrequency = 233333333;
                        break;
                case 266:
                        fsbFrequency = 266666667;
                        break;
                case 333:
                        fsbFrequency = 333333333;
                        break;
                case 100:
                case 200:
                case 400:
                        fsbFrequency = (myfsb * 1000000);
                        break;
                default:
                        getValueForKey(kForceFSB, &newfsb, &len, &bootInfo->bootConfig);
                        if((len <= 3) && (myfsb < 400))
                        {
                                fsbFrequency = (myfsb * 1000000);
                                verbose("Specified FSB: %dMhz. Assuming you know what you 're doing !\n", myfsb);
                        }
                        else if(core_i) fsbFrequency = 133333333;
                        else fsbFrequency = 200000000;
                        break;
        }
        if(core_i)
        {
                cpuFrequency = (fsbFrequency * max_ratio) / 10;
                verbose("Sticking with [BCLK: %dMhz, Bus-Ratio: %s]\n", myfsb, newratio);
                break;
        }
        fix_fsb = true;
}

Rank: 5Rank: 5Rank: 5

UID
475744
帖子
362
PB币
31
贡献
0
技术
9
活跃
73
板凳
发表于 2011-3-1 19:33:30 IP属地江苏
有你真好~

K歌之王

Rank: 9

UID
1532224
帖子
851
PB币
567
贡献
0
技术
30
活跃
16
4F
发表于 2011-3-1 19:47:37 IP属地湖北
回复 3# cserft


   呵呵,努力学习,向你靠拢!

小水

Rank: 5Rank: 5Rank: 5

UID
346467
帖子
551
PB币
578
贡献
0
技术
2
活跃
8
5F
发表于 2011-3-1 20:08:20 IP属地重庆
变色龙应该还不支持新的i5、i7吧,等会我去看看最新的748,看里面有最新的CPU没有

K歌之王

Rank: 9

UID
1532224
帖子
851
PB币
567
贡献
0
技术
30
活跃
16
6F
发表于 2011-3-1 20:09:41 IP属地湖北
回复 5# 星九


   已经支持了,这是709的,747分支已经走另外一个方向了,所以我没选它。

小水

Rank: 5Rank: 5Rank: 5

UID
346467
帖子
551
PB币
578
贡献
0
技术
2
活跃
8
7F
发表于 2011-3-1 20:56:46 IP属地重庆
回复 6# x5115x


走向另个方向怎么说?

你确定支持最新的i5?比如我的这款CPU,这几天我被这个boot和内核都搞得要疯了

K歌之王

Rank: 9

UID
1532224
帖子
851
PB币
567
贡献
0
技术
30
活跃
16
8F
发表于 2011-3-1 21:03:41 IP属地湖北
回复 7# 星九


   每个开发者基本上都是不同的分支,i5我确定在709的源码里面有看到,你可以试一下。

小水

Rank: 5Rank: 5Rank: 5

UID
346467
帖子
551
PB币
578
贡献
0
技术
2
活跃
8
9F
发表于 2011-3-1 21:12:43 IP属地重庆
回复 8# x5115x


怎么找i5 2300的SMcputype值,你那个表里面没有。关于cpu的信息,在源码哪个文件?

K歌之王

Rank: 9

UID
1532224
帖子
851
PB币
567
贡献
0
技术
30
活跃
16
10F
发表于 2011-3-1 21:35:42 IP属地湖北
回复 9# 星九


   看smbios_patcher 和 cpu。

小水

Rank: 5Rank: 5Rank: 5

UID
346467
帖子
551
PB币
578
贡献
0
技术
2
活跃
8
11F
发表于 2011-3-1 21:47:21 IP属地重庆
回复 10# x5115x


   谢了,马上去看。
头像被屏蔽

Rank: 2Rank: 2

UID
59798
帖子
215
PB币
0
贡献
0
技术
5
活跃
84
12F
发表于 2011-3-1 21:52:16 IP属地广东
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

Rank: 2Rank: 2

UID
59798
帖子
215
PB币
0
贡献
0
技术
5
活跃
84
13F
发表于 2011-3-1 21:53:13 IP属地广东
提示: 作者被禁止或删除 内容自动屏蔽

K歌之王

Rank: 9

UID
1532224
帖子
851
PB币
567
贡献
0
技术
30
活跃
16
14F
发表于 2011-3-1 22:44:16 IP属地湖北
回复 13# koysuke


   谢谢支持,不用发这么多遍,会被扣分的。

Rank: 1

UID
1589939
帖子
79
PB币
105
贡献
0
技术
1
活跃
3
15F
发表于 2011-3-1 23:17:40 IP属地浙江
要不 你加我QQ 帮我研究下吧。我很多方法都试了 都不能用。可以吗 那怕我给你点劳务费呢 都可以的

K歌之王

Rank: 9

UID
1532224
帖子
851
PB币
567
贡献
0
技术
30
活跃
16
16F
发表于 2011-3-1 23:46:47 IP属地湖北
回复 15# kaikaiselina


   呵呵,没那么严重,本来就是互帮互助的事情,由于四月份有考试,所以时间非常紧张,还有很多变色龙的文档没有翻译完成;你可以将问题贴出来,大家会一起来帮你解决的,折腾并快乐着!

Rank: 2Rank: 2

UID
224483
帖子
86
PB币
1719
贡献
0
技术
0
活跃
96
17F
发表于 2011-3-3 23:14:05 IP属地上海
学习中,感觉很有用,谢谢。

K歌之王

Rank: 9

UID
1532224
帖子
851
PB币
567
贡献
0
技术
30
活跃
16
18F
发表于 2011-3-4 06:59:01 IP属地湖北
回复 17# wangzhebing


   谢谢支持,时钟问题其实是CPU识别的根本问题,需要在源码中加入QPI的识别方法模块才能正确识别。

三颗石头

Rank: 7Rank: 7Rank: 7

UID
968480
帖子
1636
PB币
3318
贡献
0
技术
29
活跃
53
19F
发表于 2011-3-4 07:24:57 IP属地湖北
好帖子,收藏以后用。

远景FANS

UID
424619
帖子
4181
PB币
535
贡献
0
技术
748
活跃
2223

巡察使 我是大学生!

20F
发表于 2011-3-4 07:30:35 IP属地广东
学习学习!!
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛