修改 Lenovo Y510 BIOS

Posted on the 三月 4th, 2009 under 操作系统 by Tommy

导读

最近非常的想在自己的笔记本上装 Mac OS X 10.5.6 Leopard,也看了很多资料,好不容易,终于下载了2个光盘镜像回来,结果昨天折腾了一晚上,没有成功,很是郁闷。弄到1点多的时候,使用 -v cpus=1 的参数,竟然能用光盘启动了。没有使用这个参数之前,iPC OS X 10.5.6 总是不停的重启。但是 cpus=1 还是很不爽的,于是乎就上网查,发现,还要改 BIOS 里面 ACPI 里面的 DSDT,很是不爽!但是,为了能尽可能完美的使用 Leopard,那就改吧。

本文用到的工具

  1. MMTOOL V3.22 BKMOD,用来修改 AMI BIOS 的东西。下载地址
  2. WinHex,用来提取,编辑和合并 DSDT 的东西。下载地址
  3. Intel ASL Compiler,用来反编译 DSDT.aml 文件,并编译修改后的 DSDT.dsl。下载地址

参考文献

  1. Modified BIOS to get all cores working
  2. MMtool + iasl解决cpus=1(仅限AMI的BIOS)
  3. Advanced Configuration and Power Interface

友情提示

刷新 BIOS 有风险,操作不当,有可能导致无法正常开机。
如因个人操作失误,导致计算机无法启动,本人概不负责。

开始修改 BIOS

1. 取得要修改的 BIOS

访问如下地址,获得最新版的 Lenovo Y510 BIOS:

http://consumersupport.lenovo.com/en/DriversDownloads/drivers_show_1044.html

2. 提取 Single Link Arch BIOS

打开 MMTOOL,点击 Browse 按钮,打开刚才下载的 BIOS 文件,如图1

hack-lenovo-y510-bios-01

选择上面 Tab 里面的 Extract,然后点选下面 ID 为 1B 的模块,点击 Browse 按钮指定一个输出文件名,我这里设置的文件名为 SingleLink.bin。另外,Extract Module 选项一定要选择 In uncompressed form,参考图2:

hack-lenovo-y510-bios-02

最后点击 Extract 按钮,得到 SingleLink.bin 文件。

3. 提取 DSDT.aml 文件

WinHex 工具打开刚才得到的 SingleLink.bin 文件,按 Ctrl + F 搜索“DSDT”,忽略第一个搜索到的结果,然后按 F3,继续搜索,第二个 DSDT 就是我们要找的 DSDT 开始的位置。

在此位置,按鼠标右键,选择 Beginning of block,将此处设置为 block 的起始点,如图3所示:

hack-lenovo-y510-bios-03

然后搜索“WAKh”,应该有三个记录,在最后一个记录处停下。这里跟网上大多数说的 “WAKh.”(注意,这个是多一个点的) 不大一样。实际上 Lenovo Y510 的 DSDT 后面多了一个 OEM 信息。在最后一个 WAKh 之后,还要多加 21 字节,才是完整的 DSDT。在 DSDT 的末尾(注意,是在字母 h 上)按鼠标右键,并设置为 End of block,如图4:

hack-lenovo-y510-bios-04

设置好以后,已经选择的区域会高亮显示。选择文件菜单上的 Edit -> Copy Block -> Into New File,将选择的区域保存为新的文件,并命名为 DSDT.aml,如图5,6:

hack-lenovo-y510-bios-05

hack-lenovo-y510-bios-06

至此,伟大的 DSDT.aml 文件,终于诞生了!~(≧▽≦)/~

4. 修改 DSDT

得到 DSDT.aml 文件以后,我们请出 Intel ASL Compiler,打开一个 DOS 窗口(别问我怎么做……),运行如下命令反编译 DSDT.aml,并得到 DSDT.dsl 文件(图7):

iasl.exe -d DSDT.aml

hack-lenovo-y510-bios-07

用任何你喜欢的文本编辑器打开 DSDT.dsl,找到如下的代码片段:

    Scope (_PR)
    {
        Processor (P001, 0x01, 0x00000810, 0x06) {}
        Alias (P001, CPU1)
    }

    Scope (_PR)
    {
        Processor (P002, 0x02, 0x00000810, 0x06) {}
        Alias (P002, CPU2)
    }

修改为:

    Scope (_PR)
    {
        Processor (P001, 0x01, 0x00000810, 0x06) {}
    }

    Scope (_PR)
    {
        Processor (P002, 0x02, 0x00000810, 0x06) {}
    }

也就是说,删除所有的 Alias(别名)。

然后,用查找替换功能,将所有的 CPU1 替换为 P001CPU2 替换为 P002,保存文件。

接着,我们再用 Interl ASL Compiler 重新编译刚刚修改过的 DSDT.dsl 文件,并得到一个全新的 DSDT.aml,如图8:

hack-lenovo-y510-bios-08

如果编译以后不是 0 Errors 的话,就需要检查一下是不是哪里写错了。新生成的 DSDT.aml 比原来的文件要小一点。到这里,我们已经得到了我们需要的 DSDT 文件。

5. 将 DSDT 重新插入 SingleLink.bin 中

当我们完成了上述的工作后,重新切换到 WinHex,这时,WinHex 会提示文件已经被改动,是否重新加载,确认并重新加载,如图9:

hack-lenovo-y510-bios-09

选择 DSDT.aml 文件,然后按键盘的 Ctrl + A 选择整个文件,然后按 Ctrl + C 复制所有的内容。然后选择 SingleLink.bin 文件,回到刚才步骤3中所找到的 DSDT 的起始位置,如图10所示:

hack-lenovo-y510-bios-10

选择菜单 Edit -> Clipboard Data -> WriteDSDT.aml 文件的内容覆盖原来 SingleLink.binDSDT 的内容(图11)。

hack-lenovo-y510-bios-11

插入完成后,我们将光标移动到 DSDT 的尾部,可以看到新的 DSDT 比原来的小了一些。网上的教程都是说在 h 后面补上一个点(2E),后面的数据都写0,不过我个人觉得其实改不改都行。图12中红色的部分为冗余的内容。

hack-lenovo-y510-bios-12

修改后,保存 SingleLink.bin 文件,此步骤完成。

6. 将 SingleLink.bin 重新插入 BIOS ROM 文件

终于到最后一个步骤了,跟第1个步骤一样,还是 MMTOOL。不过这次选择 Replace 而不是 Extract 了,基本的设置跟步骤1类似,设置好后,按 Replace 按钮即可用 SingleLink.bin 替换原 BIOS ROM 中的 1B 模块。参考图13:

hack-lenovo-y510-bios-13

替换完成以后,可能会有些略微的不一样,将修改好的 BIOS 文件,另存一份,如图14:

hack-lenovo-y510-bios-14

哒哒~~~ BIOS ROM 修改完毕。

7. 刷新 BIOS

将修改好的 BIOS 放到 C 盘根目录,或者你喜欢的地方,重启电脑,按 F2 进入设置模式。

选择 Start easy flash,找到 ROM 文件,刷~~~~

后记

终于写完了,累死了……

其实,在我写完本教程以后,我还没有刷 BIOS 呢,O(∩_∩)O哈哈~

晚上更新了自己修改后的 BIOS,iPC OS X 10.5.6 不用加任何参数可以直接启动。用原版的 Mac OS X 10.5.6 Leopard 的安装盘也可以安装了。~(≧▽≦)/~

附上修改后的 BIOS 文件,解压密码为 tommy.net.cn06CN33WW_Tommy.ROM

6 Responses to '修改 Lenovo Y510 BIOS'

  1. 2009年03月17号于00:43
    David
  2. 2009年03月17号于12:52
    Tommy
  3. 2009年04月5号于12:49
    suannai
  4. 2009年04月5号于18:26
    Tommy
  5. 2009年12月9号于08:50
    David
  6. 2009年12月9号于10:00
    Tommy

Leave a Reply




XHTML::
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>