⑴ iDSDT編譯aml時錯誤,求助大神修復
IDSDT的編譯器太老了,建議換成最新的編譯器編譯,然後手工加入代碼,IDSDT的作用僅限於參考價值。英特爾已經發布了支持ACPI規范5.0的IASL編譯器。
具體參考英特爾對新版本編譯器的改進說明PDF文檔,英特爾官網有介紹。
⑵ 如何在centos6.5的kvm虛擬機中永久激活windows2008
一、激活原理
目前激活Windows7/Windows2008的各種方法充斥互聯網,但公認比較完美的激活方式是將品牌機(例如DELL、LENOVO等)的SLIC信息表刷寫進需要安裝Windows系統的計算機BIOS中,將該計算機「模擬」為品牌機,然後安裝微軟的OEM版Windows7/Windows2008並自動激活。
相信喜歡搞破解的童鞋都應該知道其中的奧秘,微軟和PC廠商為了減輕對於操作系統的激活負荷,對大多數品牌機實行了有別於聯網激活的「SLIC激活機制」:當Windows操作系統啟動時,就會自行讀取本機BIOS中的SLIC信息表,以及操作系統的「OEM密鑰」和「OEM證書」,如果三者完全吻合、驗證一致,Windows7/Windows2008系統就會被識別為自動激活的OEM版本。
筆者研究發現,Windows2012(注意不是Windows2012_R2,下同)與以往激活Windows7/Windows2008的方式類似,依然可以採用刷寫BIOS中SLIC信息表安裝OEM版系統的方式實現永久激活,只不過激活Windows2012需要SLIC2.2版,經測試SLIC2.2能夠向下兼容SLIC2.1/2.0。
眾所周知,虛擬機軟體也是有BIOS的,目前市場上常見的虛擬機軟體,如VMware、Xen、Kvm等均通過軟體模擬的方式「模擬」硬體BIOS。既然可以採用刷寫計算機硬體BIOS的方式實現永久激活,那麼如果能夠將SLIC2.2信息表通過軟體再編譯方式「灌入」虛擬機的BIOS中,然後再安裝Windows2012的OEM版本,不就可以與刷寫BIOS硬體實現自動激活「異曲同工」了嗎?
二、核心問題
激活原理已經非常明確了,現在的關鍵問題是如何重新編譯Linux虛擬機的問題了,這涉及Linux內核的重新編譯,一些菜鳥可能望而生畏,盡管編譯 Linux全部內核確實需要較高的技術水平,但重新編譯Linux的BIOS難度並不高,初學者也可以輕松實現。本文以Linux的常見版本CentOs6.5為例,詳細講解重新編譯KVM虛擬機BIOS的步驟。本文的方法同樣適用Ubuntu等 Linux版本。
CentOs6.5虛擬機KVM的BIOS實際是一個二進制的可執行文件,默認安裝路徑為/usr/share/seabios/bios.bin。筆者研究發現,KVM虛擬機BIOS使用的是開源軟體 seabios,該軟體的源代碼可以在互聯網上找到,開源組織也製作了為seabios軟體增加相應SLIC信息表的補丁包,下載seabios的源代碼並打上該補丁包,然後重新編譯並替換Linux默認的bios.bin文件,就可以將虛擬機「模擬」為品牌機,然後自動激活OEM版的Windows2012系統了,這種激活方式是永久激活,激活後的Windows2012可以打上微軟的後續補丁且絕對不會被封殺。
三、詳細步驟
1.獲取SLIC2.2信息表。當前SLIC2.1的信息表網上很容易找到,SLIC2.2的信息表不多,比較容易找到的是DELL 版的SLIC2.2信息表。當然也可以找一台預裝了Windows2012的品牌機(市面上比較常見的是DELL的機器),然後使用SLIC_Toolkit3.2工具導出該機器的SLIC表。SLIC2.1/2.2表為二進制文件,長度均為374位元組(這一點一定要注意)。
2.安裝CentOs6.5_x64版操作系統。記得把gcc安裝上,然後將上一步已經獲取的SLIC2.2表拷貝在/ opt目錄中(假定文件名稱為DELL_SLIC2.2.BIN)。
3.在root用戶下安裝git,、iasl及所有依賴包。
#yum install git
#yum install iasl //這是必須安裝的包
4.使用git獲取sealic項目的源碼。
# mkdir bios //目錄可以自己隨便建
#cd bios
#git clone git://github.com/ghuntley/seaslic //獲取源代碼
#ls -ls
Seaslic //用git軟體獲取源代碼後會有多出一個目錄
# cd seaslic
#ls
patch.sh README.markdown seabios.patch seabios.submole
//該目錄共包含三個文件和一個子目錄,其中子目錄seabios.submole需要刪除掉,用我們後面下載的內容重建。
#rm -rf seabios.submole
5.從地址code.coreboot.org/p/seabios下載的SeaBios的源碼並解壓。注意源代碼一定要下載1.7.3.2版本的,這一點也很關鍵,千萬不能搞錯了。
#tar xzvf seabios-1.7.3.2.tar.gz 解壓在/bios目錄下。
6.重建seabios.submole
#cd /bios
# cp –r seabios-1.7.3.2 seaslic/seabios.submole
# cd seaslic
# ls
patch.sh README.markdown seabios.patch seabios.submole
進入我們重建的seabios.submole目錄,可以發現有bios的源代碼存在:
# cd seabios.submole
# ls
COPYING COPYING.LESSER Makefile README README.CSM src TODO tools vgasrc
# cd src
可以發現seabios的源代碼,我們需要重新編譯這些源代碼,生成新的bios.bin 文件,用於替代CentOs6.5系統自帶的bios.bin。
7.查看/bios/seaslic /patch.sh文件。這是一個批處理文件,只有2行有用。用Linux的命令方式執行,為防止輸入錯誤,最好從patch.sh中復制粘貼後在root用戶下執行:
①將SLIC2.2文件轉換為C語言包含文件格式(acpi-slic.hex)的命令:
#xxd -i /opt/DELL_SLIC2.2.BIN | grep -v -E "len "| sed 's/unsigned char.*/static char SLIC[] = {/' > seabios.submole/src/acpi-slic.hex
說明:這條命令執行後將會把SLIC2.2表(即/opt/DELL_SLIC2.2.BIN文件)轉換為C語言包含文件格式(文件名../src/acpi-slic.hex),並以數組形式存在。這一步非常非常關鍵,轉換完成的acpi-slic.hex文件應為2333位元組。如果本條命令執行不成功的話,編譯出來的bios.bin文件不會包含SLIC2.2信息,也就無法實現激活了。
②為acpi.c 文件打補丁的命令:
# cd /bios/seaslic /seabios.submole
#patch -p1 < ../seabios.patch
說明:這條語句執行後將給../ src/acpi.c 文件打上補丁,執行後系統將會提示:
Hunk #1 succeeded at 20 with fuzz 2 (offset -194 lines).
Hunk #2 succeeded at 37 with fuzz 2 (offset -194 lines).
Hunk #3 succeeded at 631 with fuzz 2 (offset -205 lines).
注意:至此我們的准備工作已經全部完成了,下面將重新編譯生成新的bios了。
8.重新編譯生成bios.bin文件
# cd /bios/seaslic /seabios.submole
#make //編譯需要花幾十秒鍾吧,應提示無錯誤、無警告,否則可能需要仔細檢查以上步驟。
查看..seabios.submole/out/bios.bin
看到最後生成的結果了吧,會在..seabios.submole/out/中多出一個bios.bin文件,這個文件就是我們重新編譯生成的虛擬機的bios,將用來替換KVM的系統原有的bios.bin文件。
說明:這里編譯生成bios.bin文件包含有DELL品牌機的SLIC2.2,可以激活DELL的Windows2012_OEM版。同理,我們只要找到其他品牌機的SLIC2.2信息表,重新編譯後就可以安裝激活其他品牌機的OEM版Windows7/2008/2012(SLIC2.1隻能支持Vista/Win7/2008,不支持 Win2012;SLIC2.2則支持XP/Vista以及Win2008/2012並兼容SLIC2.1),與刷寫計算機硬體BIOS實現自動激活的方式相比,採用這種方式激活Windows的風險為零,非常適合批量激活虛擬機的Windows2008/Windows2012。
9.替換CentOs6.5系統默認的bios.bin文件
# cp out/bios.bin /usr/share/seabios/bios.bin
#reboot //重新啟動一下宿主機,然後再重新啟動Windows虛擬機,在啟動KVM虛擬機的時候,可以發現虛擬機的bios 已經更新為最新版本了。
10.激活windows2012
至此KVM虛擬機的bios已經重新配置完成,在KVM中啟動WINDOWS客戶機,然後利用SLIC_Toolkit3.2工具檢查SLIC,會發現你的SLIC信息已經獲取成功,如果你安裝的是OEM版本的 Win2008/2012的話,無需輸入key和證書就能自動激活。你可以從網上網路如下OEM鏡像(我已試驗過可自動激活):
(1)Lenovo的OEM版Windows2008_R2鏡像:
Windows_Server-2008_R2_ENT_OEM.iso或者
Win_Server_08_R2_SP1_33in1.iso
(2)Dell的OEM版Windows2012鏡像:
Ser2012_ST_DA_OEM.iso
(3)如果你手上暫時沒有OEM版的話,也不要緊,可以用slmgr命令手工增加證書及OEM序列號也可以激活Windows2008/20012。直接用管理員身份進入命令行模式:
①slmgr -ilc DELL2.2.XRM-MS //這里找到的是DELL計算機的Windows2012版OEM證書。
②接下來就是寫入注冊號了:
slmgr -ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
說明:下面是我從網上找到的 OEM版序列號(經測試可以激活):
Windows Server 2012 Standard DELL OEM KEY
2G9DG-XKFR6-VG8D3-DN9T9-CDG98
Windows Server 2012 Datacenter DELL OEM KEY
2BVGY-TNRWK-6927W-866R9-66J3H
Windows Server 2008 R2 Standard DELL OEM KEY
D7TCH-6P8JP-KRG4P-VJKYY-P9GFF
Windows Server 2008 R2 Enterprise DELL OEM KEY
BKCJJ-J6G9Y-4P7YF-8D4J7-7TCWD
③執行slmgr –dlv //顯示全部激活信息
④執行slmgr -xpr //顯示Windows2008/2012已經永久激活。