etch/2.6.18-5-xen-amd64をG33チップセットで使う
メモリがあまりにも安いんで8GB積んだマシンを作ってみた。CPUはCore 2 Quad Q6600でマザーボードはG33チップセットを使ったDG33TL。ところがetchのインストーラでインストールできず。武藤さんのetch-custom-1013.isoでインストールはできた。
しかしXenを使うにはどうしたら、、、と困ってしまったんだけど、etchの2.6.18-5-xen-amd64にちょっと手を加えたら動いたので、以下そのメモ。(Ubuntuのカーネルを持ってきても良いような気もするけど)
なお、
という前提です。IDEインターフェースはetch-custom-1013.isoでは動くけど2.6.18では動かないです。SATAのIDEモード/RAIDモードは試してません。
まずは、武藤さんのetch-custom-1013.isoで普通にインストールする。ただし、起動パラメータに pci=nommconf を指定しないと途中で止まってしまいます。
インストールしたら、以下の手順で 2.6.18-5-xen-amd64 を作る。
$ apt-get source linux-2.6 $ cd linux-2.6-2.6.18.dfsg.1 $ dch -i
dch -i で起動するエディタの最初の行が次のようになっているのでバージョンを適宜書き換える。このバージョンの値はあとで使用します。
linux-2.6 (2.6.18.dfsg.1-13etch5) stable-security; urgency=low
私は次のようにしました(あとで使うのは 13etch4.raku2 の部分)。
linux-2.6 (2.6.18.dfsg.1-13etch4.raku2) stable-security; urgency=low
debian/patches/bugfix に次のふたつのファイルを作る。ファイル名は ich9.patch と xen-pm-idle-export.patch
diff -r c8992c4b7a1c -r 8bf8b3d201a9 drivers/scsi/ahci.c --- a/drivers/scsi/ahci.c Tue Sep 18 09:34:09 2007 +0100 +++ b/drivers/scsi/ahci.c Tue Sep 18 16:21:17 2007 +0100 @@ -317,6 +317,28 @@ static const struct pci_device_id ahci_p board_ahci }, /* ICH8M */ { PCI_VENDOR_ID_INTEL, 0x282a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, board_ahci }, /* ICH8M */ + { PCI_VENDOR_ID_INTEL, 0x2922, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + board_ahci }, /* ICH9 */ + { PCI_VENDOR_ID_INTEL, 0x2923, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + board_ahci }, /* ICH9 */ + { PCI_VENDOR_ID_INTEL, 0x2924, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + board_ahci }, /* ICH9 */ + { PCI_VENDOR_ID_INTEL, 0x2925, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + board_ahci }, /* ICH9 */ + { PCI_VENDOR_ID_INTEL, 0x2927, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + board_ahci }, /* ICH9 */ + { PCI_VENDOR_ID_INTEL, 0x2929, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + board_ahci }, /* ICH9M */ + { PCI_VENDOR_ID_INTEL, 0x292a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + board_ahci }, /* ICH9M */ + { PCI_VENDOR_ID_INTEL, 0x292b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + board_ahci }, /* ICH9M */ + { PCI_VENDOR_ID_INTEL, 0x292f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + board_ahci }, /* ICH9M */ + { PCI_VENDOR_ID_INTEL, 0x294d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + board_ahci }, /* ICH9 */ + { PCI_VENDOR_ID_INTEL, 0x294e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, + board_ahci }, /* ICH9M */ /* JMicron */ { 0x197b, 0x2360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, diff -r c8992c4b7a1c -r 8bf8b3d201a9 drivers/scsi/ata_piix.c --- a/drivers/scsi/ata_piix.c Tue Sep 18 09:34:09 2007 +0100 +++ b/drivers/scsi/ata_piix.c Tue Sep 18 16:21:17 2007 +0100 @@ -125,6 +125,7 @@ enum { ich6m_sata_ahci = 6, ich7m_sata_ahci = 7, ich8_sata_ahci = 8, + ich9_sata_ahci = 9, /* constants for mapping table */ P0 = 0, /* port 0 */ @@ -198,6 +199,18 @@ static const struct pci_device_id piix_p { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, /* Mobile SATA Controller IDE (ICH8M, ditto) */ { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci }, + /* SATA Controller 1 IDE (ICH9) */ + { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci }, + /* SATA Controller 1 IDE (ICH9) */ + { 0x8086, 0x2921, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci }, + /* SATA Controller 2 IDE (ICH9) */ + { 0x8086, 0x2926, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci }, + /* Mobile SATA Controller 1 IDE (ICH9M) */ + { 0x8086, 0x2928, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci }, + /* Mobile SATA Controller 2 IDE (ICH9M) */ + { 0x8086, 0x292d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci }, + /* Mobile SATA Controller 2 IDE (ICH9M) */ + { 0x8086, 0x292e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_sata_ahci }, { } /* terminate list */ }; @@ -361,9 +374,22 @@ static const struct piix_map_db ich8_map .present_shift = 8, .map = { /* PM PS SM SS MAP */ - { P0, NA, P1, NA }, /* 00b (hardwired) */ + { P0, P2, P1, P3 }, /* 00b (hardwired when in AHCI) */ { RV, RV, RV, RV }, - { RV, RV, RV, RV }, /* 10b (never) */ + { IDE, IDE, NA, NA }, /* 10b (IDE mode) */ + { RV, RV, RV, RV }, + }, +}; + +static const struct piix_map_db ich9_map_db = { + .mask = 0x3, + .port_enable = 0x3, + .present_shift = 8, + .map = { + /* PM PS SM SS MAP */ + { P0, P2, P1, P3 }, /* 00b (hardwired when in AHCI) */ + { RV, RV, RV, RV }, + { IDE, IDE, NA, NA }, /* 10b (IDE mode) */ { RV, RV, RV, RV }, }, }; @@ -376,6 +402,7 @@ static const struct piix_map_db *piix_ma [ich6m_sata_ahci] = &ich6m_map_db, [ich7m_sata_ahci] = &ich7m_map_db, [ich8_sata_ahci] = &ich8_map_db, + [ich9_sata_ahci] = &ich9_map_db, }; static struct ata_port_info piix_port_info[] = { @@ -485,6 +512,18 @@ static struct ata_port_info piix_port_in .pio_mask = 0x1f, /* pio0-4 */ .mwdma_mask = 0x07, /* mwdma0-2 */ .udma_mask = 0x7f, /* udma0-6 */ + .port_ops = &piix_sata_ops, + }, + + /* ich9_sata_ahci */ + { + .sht = &piix_sht, + .host_flags = ATA_FLAG_SATA | + PIIX_FLAG_CHECKINTR | PIIX_FLAG_SCR | + PIIX_FLAG_AHCI, + .pio_mask = 0x1f, /* pio0-4 */ + .mwdma_mask = 0x07, /* mwdma0-2 */ + .udma_mask = 0x7f, /* udma0-6 */ .port_ops = &piix_sata_ops, }, }; diff -r c8992c4b7a1c -r 8bf8b3d201a9 sound/pci/hda/hda_intel.c --- a/sound/pci/hda/hda_intel.c Tue Sep 18 09:34:09 2007 +0100 +++ b/sound/pci/hda/hda_intel.c Tue Sep 18 16:21:17 2007 +0100 @@ -80,6 +80,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6}, "{Intel, ICH7}," "{Intel, ESB2}," "{Intel, ICH8}," + "{Intel, ICH9}," "{ATI, SB450}," "{ATI, SB600}," "{ATI, RS600}," @@ -1634,6 +1635,8 @@ static struct pci_device_id azx_ids[] = { 0x8086, 0x27d8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH7 */ { 0x8086, 0x269a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ESB2 */ { 0x8086, 0x284b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH8 */ + { 0x8086, 0x293e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH9 */ + { 0x8086, 0x293f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH9 */ { 0x1002, 0x437b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* ATI SB450 */ { 0x1002, 0x4383, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* ATI SB600 */ { 0x1002, 0x793b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RS600 HDMI */
--- source-amd64-xen/arch/x86_64/kernel/process-xen.c.bad 2007-12-04 20:41:45.548664618 +0900 +++ source-amd64-xen/arch/x86_64/kernel/process-xen.c 2007-12-06 00:22:52.213565991 +0900 @@ -72,6 +72,7 @@ * Powermanagement idle function, if any.. */ void (*pm_idle)(void); +EXPORT_SYMBOL(pm_idle); static DEFINE_PER_CPU(unsigned int, cpu_idle_state); static ATOMIC_NOTIFIER_HEAD(idle_notifier);
debian/patches/series に次のふたつのファイルを作る。ファイル名は 13etch4.raku2 と 13etch4.raku2-extra (この 13etch4.raku2 が dch -i で付けたバージョンの値)
+ bugfix/ich9.patch
+ bugfix/xen-pm-idle-export.patch *_xen *_xen-vserver
DG33TLのオンボードGbEは2.6.18のe1000では動かないので、あとで最新のe1000をインストールする。そのためここでは一応e1000をはずしておく。debian/arch/amd64/config 内で
CONFIG_E1000=n
とする。
次の手順でビルドする。
$ fakeroot debian/rules clean $ fakeroot debian/rules setup $ fakeroot make -f debian/rules.gen binary-arch-amd64-xen DEBIAN_KERNEL_JOBS=8
DEBIAN_KERNEL_JOBSは make の -j オプションに渡される。この値はコア数より少し多めにするのがいいみたい。4コアだからと4にすると、ビルド中にtopで見てると、数%〜10%ぐらいアイドルになってることが結構ある。
できた .deb をインストール。
オンボードのe1000を使う場合は再起動するとネットワークが繋がらなくなるので、再起動する前に最新のドライバをダウンロードしておく。
http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&Inst=Yes&ProductID=2247&DwnldID=9180&strOSs=39&OSFullName=Linux*%E2%8C%A9=eng
再起動。
e1000のインストール
$ tar xzf e1000-7.6.12.tar.gz $ cd e1000-7.6.12/src $ sudo make install MANDIR=/usr/local/man $ sudo modprobe e1000
これで、Xenのdom0として動かすことができた。
なお、ich9.patch は http://lists.xensource.com/archives/html/xen-changelog/2007-09/msg00310.html を参考にしました。debianの2.6.18にはirqとデバイスIDだけすでにパッチが当たっていたので、ich9.patch は残りの箇所を抜き出したものです。
xen-pm-idle-export.patch は http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=405140#22 を参考にしました。これが無くても動きますが、起動時に pm_idle ってシンボルが無いといわれます。