IDE to SATA変換器がudma2しか認識しない件。

周辺機器, 設定

DELL dimention 4600c に FHC-357 というIDE to SATA変換器を使用して、SerialATA のディスクを ParallelIDE に接続してみたところ udma2 までしか設定できなかった。


以下 Linux のソフトの改造の話になりますが、状況は Linux のログで判明した。
調べたところ、PATAケーブルの40芯ではudma2までとなるようだ。80芯との判別は34pinがGNDに落ちていないかどうかみたいだ。
参考:j9Rの日記Speeding up UltraBay PATA HDs tremendously
このアドレス通りにケーブルを切断すればおkぽい。


プライマリ側にはPATAが接続されており、udma5で動作しているところから
セカンダリ側に接続された変換器がudma2でしか動作しない原因を探ってみた。
>dmesg
[ 6.173939] Probing IDE interface ide1…
[ 6.543937] hdc: WDC WD10EACS-00ZJB0, ATA DISK drive
[ 6.879837] hdc: host max PIO4 wanted PIO255(auto-tune) selected PIO4
[ 6.880146] hdc: host side 80-wire cable detection failed, limiting max speed to UDMA33
[ 6.880150] hdc: UDMA/33 mode selected
80-wire?
調べたところ、PATAケーブルの40芯ではudma2までとなるようだ。80芯との判別は34pinがGNDに落ちているかどうかみたいだ。
ところが、この変換器GNDに落ちている。
ということで、カーネルドライバを強引に修正することにした。
——–
今書いているときに気がついた。GNDに落ちていないのが80芯らしい(‘A`)
参考:IDE延長ケーブル(IDE延長アダプタ)の製作
結局のところudma5で動いたわけだが、この変換器udma2までしかハード的に動かない様に作られているのだろうか。
多分そうだろう・・だが、それ以上で動いたみたいな。
——–
>lspci -vn
00:1f.1 0101: 8086:24db (rev 02) (prog-if 8a [Master SecP PriP])
Subsystem: 1028:0154
Flags: bus master, medium devsel, latency 0, IRQ 18
I/O ports at 01f0 [size=8]
I/O ports at 03f4 [size=1]
I/O ports at 0170 [size=8]
I/O ports at 0374 [size=1]
I/O ports at ffa0 [size=16]
Memory at feb7fc00 (32-bit, non-prefetchable) [size=1K]
Kernel driver in use: PIIX_IDE
Kernel modules: piix
00:1f.2 0101: 8086:24d1 (rev 02) (prog-if 8f [Master SecP SecO PriP PriO])
Subsystem: 1028:0154
Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 18
I/O ports at fe00 [size=8]
I/O ports at fe10 [size=4]
I/O ports at fe20 [size=8]
I/O ports at fe30 [size=4]
I/O ports at fea0 [size=16]
Kernel driver in use: ata_piix
Kernel modules: ata_piix
上がPATA、下がSATA
kernel moduleはpiixらしい。
以下、記憶で書くので不正確
・カーネルのダウンロード
>apt-get install linux-source-2.6.26
>cd /usr/src
>uzip2 linux-source-2.6.26.tar.bz2
>tar xvf linux-source-2.6.26.tar
>ln -s linux-source-2.6.26 linux
>cd linux
・以下のソースを強引に修正
/usr/src/linux/drivers/ide/pci/piix.c
以下の関数
static u8 __devinit piix_cable_detect(ide_hwif_t *hwif)
<< return (reg54h & mask) ? ATA_CBL_PATA80 : ATA_CBL_PATA40;
>>// return (reg54h & mask) ? ATA_CBL_PATA80 : ATA_CBL_PATA40;
>> return ATA_CBL_PATA80;
要するに、盲目で80芯と判断させる。
未確認だが、調べた限りでは以下の方法でもおkぽい
以下の配列
static const struct ich_laptop ich_laptop[] = {
lspci -nv で、表示された項目から
/* devid, subvendor, subdev *
{ 0x24db, 0x1028, 0x0154 }, /* ICH5 on demaintion 4600c (FHC-357) */
の1行を追加でもよいらしい。
参考:j9Rの日記Speeding up UltraBay PATA HDs tremendously
が、自分で使う分には別に汎用性は必要ないので、戻り値を ATA_CBL_PATA80 固定にしてしまう。
・いまのコンフィグを引用
>cp /boot/config-2.6.26-2-686 .config
・コンパイル
>make-kpkg clean
>make-kpkg –initrd –revision=test kernel_image
…..偉い長い
・インストール
>dpkg -i ../linux-image-2.6.26_test_i386.deb
・initrd.imgをつくる
>update-initramfs -c -l 2.6.26
・/boot/grub/menu_listに追加
initrd /initrd.img-2.6.26
・完了
[ 5.732770] Probing IDE interface ide1…
[ 6.016418] hdc: WDC WD10EACS-00ZJB0, ATA DISK drive
[ 6.363666] hdc: host max PIO4 wanted PIO255(auto-tune) selected PIO4
[ 6.363969] hdc: UDMA/100 mode selected
やったー!!
80-wire うんぬんが表示されずに、udma2 の場合は、
udma5 に設定
>hdparm -X69 /dev/hdc
確認
>hdparm -i /dev/hdc
速度テスト
>hpparm -t /dev/hdc
/dev/hdc:
Timing buffered disk reads: 232 MB in 3.02 seconds = 76.78 MB/sec
2倍くらい速くなってますぞー
(ちなみに hdaがudma2で動いていたので、udma5に設定したらすんなり動いた。
リブートしてもudma5なので、なんでかな~?


PAGE TOP
Top