2010年8月18日星期三

2010年8月15日星期日

2010年8月12日星期四

EFI Finisher modded for EeeBox B202

我修改了Dalton的EFI Finisher,修改給EeeBox B202用。
修改內容:
- 使用NBI 0.8.4 RC1的Chameleon boot files和CPUID patch kext
- 使用VoodooHDA 2.56
- 變色龍佈景主題使用Eee logo的OEM Theme
- 修改部份Script與刪除EeeBox不須安裝的檔案
- Mac機型使用Macmini2,1(*註1)

Download : http://www.megaupload.com/?d=PGH4ZI8X

*註1: 使用Macmini2,1沒有native SpeedStep。因為EeeBox非行動平台,所以我覺得沒使用SpeedStep也沒關係,如果你想使用native SpeedStep,那請將Mac機型改成MacPro3,1。

EFI Finisher使用方式簡易說明:
1. 先使用myHack Installer製作USB安裝碟,請參考這裡
2. 用USB安裝碟安裝Snow Leopard,且格式化硬碟時請選擇GUID分割區架構。
3. 安裝完Snow Leopard,進到桌面後,再安裝EFI Finisher,然後重新開機,Snow Leopard就安裝完成了,不須使用終端指令,且升級過程也是和Wind U100一樣的步驟,使用UpdateEFI v1.3重新patch gma 27ae kext和重製快取即可。升級步驟請參考這裡

EFI Finisher較詳細的使用方式可以參考這裡
另外,EeeBox B202無法成功睡眠,所以請把睡眠設成永不。

2010年8月3日星期二

Ashley Greene Chameleon 2 Theme for Netbooks

厭倦了原本的佈景主題,所以我將幾個佈景主題的圖示湊一湊,且更換了背景圖案。這個佈景主題適用於1024x600的解析度。



Download:http://www.megaupload.com/?d=3QPI5G2H

2010年8月2日星期一

[DSDT patch 筆記] Wind U100: HPET/IRQ fix

HPET/IRQ衝突修復
搜尋:Device (HPET),並加入以下代碼(黑色字的部分):
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (_CID, EisaId ("PNP0C01")) // added
Name (CRS, ResourceTemplate ()
{
IRQNoFlags () // IRQ flags added
{0}
IRQNoFlags ()
{8}
Memory32Fixed (ReadWrite,
0xFED00000,         // Address Base
0x00000400,         // Address Length
_Y0C)
})
OperationRegion (HCNT, SystemMemory, \HPTC, 0x04)
Field (HCNT, DWordAcc, NoLock, Preserve)
{
HPTS,   2, 
,   5, 
HPTE,   1
}

Method (_STA, 0, NotSerialized)
{
If (LEqual (OSXX (), 0x01))
{
If (HPTE)
{
Return (0x0F)
}
}
Else
{

......以下省略......

搜尋:Method (OSXX, 0, NotSerialized),修改代碼如下(黑色字的部分):
Method (OSXX, 0, NotSerialized)
{
        // If (_OSI ("Windows 2006"))
        If (_OSI ("Darwin")) // Effects HPET
        {
            Return (0x01)
        }
        Else
        {
            Return (0x00)
        }
}

搜尋:Device (PIC),修改代碼如下(黑色字的部分):
Device (PIC)
{
      Name (_HID, EisaId ("PNP0000"))
      Name (_CRS, ResourceTemplate ()
      {
                IO (Decode16,
                    0x0020,             // Range Minimum
                    0x0020,             // Range Maximum
                    0x00,               // Alignment
                    0x02,               // Length
                    )
                IO (Decode16,
                    0x00A0,             // Range Minimum
                    0x00A0,             // Range Maximum
                    0x00,               // Alignment
                    0x02,               // Length
                    )
                /* IRQNoFlags ()
                    {2}
                */
       })
}

搜尋:Device (TMR),修改代碼如下(黑色字的部分):
Device (TMR)
{
Name (_HID, EisaId ("PNP0100"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0040,             // Range Minimum
0x0040,             // Range Maximum
0x00,               // Alignment
0x04,               // Length
)
/* IRQNoFlags ()
  {0}
*/
})
}

Device (RTC0)
{
Name (_HID, EisaId ("PNP0B00"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0070,             // Range Minimum
0x0070,             // Range Maximum
0x00,               // Alignment
0x02,               // Length
)
/* IRQNoFlags ()
  {8}
*/
})
}
...以下省略...


未修改前的HPET使用IRQ 14,如下圖:

修改後的HPET使用IRQ 2,如下圖:

2010年7月25日星期日

[DSDT patch 筆記] Wind U100: GFX Fix, Sleep on Lid Close

1. Sleep on Lid Close :
用TextWrangler打開dsdt.dsl,搜尋: Scope (\_SB),找到以下代碼:
Scope (\_SB)
{
Name (PWRS, 0x00)
Device (PWRB)
....以下省略…

然後在這段代碼上方加入PNLF代碼(黑色字的部分):
Scope (\_SB) //Start display
{
Device (PNLF)
{
Name (_HID, EisaId ("APP0002"))
Name (_CID, "backlight")
Name (_UID, 0x0A)
Name (_STA, 0x0B)
}
} //End Display

Scope (\_SB)
{
Name (PWRS, 0x00)
Device (PWRB)
...以下省略...

接著搜尋: Scope (\_SB.PCI0.SBRG),找到以下代碼:
Scope (\_SB.PCI0.SBRG)
    {
        Device (EC)
        {
            Name (_HID, EisaId ("PNP0C09"))
            Name (_GPE, 0x17)
            Name (CTID, 0x00)
            Name (MYEC, 0x01)
            Name (CTSD, 0x00)
            Name (\PTHR, 0x00)
...以下省略...

然後加入以下代碼(黑色字的部分):
Scope (\_SB.PCI0.SBRG)
{
Device (EC)
{
Name (_HID, EisaId ("PNP0C09"))
Name (_GPE, 0x17)
Name (CTID, 0x00)
Name (MYEC, 0x01)
Name (CTSD, 0x00)
Name (\PTHR, 0x00)
Method (_REG, 2, NotSerialized)
{
If (LEqual (Arg0, 0x03))
{
If (LEqual (Arg1, 0x01))
{
If (\_OSI ("Windows 2009"))
{
Store (0x03, OSVR)
}
Else
{
If (_OSI ("Darwin")) //added
{
Store (0x03, OSVR)
}
Else
{
If (\_OSI ("Windows 2006"))
{
Store (0x02, OSVR)
}
Else
{
......中間省略......
} //add another closing bracket
If (LEqual (Arg0, 0x03))
{
Store (Arg1, MYEC)
}
......以下省略......

修改完後編譯dsdt.dsl,然後把dsdt.aml放到Extra資料夾裡,並且刪除E/E裡的LidSleep.kext,重製kext快取後,重新開機。


2. GFX Fix :
用TextWrangler打開dsdt.dsl,搜尋: Device (IGD),並加入以下代碼(黑色字的部分):
Device (IGD)
{
Name (_ADR, 0x00020000)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"AAPL,HasPanel",  //removes device properties in boot.plist
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}

Method (_DOS, 1, NotSerialized)
{
Store (Arg0, SWIT)
}
...以下省略...

加入這段代碼後,可以將Extra資料夾裡com.apple.Boot.plist的GMA EFI字串刪除,如下圖:

2010年7月18日星期日

[DSDT patch 筆記] Wind U100: Built-In Audio, SATA

先將從Linux中提取出來的dsdt.aml轉成dsdt.dsl(反編譯dsdt.aml),打開終端機,cd到你存放dsdt.aml的資料夾,然後輸入:
iasl -d dsdt.aml
就會產生一個dsdt.dsl檔。

在終端機輸入: lspci -nn,可以查看PCI設備的Device-ID與位址,如下圖:

1. Built-In Audio :
lspci輸出的音效裝置資訊為:
00:1b.0 Audio device [0403]: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller [8086:27d8] (rev 02)
由此可得知,位址為00:1b.0,Device-ID為8086:27d8。
用TextWrangler打開dsdt.dsl,搜尋(Alt+F):0x001B0000 (也就是音效裝置(Audio)的位址00:1b.0),結果應該是搜尋不到的,因為Wind U100原本的DSDT不包含音效裝置的描述。

所以要在dsdt.dsl中加入音效裝置的描述,搜尋(Alt+F) :IDE0,找到Device (IDE0),並在Device (IDE0)的上方插入這段Device (HDEF)的代碼(黑色字的部分):
Device (HDEF)
{
Name (_ADR, 0x001B0000)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0E)
{
"codec-id",
Buffer (0x04)
{
0x88, 0x08, 0xEC, 0x10
},

"layout-id",
Buffer (0x04)
{
0x0C, 0x00, 0x00, 0x00
},

"AAPL,slot-name",
Buffer (0x09)
{
"Built-in"
},

"device_type",
Buffer (0x06)
{
"Audio"
},

"name",
Buffer (0x21)
{
"High Definition Audio Controller"
},

"model",
Buffer (0x1E)
{
"Realtek ALC888 HDA Controller"
},

"PinConfigurations",
Buffer (0x38)
{
/* 0000 */    0xF0, 0x11, 0x11, 0x41, 0x1F, 0x40, 0x21, 0x01,
/* 0008 */    0xF0, 0x11, 0x11, 0x41, 0xF0, 0x11, 0x11, 0x41,
/* 0010 */    0xF0, 0x11, 0x11, 0x41, 0x20, 0x98, 0xA1, 0x01,
/* 0018 */    0x2F, 0x09, 0xA3, 0x99, 0xF0, 0x11, 0x11, 0x41,
/* 0020 */    0x10, 0x01, 0x13, 0x99, 0xF0, 0x11, 0x11, 0x41,
/* 0028 */    0x0D, 0x92, 0x15, 0x40, 0xF0, 0x11, 0x11, 0x41,
/* 0030 */    0xF0, 0x11, 0x11, 0x11, 0x41
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}

Device (IDE0)
{
... 以下省略...



2. SATA :
lspci輸出的SATA controller資訊為:
00:1f.2 SATA controller [0106]: Intel Corporation 82801GBM/GHM (ICH7 Family) SATA AHCI Controller [8086:27c5] (rev 02)
由此可知,SATA controller的位址為00:1f.2,Device-ID為8086:27c5。

用TextWrangler打開dsdt.dsl,搜尋:0x001F0002 (也就是SATA controller的位址為00:1f.2),應該也是搜尋不到的,因為Wind U100原本的DSDT無SATA描述。

要將SATA的代碼插入在Device (IDE0){}的下方,也就是Device (USB0)的上方,因為Device (IDE0){}代碼很長,所以,搜尋: USB0,比較容易找到要插入代碼的位置。
Device (SATA)的代碼(黑色字的部分):
Device (IDE0)
{
...省略...
}


Device (SATA)
{
Name (_ADR, 0x001F0002)
OperationRegion (SACS, PCI_Config, 0x40, 0xC0)
Field (SACS, DWordAcc, NoLock, Preserve)
{
PRIT,   16,
SECT,   16,
PSIT,   4,
SSIT,   4,
Offset (0x08),
SYNC,   4,
Offset (0x0A),
SDT0,   2,
   ,   2,
SDT1,   2,
Offset (0x0B),
SDT2,   2,
   ,   2,
SDT3,   2,
Offset (0x14),
ICR0,   4,
ICR1,   4,
ICR2,   4,
ICR3,   4,
ICR4,   4,
ICR5,   4,
Offset (0x50),
MAPV,   2
}
}

Device (USB0)
{
...以下省略...



3. DTGP fix:
搜尋:Method (_WAK, 1, NotSerialized),並在Method (_WAK, 1, NotSerialized){}的下方插入這段代碼(黑色字的部分):
Method (_WAK, 1, NotSerialized)
{
...省略...
}

Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}

If (LEqual (Arg2, One))
{
Return (One)
}
}
}

Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}


4. 編譯dsdt.dsl:
修改完dsdt.dsl後,在終端機輸入以下指令重新編譯dsdt.dsl:
iasl dsdt.dsl
把編譯出來的dsdt.aml放到EFI分割區的Extra資料夾裡,重新開機,然後用IORegistryExplorer查詢SATA與Audio資訊是否有改變。

未修改DSDT前的IORegistryExplorer畫面(搜尋pci):

修改DSDT - SATA, Audio後的IORegistryExplorer畫面(搜尋pci):