vine-users ML アーカイブ



[vine-users:070450] SATAドラ イバ (Re: Vine 3.1 と ata_piix)

  • From: Eitetsu Oomoto <oomoto@xxxxxxxxxxxxxxxxxx>
  • Subject: [vine-users:070450] SATAドラ イバ (Re: Vine 3.1 と ata_piix)
  • Date: Tue, 15 Feb 2005 18:33:56 +0900
京都産業大学の大本です.

少し前の投稿ですが,

At 10:45 PM +0900 05.2.2, FUKUHARA Makoto wrote:
Intel の Serial/Parallel ATA コントローラ用 driver は,2.4.28 では
 drivers/scsi/ata_piix.c と drivers/ide/pci/piix.c の二つがあり,たとえば
8086:24d1: 82801EB (ICH5) SATA Controller
の場合はどちらでも使えそうですが,
8086:24df: 82801ER (ICH5R) SATA Controller
の場合は ata_piix.c のみ使えそうです.

Vine 3.1 の images/drvblock.img には ata_piix.o が含まれているようなので,
次のようにして 82801ER (ICH5R) で使ってみようとしました.

これに触発されて,本学の設備更新で導入されるIBM x206シリーズへ導入され たVine Linux 3.1のカーネルを入れ替えてSATAドライバを有効化してみまし た.
以下に,その作業記録を参考までに添付します.
#もし,同様の作業を試されたい方は十分ご注意ください.
#ちょっとでも間違えると起動時にカーネルパニックに陥ります(^^;;


----------------------------
x206シリーズのSATA対応カーネルの導入:
Vine Linux 3.1の標準カーネル(2.4.27ベース)には Intel ICH5のSATAコント
ローラチップドライバ ata_piix は含まれていない。
# 2.4系列のSATAサポート情報は
#  http://www.linuxmafia.com/faq/Hardware/sata.html
# を参照のこと

ちなみにICH5を採用しているらしいIBM x206シリーズにはVine Linux 3.1はイ
ンストール可能だが、BIOS設定を Legacy モード(www.vinelinu.orgでは
Combined modeと称されているようだ)に設定した状態なければならず、しか
も、SATAはPIOモード固定で動作し、DMA転送モードは有効化できない。
なおかつ、ATAPI接続のCD-ROM(DVD-ROM)ドライブの転送モードまでも道連れに
なってPIO固定になってしまうようで、DVD再生なんぞ音声途切れまくり!
ひょえー!

この時、x206では、Primary masterにDVD comboドライブ、Secondary master
にIDE HDDが接続されているようにカーネルから認識されており、ここの場合、
rootパーティションは/dev/hdc5に入っている状態である。

そのHDDのI/O性能は、

[root@patpc001 mnt]# /sbin/hdparm -f -t  /dev/hdc

/dev/hdc:
 Timing buffered disk reads:   10 MB in  3.12 seconds =   3.21 MB/sec
[root@patpc001 mnt]# /sbin/hdparm -v /dev/hdc

/dev/hdc:
 multcount    = 16 (on)
 IO_support   =  0 (default 16-bit)
 unmaskirq    =  0 (off)
 using_dma    =  0 (off)
 keepsettings =  0 (off)
 readonly     =  0 (off)
 readahead    =  8 (on)
 geometry     = 9730/255/63, sectors = 80032038912, start = 0

[root@patpc001 mnt]#

ということで、転送速度3.21MB/secしか出ない。遅い、遅すぎる (T_T)
さて、どうする?

www.kernel.orgのChange Logを見ると、2.4.28においてata_piixドライバに相
当に手が入っていることが判明。
ストックのカーネルはさすがに何なので、Vine Seedを探すと
	kernel-2.4.28-0vl3.src.rpm
というのが出てる。ダウンロード/展開して覗くと、ata_piixドライバが確か
含まれているので、これをベースに考える。
Vine 3.1のアップデートに出ているkernelパッケージに含まれたセキュリティ
フィックスのうち、2.4.28に該当するのは
	add Patch22 for fix uselib() privilege elevation (CAN-2004-1235)
のようなので、このパッチだけ取り出してkernel-2.4.29-0vl1.src.rpmに適用
したパッケージ
	kernel-2.4.28-0vl3.1.src.rpm
を作成した。パッチは大部分そのまま適用できたが、一つだけrejectされたの
だが、目視で確認の上、パッチを1行修正すれば大丈夫だった。

このカーネルのソースパッケージからバイナリパッケージを作成する。
ところで、x206シリーズはHyper-Threading有効のPentium-4が載っているので
作成するのはSMPカーネルが必要である。
/tmpにkernel-2.4.28-0vl3.1.src.rpmが配置してあると仮定する。
また、ホームディレクトリにあるrpmディレクトリを${RPM}と表記する。


$ /usr/sbin/mkkpkg --target=i686 --enable-smp /tmp/kernel-2.4.28-0vl3.1.src.rpm

カーネルのmenu configが起動するので、適当に設定する。基本的にデフォル
ト値のままだが、APMをONにしないとSMPで電源が切れないので、これは必須。


選択したコンフィグオプション
Pentium-4プロセッサ最適化(折角、カーネルをビルドし直すので)
Power Management support ON
Software Suspend support ON(Power Management support ONの場合、これを
ONにしないと、コンパイルエラーだった)
CONFIG_SOFTWARE_SUSPEND2_CORE=y
CONFIG_SOFTWARE_SUSPEND2=y
CONFIG_SOFTWARE_SUSPEND_SWAPWRITER=y
CONFIG_SOFTWARE_SUSPEND_LZF_COMPRESSION=y
CONFIG_SOFTWARE_SUSPEND_TEXT_MODE=y
CONFIG_SOFTWARE_SUSPEND_BOOTSPLASH=y

Support for SATA (deprecated; conflicts with libata SATA driver) OFF
# 上記はIDE機器項目中のもの。OFFにしなくても良いかも。

かなり、時間がかかるが、${RPM}/RPMS/i686配下に
	kernel-smp-2.4.28-0vl3.1.i686.rpm
が出来る。
カーネルヘッダのバイナリパッケージは別途作成しないと生成されないので、
これを作成する。

$ /usr/sbin/mkkpkg --enable-smp /tmp/kernel-2.4.28-0vl3.1.src.rpm

--targetオプションを指定しないのがミソですね。
同じくmenu configに答えると${RPM}/RPMS/i386にカーネルヘッダなどのパッ
ケージが生成される。

これでビルドは終了したので、カーネルパッケージのインストールを行う。
# cd ${RPM}/RPMS/i686
# rpm -ivh kernel-smp-2.4.28-0vl3.1.i686.rpm


ここからは、慎重な作業が必要。手順と作業内容をちょっとでも間違えると
全く起動しなくなる!

/etc/modules.confを修正して、ata_piixがエントリーされるようにする。
具体的には、

alias parport_lowlevel parport_pc
alias scsi_hostadapter usb-storage

てな具合いの部分を

alias parport_lowlevel parport_pc
alias scsi_hostadapter ata_piix
#
alias scsi_hostadapter1 usb-storage

と修正する。

次にinitrdイメージを再生成する。実は、SATAディスクはカーネルから見れば
SCSIディスクとして仮想的に認識されるのだが、起動時に必要なSCSIドライバ
はRAMディスクイメージである
	/boot/initrd-*.img
に含まれていて、起動時にinitrdが上手く取り計らってカーネルにロードされ
るのだ。

# /sbin/mkinitrd /boot/initrd-2.4.28-0vl3.1smp.img 2.4.28-0vl3.1smp

これで /boot/initrd-2.4.28-0vl3.1smp.img というファイルができあがる。
このファイルはext2フォーマットの圧縮されたディスクイメージなので、マウ
ントして中身を確認できる。こんな具合いに。

# cp /boot/initrd-2.4.28-0vl3.1smp.img /tmp/initrd-2.4.28-0vl3.1smp.img.gz
# gunzip /tmp/initrd-2.4.28-0vl3.1smp.img.gz
# mount -t ext2 -o loop /tmp/initrd-2.4.28-0vl3.1smp.img /mnt
# df
ファイルシステム    1k-ブロック   使用中      空き 使用% マウント場所
/dev/sda5              4538124   4237304     70292  99% /
none                    515816         0    515816   0% /dev/shm
/tmp/initrd-2.4.28-0vl3.1smp.img
			7745       464      6881   7% /mnt
# ls /mnt/lib
ata_piix.o  libata.o  scsi_mod.o  sd_mod.o  usb-storage.o


これで、ata_piix.oドライバがinitrd.imgファイルにちゃんと含まれてること
が確認できた。

/etc/lilo.confをインストールした新しいカーネルとinitrd.imgファイルに合
わせて修正する。こんな具合いか。


prompt
timeout=50
default=linux
boot=/dev/hdc
map=/boot/map
install=menu
message=/boot/message
lba32

image=/boot/vmlinuz-2.4.28-0vl3.1smp
        label=linux
        initrd=/boot/initrd-2.4.28-0vl3.1smp.img
        read-only
        root=/dev/hdc5
        append="apm=power-off"


この時点では、まだSATAディスクはBIOS設定にてLegacyモード設定であるから、
/dev/hdcとして認識されてるので、lilo.confの記述はこれに従う必要がある。

修正したらブートローダをインストールする。

# /sbin/lilo

ここでエラーが出ているようだと再起動するとハマるので、要注意。

次に、/etc/fstabを書き換えて、

/dev/hdc6               swap                    swap	defaults        0 0

というスワップ設定部分を

/dev/sda6               swap                    swap	defaults        0 0

というように書き換える。SATAディスクがSCSIディスクとして扱われるように
なるので、これが必要なのね。

ブートローダのインストールに成功したら再起動するが、ここでの再起動時に
絶対にBIOS設定画面へ入ること。SATAディスクの設定を必ず
	Legacy -> Native
と変更する (VineLinuxのホームページではEnhanced modeと称されてるのか
な?)。これを忘れるとブート不能となるので要注意です。
また、SATAディスク設定をNativeモードへ切り替えるとVine3.1インストールCDの
rescueモードは、これまたブートしないので、rescue起動したい場合は予め
Legacyモードへ戻すこと。

BIOS画面でSATAモードへ切り替えたら、いよいよ新しいカーネルで再起動する。
ここでもまた、要注意なのが、VineのLilo画面で普通にメニュー選択すると、
ここでもハマってブート不能となることである。
メニュー画面が出たら、まずESCキーを押してプロンプトを出し、次のように入力し
た上で起動する。

Boot: linux root=/dev/sda5

この root=/dev/sda5 というのが今まで/dev/hdcとして認識されていSATAディ
スク上のrootパーティション/dev/hda5に対して、
/dev/sdaというSCSIディスク上のパーティション/dev/sda5としてとして認識
させた状態でカーネルを起動させる魔法の呪文ですな。
# うーむ、知らなかった。。。。。

これで設定を間違えてなければ、SATAディスクをSCSIディスクであるかのよう
に認識して立ち上がるはず。
無事起動したら、再度/etc/lilo.confを修正する。こんな具合いでしょうか?


prompt
timeout=50
default=linux
#boot=/dev/hdc
boot=/dev/sda
map=/boot/map
install=menu
message=/boot/message
lba32

image=/boot/vmlinuz-2.4.28-0vl3.1smp
        label=linux
        initrd=/boot/initrd-2.4.28-0vl3.1smp.img
        read-only
#        root=/dev/hdc5
        root=/dev/sda5
        append="apm=power-off"


要するに /dev/hdc -> /dev/sda に置き換えれば良い。

/etc/lilo.confを修正したら、絶対忘れずに/sbin/liloを実行する。
忘れると、再起動時にカーネルパニックしてブート不能に陥る。
念のため、再起動してみる。

# sync; sync; sync; reboot

これで表示されるLILOブート画面でメニュー選択してもちゃんと起動するよう
になった。あー、やれやれ。
尚、どこかで手順を間違えて起動不能に陥ったら、一旦SATA設定をLegacyモー
ドへ戻してVine3.1インストールCDからrescueブートして問題を修正して再挑
戦することになる(何度繰り返したか。。。。(T_T)


確実にブートするようになったら、カーネルヘッダなどをアップデートする。

# cd ${RPM}/RPMS/i386
# rpm -Uvh kernel-headers-2.4.28-0vl3.1.i386.rpm
# rpm -Uvh kernel-doc-2.4.28-0vl3.1.i386.rpm
# rpm -Uvh kernel-source-2.4.28-0vl3.1.i386.rpm

ちなみに、SATAがNativeサポートされた状態になるとDVD-ROMの光学ドライ
ブもDMA転送がちゃんと効くようになり、DVD視聴時の途切れも無くなり、また
xcdroastによるCD-R作成も問題なく出来るようになりました。

以上
--
京都産業大学 工学部情報通信工学科  大本 英徹
E-mail: oomoto@xxxxxxxxxxxxxxxxxx    Tel: 075-705-1904 (Dial In)
(*^.^*) (*^_^*) (*^o^*) (*^.^*)   Fax: 075-705-1914