« 2005年7月31日 | メイン | 2005年8月 2日 »

2005年8月 1日

PC-MW70J de Linux (目次)

Category: Linux

Sharp PC-MW70J に Vine Linux 3.1(及び 3.2) のインストール、設定、調整のメモの目次を用意しておきます。今後もっとよい設定や解決した問題が見つかったら、または逆に新たな問題点が見つかったらエントリーとともにこの目次も更新したいと思います。なお、ここでのタイトルとブログのエントリーの表題とは異なっています。

  1. はじめに(購入理由) - Linux に関する情報ゼロ [2005/07/27]
  2. Vine Linux 3.1 のインストール及び初期設定
  3. VineLinux 3.2 のインストール(アップグレード)
  4. その他の話題
  5. 免責の言葉

Vine 4.x に関する情報は私の中でノウハウが蓄積次第紹介したいと思います。

投稿者 kato : 03:10 | コメント (5) | トラックバック

PC-MW70J de Linux #4

Category: Linux

[-> 目次]

おそらく細かい設定は今日で最後になると思います。本当はビデオカードの部分をもう少しなんとかしたいですが使えるのでよしとします。やはり DMA 転送が出来ないとどうしようもないということでなんとかならないものかと調べたところ、どうも設定レベルではなんともならないということが分かってきました。

それでもなんとかしたいということで Google で検索をしていると Parallel IDE HDD への DMAアクセスができない。というページを見つけました。このページを参考にカーネルを修正することを決意しました。以下がそのパッチとなります(ここにファイル[linux-2.4.27_ich6m.patch]を置いておきます )。

diff -uNr linux-2.4.27/drivers/ide/pci/piix.c linux-2.4.27_ich6m/drivers/ide/pci/piix.c --- linux-2.4.27/drivers/ide/pci/piix.c 2004-08-08 08:26:04.000000000 +0900 +++ linux-2.4.27_ich6m/drivers/ide/pci/piix.c 2005-08-01 01:21:16.000000000 +0900 @@ -155,6 +155,7 @@ case PCI_DEVICE_ID_INTEL_82801E_11: case PCI_DEVICE_ID_INTEL_ESB_2: case PCI_DEVICE_ID_INTEL_ICH6_2: + case PCI_DEVICE_ID_INTEL_ICH6_5: p += sprintf(p, "PIIX4 Ultra 100 "); break; case PCI_DEVICE_ID_INTEL_82372FB_1: @@ -294,6 +295,7 @@ case PCI_DEVICE_ID_INTEL_82801EB_11: case PCI_DEVICE_ID_INTEL_ESB_2: case PCI_DEVICE_ID_INTEL_ICH6_2: + case PCI_DEVICE_ID_INTEL_ICH6_5: mode = 3; break; /* UDMA 66 capable */ @@ -688,6 +690,7 @@ case PCI_DEVICE_ID_INTEL_82801E_11: case PCI_DEVICE_ID_INTEL_ESB_2: case PCI_DEVICE_ID_INTEL_ICH6_2: + case PCI_DEVICE_ID_INTEL_ICH6_5: { unsigned int extra = 0; pci_read_config_dword(dev, 0x54, &extra); @@ -885,6 +888,7 @@ { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 18}, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 19}, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 20}, + { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 21}, { 0, }, }; diff -uNr linux-2.4.27/drivers/ide/pci/piix.h linux-2.4.27_ich6m/drivers/ide/pci/piix.h --- linux-2.4.27/drivers/ide/pci/piix.h 2004-04-14 22:05:30.000000000 +0900 +++ linux-2.4.27_ich6m/drivers/ide/pci/piix.h 2005-08-01 01:18:44.000000000 +0900 @@ -333,6 +333,20 @@ .enablebits = {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, .bootable = ON_BOARD, .extra = 0, + },{ /* 21 */ + .vendor = PCI_VENDOR_ID_INTEL, + .device = PCI_DEVICE_ID_INTEL_ICH6_5, + .name = "ICH6M", + .init_setup = init_setup_piix, + .init_chipset = init_chipset_piix, + .init_iops = NULL, + .init_hwif = init_hwif_piix, + .init_dma = init_dma_piix, + .channels = 2, + .autodma = AUTODMA, + .enablebits = {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, + .bootable = ON_BOARD, + .extra = 0, },{ .vendor = 0, .device = 0, diff -uNr linux-2.4.27/include/linux/pci_ids.h linux-2.4.27_ich6m/include/linux/pci_ids.h --- linux-2.4.27/include/linux/pci_ids.h 2004-08-08 08:26:06.000000000 +0900 +++ linux-2.4.27_ich6m/include/linux/pci_ids.h 2005-08-01 01:16:41.000000000 +0900 @@ -1935,6 +1935,7 @@ #define PCI_DEVICE_ID_INTEL_ICH6_0 0x2640 #define PCI_DEVICE_ID_INTEL_ICH6_1 0x2641 #define PCI_DEVICE_ID_INTEL_ICH6_2 0x266f +#define PCI_DEVICE_ID_INTEL_ICH6_5 0x2653 #define PCI_DEVICE_ID_INTEL_ICH6_18 0x266e #define PCI_DEVICE_ID_INTEL_82850_HB 0x2530 #define PCI_DEVICE_ID_INTEL_82845G_HB 0x2560

このパッチを Vine 3.1 の最新カーネル 2.4.27-0vl7.6 に mkkpkg を実行する際に SPEC ファイルを書き換えるという形であててカーネルを再構築。再起動をしてみた。すると dmesg で

Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4 ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx ICH6M: IDE controller at PCI slot 00:1f.2 ICH6M: chipset revision 4 ICH6M: not 100% native mode: will probe irqs later ide0: BM-DMA at 0x1810-0x1817, BIOS settings: hda:DMA, hdb:pio ide1: BM-DMA at 0x1818-0x181f, BIOS settings: hdc:DMA, hdd:pio hda: MATSHITADVD-RAM UJ-822S, ATAPI CD/DVD-ROM drive hdc: FUJITSU MHV2080AT, ATA DISK drive blk: queue c0423b5c, I/O limit 4095Mb (mask 0xffffffff) ide0 at 0x1f0-0x1f7,0x3f6 on irq 14 ide1 at 0x170-0x177,0x376 on irq 15

のようにきちんとチップセットを認識するようになり、デフォルトで DMA 転送がオンになっている状態になりました。そして hdparm -Tt を実行した結果

DMA 転送オフの場合
/dev/hdc:
Timing cached reads: 3508MB in 2.00 seconds = 1754.00 MB/sec
Timing buffered disk reads: 6MB in 3.94 sec = 1.52 MB/sec

DMA 転送オンの場合
Timing cached reads: 3580MB in 2.00 seconds = 1790.00 MB/sec
Timing buffered disk reads: 82MB in 3.02 sec = 27.15 MB/sec

のように無事に10倍以上のパフォーマンスになりました。その結果、ハードディスクに書き込み中に固まる問題も無事に解決しました!確証はないですが、このパッチはカーネル 2.4.26 以降の 2.4.x ならばそのまま使えるのではないかなと思います。

かなりとりあえずで作ったパッチですので、問題が発生するかもしれません(まぁ、私はこのまま使いますので人柱がいることになりますが…)。その場合は自己責任ということで。

最後にもしこのパッチを利用したいディストリビューションなどありましたら特に許可は入りませんので自由に持って行ってください。報告も下さるとうれしいですが、特にいりません。

(2005/09/23 追記)
上のパッチをあててカーネルを再構築する方法ですが、上のパッチ(ファイル名は linux-2.4.27_ich6m.patch とします)を rpm/SOURCES ディレクトリにおきます。次に通常のカーネルパッケージ作成のように

# mkkpkg kernel-2.4.x-0vlx.x.src.rpm

を実行します。途中で SPEC ファイルを書き換えますか?というメニューがありますので、 [y] を入力して編集します。パッチ番号はバッティングしないように 30000 としました。「# END OF PATCH DEFINITIONS」という行の前に

# # enable DMA for Intel 82801FBM (ICH6M) IDE controler # Patch30000: linux-2.4.27_ich6m.patch

を追加、そして「# END OF PATCH APPLICATIONS」という行の前に

# # enable DMA for Intel 82801FBM (ICH6M) IDE controler # %patch30000 -p1

を追加します。そして保存、終了後は通常のカーネルの再構築及びアップデートの方法に従います。

投稿者 kato : 02:35 | コメント (2) | トラックバック